python中地理数据分析模块
shapely模块
1、shapely是python中开源的针对空间几何进行处理的模块,支持点、线、面等基本几何对象类型以及相关空间操作。
2、point→Point类;
curve→LineString和LinearRing类;
surface→Polygon类
集合方法分别对应MultiPoint、MultiLineString、MultiPolygon
3、导入所需模块
# 导入所需模块
from shapely import geometry as geo
from shapely import wkt
from shapely import ops
import numpy as np
from shapely.geometry.polygon import LinearRing
from shapely.geometry import Polygon
from shapely.geometry import asPoint, asLineString, asMultiPoint, asPolygon
4、Point:
(1)、创建point,主要有以下三种方法
# 创建point
pt1 = geo.Point([0,0])
coord = np.array([0,1])
pt2 = geo.Point(coord)
pt3 = wkt.loads("POINT(1 1)")
geo.GeometryCollection([pt1, pt2, pt3]) #批量可视化
最终三个点的结果如下所示:

(2)、point常用属性
# point常用属性
print(pt1.x) #pt1的x坐标
print(pt1.y)#pt1的y坐标
print(list(pt1.coords))
print(np.array(pt1))
输出结果如下:
0.0
0.0
[(0.0, 0.0)]
[0. 0.]
(3)、point常用方法,计算距离
# point计算距离
d = pt2.distance(pt1) #计算pt1与pt2的距离, d =1.0
5、LineString:
创建LineString主要有以下三种方法:
# LineString的创建
line1 = geo.LineString([(0,0),(1,-0.1),(2,0.1),(3,-0.1),(5,0.1),(7,0)])
arr = np.array([(2, 2), (3, 2), (4, 3)])
line2 = geo.LineString(arr)
line3 = wkt.loads("LineString(-2 -2,4 4)")
line1, line2, line3对应的直线如下所示

LineString常用方法:
print(line2.length) #计算线段长度:2.414213562373095
print(list(line2.coords)) #线段中点的坐标:[(2.0, 2.0), (3.0, 2.0), (4.0, 3.0)]
print(np.array(line2)) #将点坐标转成numpy.array形式[[2. 2.],[3. 2.],[4. 3.]]
print(line2.bounds)#坐标范围:(2.0, 2.0, 4.0, 3.0)
center = line2.centroid #几何中心:
geo.GeometryCollection([line2, center])
bbox = line2.envelope #最小外接矩形
geo.GeometryCollection([line2, bbox])
rect = line2.minimum_rotated_rectangle #最小旋转外接矩形
geo.GeometryCollection([line2, rect])
line2几何中心:

line2的最小外接矩形:

line2的最小旋转外接矩形:

#常用方法
d1 = line1.distance(line2) #线线距离: 1.9
d2 = line1.distance(geo.Point([-1, 0])) #点线距离:1.0
d3 = line1.hausdorff_distance(line2) #最大最小距离:4.242640687119285
#插值
pt_half = line1.interpolate(0.5, normalized = True)
geo.GeometryCollection([line1,pt_half])
#投影
ratio = line1.project(pt_half, normalized = True)
print(ratio)#project()方法是和interpolate方法互逆的:0.5
插值:

DouglasPucker算法:道格拉斯-普克算法:是将曲线近似表示为一系列点,并减少点的数量的一种算法。
#DouglasPucker算法
line1 = geo.LineString([(0, 0), (1, -0.2), (2, 0.3), (3, -0.5), (5, 0.2), (7,0)])
line1_simplify = line1.simplify(0.4, preserve_topology=False)
print(line1)#LINESTRING (0 0, 1 -0.1, 2 0.1, 3 -0.1, 5 0.1, 7 0)
print(line1_simplify)#LINESTRING (0 0, 2 0.3, 3 -0.5, 5 0.2, 7 0)
buffer_with_circle = line1.buffer(0.2) #端点按照半圆扩展
geo.GeometryCollection([line1,buffer_with_circle])

道格拉斯-普克算法化简后的结果

6、LineRing:(是一个封闭图形)
#LinearRing是一个封闭图形
ring = LinearRing([(0, 0), (1, 1), (1, 0)])
print(ring.length)#相比于刚才的LineString的代码示例,其长度现在是3.41,是因为其序列是闭合的
print(ring.area):结果为0
geo.GeometryCollection([ring])

7、Polygon:(多边形)
polygonl = Polygon([(0, 0), (1, 1), (1, 0)])
ext = [(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)]
int1 = [(1, 0), (

本文介绍了Python中用于地理数据分析的Shapely和GeoPandas模块。Shapely提供了点、线、面等几何对象的处理,包括Point、LineString、Polygon等,支持空间操作和几何对象的关系判断。GeoPandas则扩展了pandas,包含GeoSeries和GeoDataFrame数据类型,可用于绘制地图和数据预处理,如轨迹简化和异常值处理。文章还提到了使用Geohash编码进行地理位置的表示。
最低0.47元/天 解锁文章
470

被折叠的 条评论
为什么被折叠?



