文章目录
土地报备坐标txt文件转shp遇到的坑以及该功能的 Python(Arcpy) 实现
一. 使用 Python(ArcPy) 绘制shp
什么是ArcPy
ArcPy 是一个安装 ArcGIS 会附带的站点包,通过 Python 实现。简言之,能通过 Python 直接调用 arcpy 执行地理数据分析、数据转换、数据管理和地图自动化以及多种客制化的需求。
ArcGIS 帮助链接
[https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy/what-is-arcpy-.htm](ArcGIS help)
需要注意的是 ArcPy 是通过 Python2 实现的,不兼容 Python3!
需要注意的是 ArcPy 是通过 Python2 实现的,不兼容 Python3!
需要注意的是 ArcPy 是通过 Python2 实现的,不兼容 Python3!
如何构造shp(面)
主要涉及方法
arcpy.Array()
https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-classes/array.htm
arcpy.Polygon()
https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-classes/polygon.htm
构造面
点连成线,线组成了一个面。所有只需在 arcpy.Polygon() 方法中输入一个点集就能形成一个面,点集(数组)通过 arcpy.Array() 构造传入(最后一个点不必与首个点相同,就算没有也会自动闭合)。
[[20.0, 20.0],[30.0, 20.0],
[30.0, 10.0],[20.0, 10.0]]
多个面就是多个点集。两个点集就是两个图形。
[
[[5.0, 3.0],[3.0, 3.0],
[3.0, 5.0],[5.0, 3.0]],
[[7.0, 5.0],[5.0, 5.0],
[5.0, 7.0],[7.0, 5.0]]
]
那么如果是环岛、孔洞等图形呢?也是多个点集,当某个点集在另一个点集范围内时,arcpy.Polygon() 方法可以自动排除重叠部分,实现环岛、孔洞等,真正傻瓜一键化绘制shp图形。
[
[[40.0, 40.0], [50.0, 40.0], [50.0, 30.0],
[40.0, 30.0]],
[[45.0, 35.0], [48.0, 35.0], [48.0, 36.0],
[45.0, 36.0]]
]
以下是 使用 arcpy.Array() 和 arcpy.Polygon() 实现简单的点集转 shp 代码示例:
-*- coding:utf-8 -*-
# ---------------------------------------------------------------------------
# Author: Lcc hygnic
# Created on: 2020/10/16 15:55
# Reference:
"""
Description:Python2.7
Usage:
"""
# ---------------------------------------------------------------------------
import arcpy
import os
def draw_poly(coord_list, sr, y, x):
"""
创建多边形
coord_list(List):多个点组成的坐标
sr: 投影系
y(Int): y坐标列
x(Int): x坐标列
"""
parts = arcpy.Array()
yuans = arcpy.Array()
yuan = arcpy.Array()
for part in coord_list:
for pnt in part:
if pnt:
yuan.add(arcpy.Point(pnt[y], pnt[x]))
else:
# null point - we are at the start of a new ring
yuans.add(yuan)
yuan.removeAll()
# we have our last ring, add it
yuans.add(yuan)
yuan.removeAll()
# if we only have one ring: remove nesting
if len(yuans) == 1:
yuans = yuans.getObject(0)
parts.add(yuans)
yuans.removeAll()
# 只有一个,单个图形
if len(parts)