如何根据位置选择空间层并写入属性?

2024-06-06 10:34:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编制一套全球油井数据集。其中一个必要的属性是油井位于陆上还是海上。在20000多条记录中,只有大约1/3的记录填充了此属性。我的问题是:如何使用国家边界内的封闭条件作为点的陆上或离岸位置的确定来自动填充该字段?我更喜欢Python而不是SQL,因为我们仍然是文件GDB格式。在

干杯, 詹姆斯

更新

我必须指出,我对ArcPY相当陌生,所以我不太确定从代码开始。这些是作为要素类存储在文件GDB中的点要素。星期二之前我不会再回到办公室发布记录,但地理空间表中填充了唯一的ID、纬度、海拔、陆上/海上等。该表通过关系类链接到其他三个表,这些关系类由我们的类型字段决定。我们有国家和海洋边界的shapefile,所以拓扑真理都可以作为条件使用。在


Tags: 文件数据sql属性关系格式记录国家
1条回答
网友
1楼 · 发布于 2024-06-06 10:34:22

可以使用“按位置选择”和“更新”光标来完成此操作。屏幕截图显示了附加脚本的结果。这里的基本思想是选择与陆地相交的点,并根据点是否位于陆地上写入属性表“y”或“n”。在

enter image description here


import arcpy, os

ws = r'C:\temp\analysis.gdb\albers'

oilwells = r'C:\temp\analysis.gdb\albers\oilwells'
land = r'C:\temp\analysis.gdb\albers\usa'
oilwells_lyr = "oilwells_lyr"

# Make the first selection and write to attributes
arcpy.MakeFeatureLayer_management(oilwells, oilwells_lyr)
arcpy.SelectLayerByLocation_management (oilwells_lyr, "INTERSECT", land, "", "NEW_SELECTION")

arcpy.AddField_management(oilwells_lyr, "land", "TEXT")

with arcpy.da.UpdateCursor(oilwells_lyr, ["land"]) as cursor:
    for row in cursor:
        row[0] = "y"
        cursor.updateRow(row)

arcpy.MakeFeatureLayer_management(oilwells_lyr, "oilwells_y_lyr")

# Make the second selection and write to attributes
arcpy.SelectLayerByLocation_management (oilwells_lyr, "INTERSECT", land, "", "SWITCH_SELECTION")

with arcpy.da.UpdateCursor(oilwells_lyr, ["land"]) as cursor:
    for row in cursor:
        row[0] = "n"
        cursor.updateRow(row)

arcpy.MakeFeatureLayer_management(oilwells_lyr, "oilwells_n_lyr")

# Merge the two temp layers and create a permanent feature class
arcpy.Merge_management (["oilwells_y_lyr", "oilwells_n_lyr"], os.path.join(ws, "out_fc"))

相关问题 更多 >