zoukankan      html  css  js  c++  java
  • arcgis的arcpy写入几何怎么创建一个空心面要素并读取几何和属性信息,根本不够管

    转载请注明作者(独孤尚良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:UsersadminDesktop est.gdbd134" #这是在已有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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
    Oracle同义词总结
    Jquery定义对象( 闭包)
    jQuery基础总结
    jquery技巧总结
    C# 委托 事件
    OOP面向对象
    DNS服务器 和CDN
    反向代理服务器的工作原理
    c# EF code First生成数据库以及表
  • 原文地址:https://www.cnblogs.com/gisoracle/p/11152131.html
Copyright © 2011-2022 走看看