操作方法

操作方法:使用 ArcPy 从包含坐标的 CSV 文件创建面

Last Published: March 23, 2023

摘要

在 ArcGIS Pro 中,可以使用地理处理工具通过引用 CSV 文件中的 x 和 y 点坐标数据来创建面。 此过程也可以使用 ArcPy 模块自动执行。 按照本文中描述的工作流,使用独立的 Python 文件 (.py) 从 CSV 文件创建面。 Python 脚本也在 Jupyter NotebookPython 窗口中运行。

过程

Note:
All field values in the CSV file must be numeric data type. If there are text field values, the Python script fails.
  1. 创建一个扩展名为 .py 的文件。
  2. 在运行脚本之前,在文件中指定以下脚本。
    1. 导入所需的模块。
import csv
import os
import arcpy
  1. 将 CSV 文件夹路径、CSV 文件名、新 shapefile 名称和空间参考定义为变量。
in_dir = r"<CSVFileFolderPath>"
csvFile = "<fileName>.csv"
fc = "<newShapefileName>"
in_csv = os.path.join(in_dir, csvFile)
sr = arcpy.SpatialReference(<projectedCoordinateSystemWKID>)
  1. 应用 CreateFeatureclass() 函数,在步骤 2(b) 中指定的文件夹中创建面 shapefile。
arcpy.management.CreateFeatureclass(
    in_dir, fc, geometry_type="POLYGON", spatial_reference=sr
)
out_feature_class = os.path.join(in_dir, fc)
  1. 应用 AddField() 函数,在 shapefile 中添加字段名称。
arcpy.management.AddField(out_feature_class, "<fieldName>", "LONG")
  1. 应用 InsertCursor() 函数,在属性表中插入新行。 应用 append() 函数,将点添加到要素的点数组中。 应用 arcpy.Polygon() 函数创建面。 以下查询语句用于遍历 CSV 文件中的数据。 'row[0]' 表示 CSV 文件中点组 ID 编号的位置,'row[1]' 表示 X 坐标数据的位置,'row[2]' 表示 Y 坐标数据的位置。
with arcpy.da.InsertCursor(out_feature_class, ["SHAPE@", "<fieldName>"]) as cursor:
    point_list = []
    parcel_value = None
    is_first_pass = True

    with open(in_csv, mode="r") as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=",")
        header = next(csv_reader)
        for row in csv_reader:

            if is_first_pass:
                parcel_value = row[0]
                is_first_pass = False
            elif row[0] != parcel_value:
                polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
                cursor.insertRow([polygon, parcel_value])
                parcel_value = row[0]
                point_list = []

            point_list.append(arcpy.Point(row[1], row[2]))

        polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
        cursor.insertRow([polygon, parcel_value])
  1. 应用 print() 函数,在创建面时显示消息。
print("COMPLETED")

以下代码块演示了完整工作脚本。

import csv
import os
import arcpy

in_dir = r"C:\Users\ISC-DT25\Documents\Artwork\Art 29483"
csvFile = "par_point-TEST.csv"
fc = "polygonFromCSV"
in_csv = os.path.join(in_dir, csvFile)
sr = arcpy.SpatialReference(32049)

arcpy.management.CreateFeatureclass(
    in_dir, fc, geometry_type="POLYGON", spatial_reference=sr
)
out_feature_class = os.path.join(in_dir, fc)
arcpy.management.AddField(out_feature_class, "POINTID", "LONG")

with arcpy.da.InsertCursor(out_feature_class, ["SHAPE@", "POINTID"]) as cursor:
    point_list = []
    parcel_value = None
    is_first_pass = True

    with open(in_csv, mode="r") as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=",")
        header = next(csv_reader)
        for row in csv_reader:

            if is_first_pass:
                parcel_value = row[0]
                is_first_pass = False
            elif row[0] != parcel_value:
                polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
                cursor.insertRow([polygon, parcel_value])
                parcel_value = row[0]
                point_list = []

            point_list.append(arcpy.Point(row[1], row[2]))

        polygon = arcpy.Polygon(arcpy.Array(point_list), sr)
        cursor.insertRow([polygon, parcel_value])

print("COMPLETED")
  1. 使用目录窗格中的文件夹连接,在 ArcGIS Pro 中打开新创建的 shapefile。 有关详细信息,请参阅 ArcGIS Pro:将 shapefile 添加到地图

文章 ID: 000029483

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项