python库geopandas读取写入空间数据及绘图实例探索
作者:小寒聊python
python geopandas库
今天给大家分享一个超强的 python 库,geopandas
https://github.com/geopandas/geopandas
geopandas 是一个用于地理数据的 python 库, 它基于 pandas 和 matplotlib 等其他流行的 Python 数据科学工具构建,扩展了数据操作功能。
这种无缝集成使精通 Python 的数据专业人员能够轻松地深入研究 GeoPandas 语法以进行空间数据探索和分析。
库的安装
我们可以直接使用 pip 来进行安装。
pip install geopandas
读取和写入空间数据
为了读取空间数据,GeoPandas 提供了强大的 “read_file()” 函数。
该函数自动处理各种基于矢量的空间数据格式。常见格式包括 Shapefiles 和 GeoJSON。
下面是使用 GeoPandas 读取包含巴塞罗那各区地理空间数据的 GeoJSON 文件的示例。
import geopandas as gpd url = 'https://raw.githubusercontent.com/jcanalesluna/bcn-geodata/master/districtes/districtes.geojson' districts = gpd.read_file(url) districts
空间数据探索
GeoDataFrames 类似于传统的 pandas 中的 DataFrame,提供了熟悉的结构,因为 GeoDataFrame 是 pandas.DataFrame 的子类,继承了方法和属性。
一个显着特征是能够存储用于空间操作的几何列 (GeoSeries)。
虽然一个 GeoDataFrame 可以有多个 GeoSeries,但其中一列充当活动几何图形,即空间操作的基础。
GeoDataFrame 中的每个 GeoSeries 都携带重要的坐标参考系统 (CRS) 信息。CRS 向 GeoPandas 通报地球上的坐标位置,这对于准确的空间分析至关重要。
有两个主要的 CRS 类别:以度为单位的地理坐标,广泛用于 GPS,以及二维地图的投影坐标,允许方便的单位表示。
在 GeoPandas 中,CRS 信息是通过 “crs” 属性访问的。
districts.crs
空间数据属性
GeoPandas 从 shapely 包中继承了几个有价值的方法和属性。在这里,我们将探讨四个关键属性:
Area
“area” 属性计算几何图形的面积。为了将此面积(转换为 km²)添加到我们的数据集中,我们创建一个新列。
districts['area'] = districts.area / 1000000
Boundary
“boundary” 属性捕获多边形的边界。我们将此信息合并到我们的数据集中。
districts['boundary'] = districts.boundary
Distance
利用 “distance” 方法,我们计算了从著名的圣家族教堂到巴塞罗那每个区的质心的最小距离。
然后,距离(以公里为单位)存储在新列中。
from shapely.geometry import Point sagrada_fam = Point(2.1743680500855005, 41.403656946781304) sagrada_fam = gpd.GeoSeries(sagrada_fam, crs=4326).to_crs(epsg=2062) districts['sagrada_fam_dist'] = [float(sagrada_fam.distance(centroid)) / 1000 for centroid in districts.centroid] districts[['area', 'boundary', 'sagrada_fam_dist']]
使用 GeoPandas 绘图
使用 GeoPandas 可视化空间数据可以增强从空间操作中获得的见解。
通过调用基于 matplotlib 包构建的 GeoDataFrame.plot() 函数,可以轻松创建 GeoPandas 绘图。
巴塞罗那地区的基本可视化。
ax= districts.plot(figsize=(10,6))
要添加更多信息,请为每个区域着色并添加图例。
ax= districts.plot(column='DISTRICTE', figsize=(10,6), edgecolor='black', legend=True)
最后,我们可以将各区和圣家族教堂的质心以及标题添加到我们的地图中。
同样,为了使生成的图像更加引人注目,我们可以使用 Nice contextily 包添加巴塞罗那实际城市的平铺地图。
ax= districts.plot(column='DISTRICTE', figsize=(10,6), alpha=0.5, edgecolor='black', legend=False) contextily.add_basemap(ax, crs=districts.crs.to_string())
以上就是python库geopandas读取写入空间数据及绘图实例探索的详细内容,更多关于python geopandas库的资料请关注脚本之家其它相关文章!