1、现象说明

使用Arcpy.da.searchcursor得到Geometry,将Geometry转换成Array,再从Array转换回Geometry。若Geometry包含内环,这个过程可能导致内环丢失,且不可逆转。

例如,原始图形如下图所示:

使用如下代码:

import arcpy
arcpy.env.workspace = "C:\\scripts\\test8.gdb"
arcpy.env.overwriteOutput = True
fc1 = "feature_with_hole"
fc2 = "target_feature"
arcpy.CreateFeatureclass_management(arcpy.env.workspace, fc2, "POLYGON", fc1, "DISABLED", "DISABLED", fc1)
c1 = arcpy.da.SearchCursor(fc1, ["SHAPE@"], "OBJECTID = 1")
for row in c1:
geo1 = row[0]
array = geo1.getPart(0)
c2 = arcpy.da.InsertCursor(fc2, ["SHAPE@"])
geo2 = arcpy.Geometry('polygon', array)
c2.insertRow([geo2])

经过两次转换后,得到图形如下:

2、原因分析

经过分析发现,从Geometry转换过来的Array,内外环之间存在一个为None的Item,通过插入如下代码片段证明:

打印结果如下:

而在从Array转换回Geometry时,None Item以及之后的Item将被忽略,通过插入如下代码片段证明:

打印结果如下:

3、如何避免?

在从Array转换回Geometry时,将None Item去掉,即可将内环部分完整还原。通过插入如下代码片段证明:

打印结果如下:

4、总结

  1)从Geometry转换过来的Array,内外环之间通过一个为None的Item进行间隔;

  2)Array转换回Geometry时,None Item以及之后的Item将被忽略;

  3)Array转换回Geometry时,将None Item去掉,即可将内环部分完整还原。

Arcpy中Geometry类与Array类转换的陷阱的更多相关文章

  1. Arrays类与Array类探究

    这里所说的Arrays类是util包中的java.util.Arrays,Array是反射包中的java.lang.reflect.Array. 首先介绍Arrays类的常用的静态方法: 1.排序方法 ...

  2. C#中Array类

    Array类是C#中所有数组的基类,它是在System命名空间中定义的,Array类提供了各种用于数组的属性和方法

  3. .NET中string[]数组和List<string>泛型的相互转换以及Array类的Sort()方法(转)

    从string[]转List<string>: " }; List<string> list = new List<string>(str); 从List ...

  4. Java中int类型和tyte[]之间转换及byte[]合并

    JAVA基于位移的 int类型和tyte[]之间转换 [java] view plaincopy /** * 基于位移的int转化成byte[] * @param int number * @retu ...

  5. 日历类和日期类转换 并发修改异常 泛型的好处 *各种排序 成员和局部变量 接口和抽象类 多态 new对象内存中的变化

    day07 ==和equals的区别? ==用于比较两个数值 或者地址值是否相同.  equals 用于比较两个对象的内容是否相同   String,StringBuffer.StringBuilde ...

  6. C#中的集合(HashTable与Array类)【转】

    一.Array类 1.Array类的属性 序号 属性 & 描述 1 IsFixedSize 获取一个值,该值指示数组是否带有固定大小. 2 IsReadOnly 获取一个值,该值指示数组是否只 ...

  7. C#中的集合(HashTable与Array类)

    一.Array类 1.Array类的属性 序号 属性 & 描述 1 IsFixedSize 获取一个值,该值指示数组是否带有固定大小. 2 IsReadOnly 获取一个值,该值指示数组是否只 ...

  8. 详解C++中基类与派生类的转换以及虚基类

    很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中 ...

  9. java中的进制转换以及字符串类和数值类的相互转化

    import java.util.*; import java.io.*; import java.math.*; import java.math.*; public class Main { pu ...

随机推荐

  1. 三维网格精简算法(Quadric Error Metrics)附源码(转载)

    转载:  https://www.cnblogs.com/shushen/p/5311828.html 在计算机图形应用中,为了尽可能真实呈现虚拟物体,往往需要高精度的三维模型.然而,模型的复杂性直接 ...

  2. .NET Core 使用NPOI读取Excel返回泛型List集合

    我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html 网上有很多关于npoi ...

  3. 什么是LNMP架构

    LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写.L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python ...

  4. golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的

    golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...

  5. 通过MES技术居然可以防止制造数据造假?

    近些年来我们经历了太多制造数据造假事件,特别是前段时间曝出的医药制造事件更是将我们群众的愤怒值推到了最高点.不过我们最应当做的是,冷静下来,思考一下各行各业的我们是不是都该做些什么了?毕竟当下一个灾难 ...

  6. 图解Java数据结构之单链表

    本篇文章介绍数据结构中的单链表. 链表(Linked List)介绍 链表可分为三类: 单链表 双向链表 循环列表 下面具体分析三个链表的应用. 单链表 链表是有序的列表,它在内存中存储方式如下: 虽 ...

  7. 困扰了2天的问题,终于解决了。VB6的MSComCtl.ocx在32位Win7显示对象库未注册

    解决方案在这里,中文的资料真的挺垃圾的.(重启几次之后又不行了....怎么回事???) 安装.net framework4.0以上版本, C:\Windows\System32, C:\Windows ...

  8. 目标检测的评价标准mAP, Precision, Recall, Accuracy

    目录 metrics 评价方法 TP , FP , TN , FN 概念 计算流程 Accuracy , Precision ,Recall Average Precision PR曲线 AP计算 A ...

  9. Python 大佬 的经典设计格言 ---- 铭记于心

    美丽优于丑陋.清楚优于含糊.简单优于复杂.复杂优于繁琐.平坦优于曲折.宽松优于密集.重要的是可读性.特殊的案例不足以特殊到破坏规则.尽管实践可以打破真理.错误却不可置之不理.除非另有明确要求.面对模棱 ...

  10. [LeetCode] 711. Number of Distinct Islands II 不同岛屿的个数之二

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...