几何对象
- 点:object表示空间中的单个点。点可以是二维(x,y)或三维(x,y,z)。
- 线:表示连接在一起形成一条线的一系列点。因此,一行包含至少两个坐标元组的列表
- 面:表示填充区域,该区域由至少三个形成外环的坐标元组列表和一个(可能的)多边形列表组成。
- 多点:表示一组点,由一系列坐标元组组成
- 多线:表示一组行,由一系列行序列组成
- 多面:表示多边形的集合,该多边形由一系列多边形序列组成,这些序列由外环和(可能的)孔列表元组构成
点
创建一个点:
from shapely.geometry import Point, LineString, Polygon # 首先导入第三方包shapely
point1 = Point(2.2, 4.2)
point2 = Point(7.2, -25.1)
point3 = Point(9.26, -2.456)
point3D = Point(9.26, -2.456, 0.57) # 创建了四个点,前三个是二维点,第四个为三维点
我们可以使用print()开查看一下点
print(point1) # POINT(2.2 4.2)
print(point3D) # POINT Z(9.26 -2.456 0.57)
print(type(point1)) # <class 'shapely.geometry.point.Point'>
提取坐标点的X,Y坐标
x = point1.x #将point1的x坐标赋给x
y = point1.y #将point1的y坐标赋给y
xy = point_coordinates.xy # 输出的结果为 (array('d',[2.2]),array('d',[4.2]))
我们还可以直接计算已经定义好的两个点的距离
distance = point1.disatance(point2)
print('Distance between the points is {0:.2f} decimal degrees'.format(distance)) # 将point1点和point2点的距离算出赋给distance,并且输出 线
线
创建线的两种方法
line = LineString(piont1,point2,point3) # 将已知的三个点作为线
line2 = LineString([(2.2,4.2),(7.2,-25.1),(9.26,-2.456)]) #根据已知的线点坐标作为线
我们也可以提取线上点的坐标
line.xy # 输出的结果为 (array('d',[2.2,7.2,9.26]),array('d',[4.2,-25.1,-2.456]))
line.xy[0] # 输出线上点的x坐标
line,xy[1] # 输出线上点的y坐标
我们可以查询线的长度,中心点
line.lenght # 长度
line.centroid # 中心点
面
创建面的两种方法
poly = Polygon([(2.2, 4.2), (7.2, -25.1), (9.26, -2.456)]) #将已知的三个点作为面
poly2 = Polygon([[p.x, p.y] for p in [point1, point2, point3]])
创建一个内部有孔的面
world_exterior = [(-180, 90), (-180, -90), (180, -90), (180, 90)]
hole = [[(-170, 80), (-170, -80), (170, -80), (170, 80)]]
world = Polygon(shell=world_exterior)
world_has_a_hole = Polygon(shell=world_exterior, holes=hole)
可以提取面的中心点,面积,边界,外观 和外观长度
world.centroid # 中心点
world.area #面积
world.bounds #边界
world.exterior #外观
world.lenght #外观长度
多点,多线,多面
创建多点,多线,多面
from shapely.geometry import MultiPoint, MultiLineString, MultiPolygon, box # 导入第三方包
multi_point = MultiPoint([point1, point2, point3])
multi_point2 = MultiPoint([(2.2, 4.2), (7.2, -25.1), (9.26, -2.456)]) #创建多点的两种形式
line1 = LineString([point1, point2])
line2 = LineString([point2, point3])
multi_line = MultiLineString([line1, line2]) #创建多线
= [(-180, 90), (-180, -90), (0, -90), (0, 90)]
west_hole = [[(-170, 80), (-170, -80), (-10, -80), (-10, 80)]]
west_poly = Polygon(shell=west_exterior, holes=west_hole) #创建面
min_x,mix_y = 0,-90
max_x,max_y = 180,90
east_poly_box = box(minx=min_x, miny=min_y, maxx=max_x, maxy=max_y) #创建面
multi_poly = MultiPolygon([west_poly, east_poly_box]) #创建多面
多点,多线,多面的一些属性
convex = multi_point.convex_hull # 以多点创建多边形
lines_count = len(multi_line) # 计算多线的条数
multi_poly_area = multi_poly.area # 计算多面的面积
west_area = multi_poly[0].area # 计算多面中第一个面的面积