前言
本节将介绍点线面对象的创建和处理。创建点
对象有三个类,分别是Point
、Multipoint
、PointGeometry
,创建线
对象的类为Polyline
,创建面
对象的类为Polygon
。
一、点对象的创建——Point
点对象经常与光标配合使用。点要素将返回单个点对象而不是点对象数组。而其他要素类型(面、折线和多点)都将返回一个点对象数组,并且当这些要素具有多个部分时,则返回包含多个点对象数组的数组。
**点并非几何类,但通常用于构造几何。**即其他的几何类都是通过点对象来构造的,无论是线和面。其实都是通过点进行构造的,学过gis的应该知道。
# 创建点对象(经度,纬度,高程,路径测量值,ID)参数都是可选的
point = arcpy.Point(120.34, 31.34, 50)
print "Point properties:"
print "ID:{0}".format(point.ID) # 不填ID则默认从0开始
print "X:{0}".format(point.X)
print "Y:{0}".format(point.Y)
print "Z:{0}".format(point.Z)
Point properties:
ID:0
X:120.34
Y:31.34
Z:50.0
二、几何单点对象的创建——PointGeometry
将一个Point对此传递给PointGeometry,可以创建一个几何单点,即能在arcgis中看到的点。
我们下面的代码是通过是三个Point对象去创建三个几何单点对象,即创建的几何单点对象是能在arcgis中查看显示的。代码如下:
import arcpy
pointList = [[1, 2], [3, 5], [7, 3]] # 坐标的列表对象
point = arcpy.Point() # 创建一个空的point对象
pointGeometryList = [] # 用来存放pointGeometry对象
for pt in pointList:
point.X = pt[0]
point.Y = pt[1]
pointGeometry = arcpy.PointGeometry(point)
pointGeometryList.append(pointGeometry)
# 使用CopyFeatures_management工作生成要素类
print pointGeometryList
arcpy.CopyFeatures_management(pointGeometryList, r'E:\arcpy_study\我得学城\几何对象文件\几何点对象创建.shp')
print 'done!'
要素类如图:
三、几何多点对象的创建——Multipoint
Multipoint 对象就是点的有序集合。可以将一个包含多个Point对象的数组当成参数传给Multipoint,一次性创建多个几何单点。
下面的代码将多个Point对象存在一个数组中,用来创建几何多点对象:
import arcpy
pointList = [[1, 2], [3, 5], [7, 3]] # 坐标的列表对象
# 用于存储多点对象
# pt = [<Point (1.0, 2.0, #, #)>, <Point (3.0, 5.0, #, #)>, <Point (7.0, 3.0, #, #)>]
# pt是包含三个点对象的列表
pt = [arcpy.Point(*coords) for coords in pointList]
# 将多点对象转换为MultiPoint能识别的地理数组
# g_pt = <geoprocessing array object object at 0x0714D200>
g_pt = arcpy.Array(pt)
# 使用array创建几何多点对象
mp = arcpy.Multipoint(g_pt)
arcpy.CopyFeatures_management(mp, r'E:\arcpy_study\我得学城\几何对象文件\几何多点对象创建.shp')
print 'done!'
效果如图:
四、线对象的创建——Polyline
我们使用一个包含多个Point对象的数组来创建Polyline对象,所得到的折线是由这几个点相连接所形成的。
示例代码如下:
import arcpy
# 三维数组,相当于两条折线,一个二维数组一条折线
feature_info = [[[1, 2], [2, 4], [3, 7]],
[[6, 8], [5, 7], [7, 2], [9, 5]]]
# 用来存放线对象
features = []
for feature in feature_info:
pt = [arcpy.Point(*coords) for coords in feature]
print pt
pl = arcpy.Polyline(arcpy.Array(pt))
features.append(pl)
print features
arcpy.CopyFeatures_management(features, r'E:\arcpy_study\我得学城\几何对象文件\线对象创建.shp')
print 'done!'
效果如下:
五、面对象的创建——Polygon
我们使用一个包含多个Point对象的数组来创建Polygon对象,所得到的折线是由这几个点首尾相连所形成的。
示例代码:
import arcpy
# 三维数组,相当于两条折线,一个二维数组一条折线
feature_info = [[[1, 2], [2, 4], [3, 7]],
[[6, 8], [5, 7], [7, 2], [9, 5]]]
# 用来存放线对象
features = []
for feature in feature_info:
pt = [arcpy.Point(*coords) for coords in feature]
print pt
pl = arcpy.Polygon(arcpy.Array(pt))
features.append(pl)
print features
arcpy.CopyFeatures_management(features, r'E:\arcpy_study\我得学城\几何对象文件\面对象创建.shp')
print 'done!'
效果如下:
六、读取txt中的坐标创建几何对象
我们通过pandas库来读取txt文件中的经纬度坐标,TXT文件如下,文件命名为经纬度.txt
:
1 118.897901 32.099258
2 118.898200 32.099075
3 118.901593 32.096570
4 118.904799 32.094134
5 118.904801 32.094180
这里注意一下,我用的是Arcgis,自带的python版本是2.7,但是如果直接装pandas的话,最新的pandas是不支持python2的,只能降低版本,降低pandas的版本到0.23.4及以下才行。
代码如下:
视频教程地址:https://www.bilibili.com/video/BV1ab4y1h7dv/?p=8&spm_id_from=pageDriver&vd_source=5f425e0074a7f92921f53ab87712357b