IFeatureBuffer featureBuffer = pFeatureLayer.FeatureClass.CreateFeatureBuffer(); IFeatureCursor featureCursor = pFeatureLayer.FeatureClass.Insert(true); object featureOID; featureBuffer.set_Value(featureBuffer.Fields.FindField("O"), row[0].ToString()); featureBuffer.set_Value(featureBuffer.Fields.FindField("D"), row[2].ToString()); featureBuffer.set_Value(featureBuffer.Fields.FindField("NUM"), int.Parse(row[4].ToString()));
时间: 2024-03-18 07:45:06 浏览: 94
这是一段针对ArcGIS的ArcObjects API代码,用于在要素图层(pFeatureLayer)中插入一个新的要素。首先,通过调用CreateFeatureBuffer方法创建一个新的要素缓存(featureBuffer),然后通过调用Insert方法创建一个新的要素游标(featureCursor)。接下来,通过set_Value方法设置要素缓存(featureBuffer)中字段"O"、"D"和"NUM"的值,分别为row[0].ToString()、row[2].ToString()和int.Parse(row[4].ToString())。最后,通过InsertFeature方法将要素缓存(featureBuffer)插入到要素图层中,并返回插入的要素的OID值(featureOID)。
相关问题
ARCGIS enginee如何将要素类文件的要素保存至FeatureClass中
要将要素类文件中的要素保存至 FeatureClass 中,可以按照以下步骤进行操作:
1. 创建一个新的 FeatureClass,可以使用 ArcCatalog 中的 Create Feature Class 工具来创建;
2. 使用 ArcObjects 中的 IFeatureCursor 接口读取要素类文件中的所有要素;
3. 使用 IFeatureCursor.InsertFeature 方法将每个要素插入到新的 FeatureClass 中。
以下是一个简单的 C# 代码示例,演示了如何将要素类文件中的要素保存至 FeatureClass 中:
```
//打开要素类文件和新的 FeatureClass
IFeatureClass sourceFeatureClass = featureWorkspace.OpenFeatureClass("sourceFeatureClass");
IFeatureClass targetFeatureClass = featureWorkspace.OpenFeatureClass("targetFeatureClass");
//创建要素游标
IFeatureCursor featureCursor = sourceFeatureClass.Search(null, false);
//遍历要素并将其插入到新的 FeatureClass 中
IFeature feature = null;
while ((feature = featureCursor.NextFeature()) != null)
{
IFeatureBuffer featureBuffer = targetFeatureClass.CreateFeatureBuffer();
feature.CopyTo(featureBuffer);
IFeatureCursor insertCursor = targetFeatureClass.Insert(true);
insertCursor.InsertFeature(featureBuffer);
insertCursor.Flush();
}
//释放资源
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
```
注意:上述示例仅供参考,具体实现可能需要根据具体情况进行调整。
C#使用OpenFileDialog选择打开一个要素文件,并将要素保存在FeatureClass中,生成在要素范围之外的均匀分布的随机点
好的,我来回答你的问题。
首先,你可以使用C#中的OpenFileDialog组件来选择要素文件,如下所示:
```csharp
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Shapefile (*.shp)|*.shp";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string shapefilePath = openFileDialog.FileName;
// 在这里将要素保存在FeatureClass中
}
```
接着,你可以使用ArcObjects来生成在要素范围之外的均匀分布的随机点。具体实现步骤如下:
1. 使用`ITopologicalOperator`接口获取要素的外包矩形范围。
```csharp
// 获取要素范围
IFeatureClass featureClass = ...; // 在前面的代码中获取FeatureClass
IFeature feature = featureClass.GetFeature(0); // 假设选择第一个要素
IGeometry geometry = feature.Shape;
IEnvelope envelope = geometry.Envelope;
```
2. 生成随机点,并使用`IPoint`接口来表示点。
```csharp
// 生成随机点
Random random = new Random();
double x = envelope.XMin + (envelope.XMax - envelope.XMin) * random.NextDouble();
double y = envelope.YMin + (envelope.YMax - envelope.YMin) * random.NextDouble();
IPoint point = new PointClass();
point.PutCoords(x, y);
```
3. 检查点是否在要素内,如果在,则重新生成随机点。
```csharp
// 检查点是否在要素内
while (geometry.Contains(point) || geometry.Disjoint(point))
{
x = envelope.XMin + (envelope.XMax - envelope.XMin) * random.NextDouble();
y = envelope.YMin + (envelope.YMax - envelope.YMin) * random.NextDouble();
point.PutCoords(x, y);
}
```
4. 将点保存到要素类中。
```csharp
// 将点保存到要素类中
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
featureBuffer.Shape = point;
IFeatureCursor featureCursor = featureClass.Insert(true);
featureCursor.InsertFeature(featureBuffer);
featureCursor.Flush();
```
以上就是生成在要素范围之外的均匀分布的随机点的步骤了。希望能对你有所帮助。
阅读全文