arcgis.无法处理具有oid-1
时间: 2024-05-29 08:15:24 浏览: 13
这个错误通常是因为在使用ArcGIS时,数据中的某个字段被设置为了Object ID字段,但没有正确设置为自动递增的。这会导致在尝试添加新的记录时出现错误,因为Object ID字段需要唯一的值。
要解决这个问题,您可以尝试以下步骤:
1. 确认数据中的Object ID字段是否被正确设置为自动递增。您可以在ArcCatalog中右键单击数据,选择“属性”,在“字段”选项卡中查看Object ID字段的属性。
2. 如果Object ID字段未正确设置为自动递增,请在ArcCatalog中右键单击数据,选择“管理”>“删除旧字段”,然后删除Object ID字段。然后再添加新的Object ID字段,并将其设置为自动递增。
3. 如果您仍然遇到问题,请尝试在ArcGIS中创建一个新的空白数据库,并将数据导入该数据库中。这有助于消除任何潜在的数据损坏或格式问题。
希望这些步骤能够帮助您解决这个问题。
相关问题
arcgis自动编号代码
在ArcGIS中,可以通过使用VBScript或Python编写脚本来实现自动编号。其中VBScript代码如下:
```vb
Dim pEditor As Editor: Set pEditor = Application.FindExtensionByName("ESRI Object Editor")
Dim pSketch As IEditor3DDrawing: Set pSketch = pEditor
Dim pFeat As IFeature
pSketch.StartDrawing pEditor.Display, pEditor.EditWorkspace
Set pFeat = pEditor.EditSelection.Next
While Not pFeat Is Nothing
pSketch.DrawText pFeat.ShapeCopy.Centroid, CStr(pFeat.OID)
Set pFeat = pEditor.EditSelection.Next
Wend
pSketch.FinishDrawing
```
Python代码如下:
```python
import arcpy
#获取Editor对象和选择集
editor = arcpy.Editor
selection = editor.selection()
#遍历选择集中的要素
with editor.startOperation():
with arcpy.da.UpdateCursor(selection, ['OID@', 'SHAPE@XY']) as cursor:
for row in cursor:
nid = str(row[0])
if nid.startswith('-'):
nid = '_n' + nid[1:]
elif nid == '0':
nid = '_n'
row[0] = nid
cursor.updateRow(row)
```
这两份代码都会对符合条件的要素(如选择集中的要素)进行遍历,并依次给每个要素打上编号。其中VBScript通过IEditor3DDrawing和DrawText方法可以将编号渲染到地图上,而Python代码则通过arcpy.da.UpdateCursor和updateRow方法直接修改选择集中要素的属性表中的字段值。需要注意的是,以上两份代码是示意性的代码,具体实现中要根据数据集的实际情况进行相应的调整。
arcgis engine点匹配代码
以下是 ArcGIS Engine 中进行点匹配的示例代码:
```c#
// 获取当前地图控件中的地图对象
IMap map = axMapControl1.Map;
// 创建点符号以及查询条件
ISymbol symbol = new SimpleMarkerSymbolClass();
symbol.Size = 10;
symbol.Color = new RgbColorClass() { Red = 255 };
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.WhereClause = "POP2000 > 1000000";
// 进行点查询
IFeatureLayer featureLayer = map.get_Layer(0) as IFeatureLayer;
IFeatureCursor featureCursor = featureLayer.Search(queryFilter, true);
IFeature feature = featureCursor.NextFeature();
// 进行点匹配
IIdentify identify = (IIdentify)map;
IArray array = identify.Identify(featureLayer, symbol as ESRI.ArcGIS.Display.IGeometry);
if (array != null)
{
for (int i = 0; i < array.Count; i++)
{
IFeatureIdentifyObj fobj = (IFeatureIdentifyObj)array.get_Element(i);
IFeature identifiedFeature = fobj.Feature;
MessageBox.Show("匹配到的要素 OID 为:" + identifiedFeature.OID.ToString());
}
}
else
{
MessageBox.Show("未匹配到任何要素!");
}
```
这段代码首先从地图控件中获取当前地图对象,然后创建一个点符号和查询条件,通过 `IFeatureLayer.Search` 方法进行点查询,得到一个 `IFeatureCursor` 对象,再从地图对象中获取 `IIdentify` 接口,通过 `IIdentify.Identify` 方法进行点匹配,得到一个 `IArray` 对象,遍历该对象即可获取匹配到的要素。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![msp](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)