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:\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
版权声明:本文为博主原创文章,转载请附上博文链接!
arcgis的arcpy写入几何怎么创建一个空心面要素并读取几何和属性信息,根本不够管的更多相关文章
- 11.按要求编写Java应用程序。 (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另 一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。
package java1; public class Che { //属性 public String nub; public int speed; public double weight ; C ...
- 按要求编写Java应用程序。 (1)创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”
package java1; public class People { public String name; public int age; public String sex; public S ...
- 按要求编写Java应用程序。 (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。 创建第
package com.hanqi.test; public class jidongche { private String chepaihao;//车牌号 private int speed;// ...
- 创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”
package com.chuoji; public class People { private String name; private int age; private String sex; ...
- (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。
package a; public class Jidongche { private String chepaihao; private int chesu; private double zaiz ...
- (1)创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”
package a; public class People { private String name,sex; private int age; private double height; pu ...
- 10.按要求编写Java应用程序。 (1)创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”
package com.hanqi.test; public class People { private String name,sex; private int age; private doub ...
- Swift类中如何创建一个对外只读对内可读写的属性
很简单用private修饰符,后面跟限制关键字set: class Day{ private(set) var rawValue:Int = 0 func showRawValue(){ print( ...
- 如何创建一个要素数据类 IField,IFieldEdit,IFields,IFieldsEditI,GeometryDef,IGeometryDefEdit接口
如何创建一个要素数据类 创建要素类用到了IFeatureWorkspace.CreateFeatureClass方法,在这个方法中有众多的参数,为了满足这些参数,我们要学习和了解下面的接口. IFie ...
随机推荐
- Linux环境下Redis安装和常见问题的解决
Redis是一款非常非常非常好用的缓存数据库,在保存需要定期更新的Token值,或者在保证高并发安全可靠性的场景下,基本上说是必用了. 安装过好多次Redis了,也用过阿里云Redis数据库,但是每次 ...
- MySQL之系系统信息函数
1.VERSION() 用法:返回MySQL服务器的版本 举例: mysql> select VERSION(); +-----------+ | VERSION() | +---------- ...
- 用一个N点复序列的FFT同时计算两个N点实序列离散傅里叶变换
一.功能 用一个\(N\)点复序列快速傅立叶变换算法来同时计算两个\(N\)点实序列的离散傅立叶变换. 二.方法简介 假设\(x(n)\)与\(y(n)\)都是长度为\(N\)的实序列,为计算其离散傅 ...
- mysql使用GTID跳过事务
GTID跳过有两种方法,一种是普通的跳过一个事务的方法,另外一个是在基于主库搭建新的slave的时候.一.普通跳过一个事务的方法.通过show slave status\G找到冲突的GTID号.然后执 ...
- LINQ图解教程
LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…where片段 from子句let子句w ...
- JS不间断向上滚动 setInterval和clearInterval
<div id=demo style=overflow:hidden;height:139;width:232;background:#f4f4f4;color:#ffffff><d ...
- 操作系统-chapter1
课程:https://mooc.study.163.com/learn/1000002004?tid=2402971010&_trace_c_p_k2_=f79694c7fc04429bb9b ...
- 正则的lastIndex 属性
简介:正则的lastIndex 属性用于规定下次匹配的起始位置. 注意: 该属性只有设置标志 g 才能使用. 上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的 ...
- FineAdmin.Mvc 使用ok-admin+ASP.NET MVC搭建的通用权限后台管理系统
FineAdmin.Mvc 介绍 使用ok-admin+ASP.NET MVC搭建的通用权限后台管理系统RightControl后台layui模板不太好看,换成ok-admin v2.0重写一遍.项目 ...
- javascript逻辑与(&&)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...