本系列文章是根据GeoPandas
官方文档翻译整理,学习任何一个Python第三方库,其官方文档都是最好的学习资料。相比网络搜索得到的一些资料,官方文档是权威的一手资料,其内容全面、准确可靠。通过官方文档入手,能够保证学习认知不会有大偏差。在学习完官方文档后,可以在寻找其他资料进一步学习。
点击“阅读原文”或者直接访问下方链接,查看翻译整理的“GeoPandas 0.12.2 中文文档”。
https://www.mizhushare.com/docs/shapely-2-0-0-%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3/
-
可以通过百度网盘获取,需要在本地配置代码运行环境:
链接:https://pan.baidu.com/s/185Qs6RpVhyP2nm9VV39Ehw?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/geopandas
GeoPandas
实现了两个主要的数据结构,GeoSeries
和GeoDataFrame
。它们分别是 pandas.Series
和 pandas.DataFrame
的子类。GeoSeries
本质上是一个向量,向量中的每一个条目都是一组对应于一个观测值的形状。一个条目可能由一个形状组成(比如一个多边形面),也可能由多个形状组成。
GeoPandas
具有如下三类基本的几何对象(实际上是shapely对象):
-
Points
/Multi-Points
; -
Lines
/Multi-Lines
; -
Polygons
/Multi-Polygon
s。
GeoSeries
所包含的条目不需要具有相同的几何类型,但是可能会导致一些操作失败。GeoSeries
所包含的条目具有相同的几何类型:
1# 几何对象--点
2>>> gpoint = gpd.GeoSeries([Point(i ,i+2) for i in range(5)])
3>>> gpoint
40 POINT (0.00000 2.00000)
51 POINT (1.00000 3.00000)
62 POINT (2.00000 4.00000)
73 POINT (3.00000 5.00000)
84 POINT (4.00000 6.00000)
9dtype: geometry
10
11>>> gpoint.plot()
可视化结果如下图所示:
1# 几何对象——线
2>>> gline = gpd.GeoSeries([LineString([(i,i),(i+4,i+2)]) for i in range(5)])
3>>> gline
4
5>>> gline.plot()
可视化结果如下图所示:
1# 几何对象——面
2>>> gpolygon = gpd.GeoSeries(Polygon([(i,i) , (i+4,i+2) , (6,0)]) for i in range(5))
3>>> gpolygon
4
5>>> gpolygon .plot(alpha=0.5) # 设置透明度=0.5
可视化结果如下图所示:
GeoSeries
所包含的条目也可以是不同的几何类型:
1# 几何对象--点+线+面
2>>> gm = gpd.GeoSeries([Point(0,0),
3... LineString([(1,1) , (6,3)]),
4... Polygon([(2,3),(6,5),(3,6)])])
5>>> gm
60 POINT (0.00000 0.00000)
71 LINESTRING (1.00000 1.00000, 6.00000 3.00000)
82 POLYGON ((2.00000 3.00000, 6.00000 5.00000, 3....
9dtype: geometry
10
11>>> gm.plot()
可视化结果如下图所示:
GeoSeries
类实现了Shapely
对象中几乎所有的属性和方法。当应用于 GeoSeries
时,会将按元素应用于所有几何图形。可以在两个 GeoSeries
之间应用二元操作,在这种情况下,操作是按元素执行的。这两个GeoSeries
将通过匹配索引对齐。二元操作也可以应用于单个几何,在这种情况下,将对具有该几何的系列中的每个元素执行运算。在任何一种情况下,都会根据需要返回 Series
或 GeoSeries
。
下面是一些 GeoSeries
的属性和方法,完整列表可在官方文档页面中找到。
1https://geopandas.org/en/stable/docs/reference/geoseries.html
此外,还有一系列方法可以通过扩展现有形状或应用集合论操作(如几何操作中描述的“联合”)来创建新形状。
一些常用属性如下:
-
GeoSeries.x
: 点的x坐标。 -
GeoSeries.y
: 点的y坐标。 -
GeoSeries.length
: 形状长度。 -
GeoSeries.area
: 形状面积。 -
GeoSeries.bounds
: 每个形状的每个轴上的最大和最小坐标组成的元组。 -
GeoSeries.boundary
: 返回一个代表每个几何体的集合理论边界的低维GeoSeries。 -
GeoSeries.geom_type
: 几何类型。
1# 获取点的x坐标
2>>> gpoint.x
30 0.0
41 1.0
52 2.0
63 3.0
74 4.0
8dtype: float64
9
10# 获取线段长度
11>>> gline.length
120 4.472136
131 4.472136
142 4.472136
153 4.472136
164 4.472136
17dtype: float64
18
19# 获取面的面积
20>>> gpolygon.area
210 6.0
221 7.0
232 8.0
243 9.0
254 10.0
26dtype: float64
27
28# 获取面的边界
29>>> gpolygon.bounds
30 minx miny maxx maxy
310 0.0 0.0 6.0 2.0
321 1.0 0.0 6.0 3.0
332 2.0 0.0 6.0 4.0
343 3.0 0.0 7.0 5.0
354 4.0 0.0 8.0 6.0
36
37# 获取每个几何对象的类型
38>>> gm.geom_type
390 Point
401 LineString
412 Polygon
42dtype: object
43
44# 获取每个几何体的边界
45>>> gm.boundary
460 GEOMETRYCOLLECTION EMPTY
471 MULTIPOINT (1.00000 1.00000, 6.00000 3.00000)
482 LINESTRING (2.00000 3.00000, 6.00000 5.00000, ...
49dtype: geometry
-
distance()
: 计算最小距离。 -
centroid
:计算质心点。 -
convex_hull
:包含对象中所有点的最小凸包。 -
envelope
: 包含该对象的点或最小的外包矩形(边与坐标轴平行)。 -
representative_point()
: 返回保证在每个几何图形中的点,不返回质心。 -
to_crs()
: 改变坐标参考系。 -
plot()
: 绘图。
-
centroid
:
1# centroid: 计算质心点
2>>> gpolygon.centroid
30 POINT (3.33333 0.66667)
41 POINT (4.00000 1.33333)
52 POINT (4.66667 2.00000)
63 POINT (5.33333 2.66667)
74 POINT (6.00000 3.33333)
8dtype: geometry
-
distance()
:
1# distance(): 计算最小距离
2>>> gpoint
30 POINT (0.00000 2.00000)
41 POINT (1.00000 3.00000)
52 POINT (2.00000 4.00000)
63 POINT (3.00000 5.00000)
74 POINT (4.00000 6.00000)
8dtype: geometry
9
10>>> point = Point(0,4)
11
12>>> gpoint.distance(point)
130 2.000000
141 1.414214
152 2.000000
163 3.162278
174 4.472136
18dtype: float64
-
buffer()、convex_hull
()
、envelope()
:
1>>> x = np.random.randn(20)
2>>> y = np.random.randn(20)
3>>> gpoints = gpd.GeoSeries(MultiPoint(list(zip(x,y))))
4>>> gpoints
50 MULTIPOINT (0.90928 0.06214, -0.66392 -0.49282...
6dtype: geometry
7
8# 缓冲区分析
9>>> gpoints.buffer(0.5)
100 MULTIPOLYGON (((3.24204 0.09461, 3.23963 0.045...
11dtype: geometry
12
13# 最小凸包
14>>> gpoints.convex_hull
150 POLYGON ((1.53592 -1.20652, -0.48794 -1.18227,...
16dtype: geometry
17
18# 最小外包矩形(边与坐标轴平行)
19>>> gpoints.envelope
200 POLYGON ((-1.78206 -1.20652, 2.74204 -1.20652,...
21dtype: geometry
-
geom_almost_equals(other)
: 形状与其他形状几乎相同(浮点精度问题使形状略有不同时使用)。 -
contains(other)
: 形状是否包含在other内。 -
intersects(other)
: 形状是否与other相交。
1>>> gpolygon = gpd.GeoSeries(Polygon([(i,i) , (i+4,i+2) , (6,0)]) for i in range(5))
2>>> gpolygon
30 POLYGON ((0.00000 0.00000, 4.00000 2.00000, 6....
41 POLYGON ((1.00000 1.00000, 5.00000 3.00000, 6....
52 POLYGON ((2.00000 2.00000, 6.00000 4.00000, 6....
63 POLYGON ((3.00000 3.00000, 7.00000 5.00000, 6....
74 POLYGON ((4.00000 4.00000, 8.00000 6.00000, 6....
8dtype: geometry
9>>> point = Point(6.5,4)
10>>> line = LineString([(0,4) , (8,4)])
11
12# contains
13>>> gpolygon.contains(point)
140 False
151 False
162 False
173 True
184 True
19dtype: bool
20
21# intersects
22>>> gpolygon.intersects(point)
230 False
241 False
252 False
263 True
274 True
28dtype: bool
几何对象的相对关系图如下图所示:
本篇文章来源于微信公众号: 码农设计师