将 lat/long 几何图形写入要素 class 字段
Writing lat/long geometries to a feature class field
我有一个点要素 class,其中包含超过 8000 万个要素,需要添加字段以包含两个不同字段中的 lat/long 坐标。虽然在 ArcMap 中很容易计算出来,但我需要编写一个脚本,将两者都写入 table,然后四舍五入到小数点后 3 位以内。我尝试同时使用 InsertCursor
和 UpdateCursor
,但无法写入字段。但是,当我使用 SearchCursor
时,我可以检索我无法将它们写入字段的值。
这是我目前正在处理的内容:
import arcpy
from arcpy import env
env.workspace = 'C:\Users\Testing'
env.overwriteOutput = True
inFeatures = "ras2point.shp"
cursor = arcpy.da.InsertCursor(inFeatures, ["SHAPE@X"])
for row in inFeatures:
X = row[0]
cursor.insertRow([X])
del row
del cursor
print 'FINISHED'
您在 UpdateCursor
方面走在了正确的轨道上。如果您还没有添加 XY 字段,那么您可以使用脚本执行此操作并将 field_scale
参数(小数位数)设置为 3 或对值本身进行舍入。然后确保在创建游标时包含新的 XY 字段。
import arcpy
from arcpy import env
env.workspace = 'C:\Users\Testing'
env.overwriteOutput = True
inFeatures = 'ras2point.shp'
arcpy.AddField_management(inFeatures, 'X', 'DOUBLE', 8, 3)
arcpy.AddField_management(inFeatures, 'Y', 'DOUBLE', 8, 3)
with arcpy.da.UpdateCursor(inFeatures, ['SHAPE@X', 'SHAPE@Y', 'X', 'Y']) as cursor:
for row in cursor:
row[2] = round(row[0], 3)
row[3] = round(row[1], 3)
cursor.updateRow(row)
print 'FINISHED'
我有一个点要素 class,其中包含超过 8000 万个要素,需要添加字段以包含两个不同字段中的 lat/long 坐标。虽然在 ArcMap 中很容易计算出来,但我需要编写一个脚本,将两者都写入 table,然后四舍五入到小数点后 3 位以内。我尝试同时使用 InsertCursor
和 UpdateCursor
,但无法写入字段。但是,当我使用 SearchCursor
时,我可以检索我无法将它们写入字段的值。
这是我目前正在处理的内容:
import arcpy
from arcpy import env
env.workspace = 'C:\Users\Testing'
env.overwriteOutput = True
inFeatures = "ras2point.shp"
cursor = arcpy.da.InsertCursor(inFeatures, ["SHAPE@X"])
for row in inFeatures:
X = row[0]
cursor.insertRow([X])
del row
del cursor
print 'FINISHED'
您在 UpdateCursor
方面走在了正确的轨道上。如果您还没有添加 XY 字段,那么您可以使用脚本执行此操作并将 field_scale
参数(小数位数)设置为 3 或对值本身进行舍入。然后确保在创建游标时包含新的 XY 字段。
import arcpy
from arcpy import env
env.workspace = 'C:\Users\Testing'
env.overwriteOutput = True
inFeatures = 'ras2point.shp'
arcpy.AddField_management(inFeatures, 'X', 'DOUBLE', 8, 3)
arcpy.AddField_management(inFeatures, 'Y', 'DOUBLE', 8, 3)
with arcpy.da.UpdateCursor(inFeatures, ['SHAPE@X', 'SHAPE@Y', 'X', 'Y']) as cursor:
for row in cursor:
row[2] = round(row[0], 3)
row[3] = round(row[1], 3)
cursor.updateRow(row)
print 'FINISHED'