版主说不符合本版主题。我看另外一个VB版的为什么能发呢。好吧,直接粘。抛砖引玉吧。
//先把SHP转成featureclass
private IFeatureClass ConvertSHPToFeatureClass(String strSHPDirectory,String strSHPName)
{
IWorkspaceFactory shpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
IWorkspace shpWorkspace = shpWorkspaceFactory.OpenFromFile(strSHPDirectory, 0);
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)shpWorkspace;
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(strSHPName);
return featureClass;
}
//从featureclass 得到TIN
IFeatureClass targetFeatureClass;
string strSourceSHPDirectory="";
string strSourceSHPName="";
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = ("ShapeFile 文件(*.shp)|*.shp");
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strSourceSHPDirectory = System.IO.Path.GetDirectoryName(openFileDialog1.FileName);
strSourceSHPName = System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
}
targetFeatureClass = ConvertSHPToFeatureClass(strSourceSHPDirectory, strSourceSHPName);
IFields pFields = targetFeatureClass.Fields;
int index = pFields.FindField("Contour");//这是我直接从arcCatalog里看到的高程字段名。
//不知道怎么直接通过文件知道哪个字段代表高程,请达人指教
if (index == -1) return;
IField pField = pFields.get_Field(index);//这个方法在帮助文档里没有,不知道为什么,学习中。
IGeoDataset pGeoDataset = targetFeatureClass as IGeoDataset;
IEnvelope pEnvelope = pGeoDataset.Extent;
pEnvelope.SpatialReference = pGeoDataset.SpatialReference;
ITinEdit pTinEdit = new TinClass();
pTinEdit.InitNew(pEnvelope);
object obj = Type.Missing;
pTinEdit.AddFromFeatureClass(targetFeatureClass, null, pField, null,
esriTinSurfaceType.esriTinMassPoint, ref obj);
pTinEdit.SaveAs(@"e:/myTin", ref obj);
pTinEdit.StopEditing(false);
//先把SHP转成featureclass
private IFeatureClass ConvertSHPToFeatureClass(String strSHPDirectory,String strSHPName)
{
IWorkspaceFactory shpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
IWorkspace shpWorkspace = shpWorkspaceFactory.OpenFromFile(strSHPDirectory, 0);
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)shpWorkspace;
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(strSHPName);
return featureClass;
}
//从featureclass 得到TIN
IFeatureClass targetFeatureClass;
string strSourceSHPDirectory="";
string strSourceSHPName="";
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = ("ShapeFile 文件(*.shp)|*.shp");
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strSourceSHPDirectory = System.IO.Path.GetDirectoryName(openFileDialog1.FileName);
strSourceSHPName = System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
}
targetFeatureClass = ConvertSHPToFeatureClass(strSourceSHPDirectory, strSourceSHPName);
IFields pFields = targetFeatureClass.Fields;
int index = pFields.FindField("Contour");//这是我直接从arcCatalog里看到的高程字段名。
//不知道怎么直接通过文件知道哪个字段代表高程,请达人指教
if (index == -1) return;
IField pField = pFields.get_Field(index);//这个方法在帮助文档里没有,不知道为什么,学习中。
IGeoDataset pGeoDataset = targetFeatureClass as IGeoDataset;
IEnvelope pEnvelope = pGeoDataset.Extent;
pEnvelope.SpatialReference = pGeoDataset.SpatialReference;
ITinEdit pTinEdit = new TinClass();
pTinEdit.InitNew(pEnvelope);
object obj = Type.Missing;
pTinEdit.AddFromFeatureClass(targetFeatureClass, null, pField, null,
esriTinSurfaceType.esriTinMassPoint, ref obj);
pTinEdit.SaveAs(@"e:/myTin", ref obj);
pTinEdit.StopEditing(false);