转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/83861447

这个我是没找到这个问题的答案,经过不懈的摸索,终于找到了一个解决办法。

做这个肯定要参考官方文档,下面附上两个链接,是arcpy的读取几何和写入几何。

http://pro.arcgis.com/zh-cn/pro-app/arcpy/get-started/reading-geometries.htm

http://pro.arcgis.com/zh-cn/pro-app/arcpy/get-started/writing-geometries.htm

本机是arcgis 10.2的,但是代码可以直接使用。

import arcpy
import os

fc=r"C:\Users\admin\Desktop\test.gdb\d134" #这是在已有gdb路径内新建一个要素类
coords_list = [[1, 123.1, 32.1],
[1, 123.5, 32.1],
[1, 123.5, 32.5],
[1, 123.1, 32.5],
[1, 123.1, 32.1],
[1, 123.2, 32.2],
[1, 123.3, 32.3],
[1, 123.2, 32.3],
[1, 123.2, 32.2]]
cur=None

try:
arcpy.CreateFeatureclass_management(os.path.dirname(fc),os.path.basename(fc),"POLYGON")
cur=arcpy.da.InsertCursor(fc,["shape@"])
array=arcpy.Array()
ID=-1
for coords in coords_list:
if ID ==-1:
ID=coords[0]
if ID!=coords[0]:
cur.insertRow([arcpy.Polygon(array)])
array.removeAll()
array.add(arcpy.Point(coords[1],coords[2],ID=coords[0]))
ID=coords[0]
cur.insertRow([arcpy.Polygon(array)])
except Exception as e:
print(e)
finally:
if cur:
del cur
运行结果如下:

由此可见,只要我们把点的序列做好即可。

上文的读取几何网页里说:环是一个用于定义二维区域的闭合路径。有效的环是由有效路径组成的,因而环的起点和终点具有相同的 x,y 坐标。顺时针环是外部环,逆时针环则定义内部环。

点的顺序怎么做?

先做出这个空心面的外环的点,要有始有终,比如我这个图形的外环是四个端点,那么就给出五个点,即这个外环的第一个点和最后一个点的数组是完全相同的。紧接着就给出内环的点序列。如果是多个点序列,则除了最后一个序列,其他的也是要和外环一样有始有终。至于最后一个要不要有始有终呢?经我试验,在某些情况下最后一个的缺省可以达到我们的要求,但有时候不会。请看下图:

稳妥起见还是有始有终,以免操作不当,没意识到逻辑不对,就不到我们想要的了。

什么是有始有终?

比如上图,根据esri的推荐,外环顺时针内环逆时针,点序列需要是:1,2,3,4,1,5,7,6,5

怎么读取呢?

with arcpy.da.SearchCursor(fc,['SHAPE@']) as cursor:
for row in cursor:
for pnt in row[0]:
for pi in pnt:
if pi:
print("{}, {}".format(pi.X, pi.Y))
else:
print("Interior Ring:")

我们可以看到,读取的经纬度和我们输入的经纬度有些差别,这个打点是有容差的。另一个,不管我们是怎么输入的点序列,输出的时候,外环的点序是顺时针的,内环的点序是逆时针的。

2019年6月21日增补:

with arcpy.da.SearchCursor(fc,['SHAPE@','OID@','selfField']) as cursor:
for row in cursor:
#下面输出属性
print row[1],row[2]
#下面输出几何信息
for pnt in row[0]:
for pi in pnt:
if pi:
print("{}, {}".format(pi.X, pi.Y))
else:
print("Interior Ring:")

独孤尚良dugushangliang——著
---------------------
作者:独孤尚良dugushangliang
来源:CSDN
原文:https://blog.csdn.net/dugushangliang/article/details/83861447
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. 程序设计入门——C语言 第6周编程练习 1 分解质因数(5分)
  2. Sharepoint 2013 创建TimeJob 自动发送邮件
  3. STOI补番队胡策
  4. Codeforces 325E
  5. 管道实现进程间通讯 、WaitNamedPipe
  6. HDU 4763 Theme Section
  7. JavaScript替换HTML标签
  8. Python3 XML解析
  9. DeepLearning.ai学习笔记(五)序列模型 -- week2 序列模型和注意力机制
  10. 项目管理利器maven学习笔记(一):maven介绍及环境搭建
  11. SoapUI 利用SoapUI进行简单的接口并发测试
  12. easyUI tab页的显示与隐藏
  13. Centos 安装 nload
  14. vetur插件提示 [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives
  15. 「Vue」nrm
  16. 【算法30】从数组中选择k组长度为m的子数组,要求其和最小
  17. 利用c#自带的类对文件进行压缩和解压处理
  18. Java程序猿学习C++之数组和动态数组
  19. CUDA 新版本 Visual Studio 和 CUDA 兼容性的小问题
  20. centos7 安装php 5.x.x 报错

热门文章

  1. vue之生命周期与导航守卫
  2. 【转载】salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
  3. RabbitMQ中初始化ConnectionFactory常用设置属性
  4. 阿里P7浅谈SpringMVC
  5. Image Processing and Analysis_8_Edge Detection:Edge and line oriented contour detection State of the art ——2011
  6. Ubuntu18.0 解决python虚拟环境中不同用户下或者python多版本环境中指定虚拟环境的使用问题
  7. Hosts 长期更新【已停】
  8. asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别 转载自:http://blog.csdn.net/luoyeyu1989/article/details/8275866
  9. SSH自动断开处理
  10. Java 实现简单的SQL动态组装工具类