GeoPandas 基本使用

本文介绍了GeoPandas,它是用于在Python下处理地理空间数据的开源项目,扩展了pandas数据类型。阐述了GeoSeries和GeoDataFrame两种数据结构及相关方法,还给出常用示例,如数据读取、展示等,最后说明了其与PostGIS的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.GeoPandas是什么

       geopandas是一个开源项目,它的目的是使得在Python下更方便的处理地理空间数据。geopandas扩展了pandas的数据类型,允许其在几何类型上进行空间操作。geopandas主要结合了pandas和shapely框架的能力。

          shapely 有一个名为 geometry 的类,也是python 中一个非常重要的类库,其中包含不同的几何对象。

        geopandas两个主要的数据结构,分别是GeoSeries和GeoDataFrame,分别对应了pandas中Series和DataFrame的子类。

      geopandas有三个基本类的几何对象(实际上是形状对象):点/点集合 线/线集合 多边形/多边形集合

2.GeoSeries

       GeoSeries就是包含了图形series的序列,他包含了几乎所有shapely对象的属性和方法。

     在GeoSeries中可以直接使用Shapely的属性和方法。

  • to_crs():更改坐标参考系。
  • plot():绘制GeoSeries。
  • GeoSeries.area:   返回一个Series,他包含了GeoSeries中的每个几何的面积(投影面积)。
  • GeoSeries.bounds: 返回一个Series,包含了每个几何的边界,用列值minx,miny,maxx,maxy来表示。
  • GeoSeries.distance(other): 它包含与其他GeoSeries对象(每个元素)或几何对象的最小距离.
  • GeoSeries.length: 返回一个Series, 包含了每个要素的长度。
  • GeoSeries.geom_type: 返回一个Series,包含了每个要素的几何对象类型。
  • GeoSeries.exterior: 返回一个环形(LinearRings)的一个GeoSeries, 表示每个要素的外边界
  • GeoSeries.interior: 返回一个内环的GeoSeries,他表示每个多边形的内环。
  • GeoSeries.is_empty :返回一个布尔型的Series,若为空的几何图形,该值就为True。
  • GeoSeries.is_ring:返回一个布尔型的Series,对于闭合的要素,该值就为True。
  • GeoSeries.is_simple:返回一个布尔型的Series,如果几何体自身不交叉,该值就为True(仅对线串--LineStrings和线环--LineRings有意义)。
  • GeoSeries.is_valid:返回一个布尔型的Series,如果几何体是有效的,该值就为True。
  • GeoSeries.almost_equals(other[,decimal=6]):返回一个布尔型的Series对象,如果在指定的小数位精度下,每个对象所有点与其他对象大致相等,该值就为True(可见equals())。
  • GeoSeries.contains(other): 返回一个布尔型的Series,如果每个对象的内部包含其他对象的内部和边界,并且它们的边界不相接,该值为True。
  • GeoSeries.crosses(other):返回一个布尔型的Series,如果每个对象的内部与其他对象的内部相交但不包含,并且相交的部分小于这两个相交对象自身,该值为True。
  • GeoSeries.disjoint(other): 返回一个布尔型的Series,如果每个对象的边界和内部与其他对象的边界和内部都不相交,该值为True。
  • GeoSeries.equals(other):返回一个布尔型的Series,如果几何对象集合的边界,内部,外部都与其他几何对象一样,该值为True。
  • GeoSeries.intersects(other):返回一个布尔型的Series,如果每个对象的边界和内部以其它任何形式与其他对象相交,该值为True。
  • GeoSeries.touches(other):返回一个布尔型的Series,如果对象与其他对象至少有一个点相同,且它们的内部任何部分都不相交,该值为True。
  • GeoSeries.within(other):返回一个布尔型的Series, 如果每个对象的边界和内部只与其他对象的内部相交(不包括边界和外部),该值为True(与contains()方法相反)。

3.GeoDataFrame

一个GeoDataFrame是一个列表数据结构,他包含了很多GeoSeries。

GeoDataFrame可以包含具有几何(形状)对象的其他列,但每次只能有一个列作为活动式几何。若更改活动式几何列,可使用set_geometry方法。

  • GeoDataFrame.from_file(filename, **kwargs):
  • GeoDataFrame.read_file(filename, **kwargs):
  • GeoDataFrame.from_postgis(sql,con,geom_col='geom',crs=None,index_col=None,coerce_float=True,params=None)  从PostGIS数据库文件中加载GeoDataFrame。
  • GeoSeries.to_crs(crs=None,epsg=None,inplace=False)  转换GeoDataFrame的geometry列中的所有几何图形到其他坐标参考系统。
  • GeoSeries.to_file(filename,driver="ESRI Shapefile",**kwargs)  将GeoDataFrame写入文件。默认情况下,写成ESRI的shapefile格式。
  • GeoSeries.to_json(**kwargs) 将GeoDataFrame以字符串的方式表示为GeoJSON对象返回。
  • GeoSeries.plot(column=None,colormap=None,alpha=0.5,categorical=False,legend=False,axes=None)  绘制GeoDataFrame中几何图形。如果列参数给定,颜色根据这列的值绘制,否则在 geometry列调用GeoSeries.plot()函数。都封装在plot_dataframe()函数中。

4.geopand常用示例练习

注意:    插件库版本可能不兼容有些方法,作者使用以下版本,测OK

插件库名称

版本号

SQLAlchemy

1.4.46

Shapely

1.8.5

geopandas

0.10.2

        geopandas 可以做数据读取、展示、分析、拓展,甚至可以读取zip中的shapefile文件,还可以读取geojson、arcgis中的地理数据库gdb,一起qgis中的geoPackage存放的矢量数据。

  • shape 文件读取
import geopandas
import matplotlib.pyplot as plt
data = geopandas.read_file(r'/Users/ecarx/Desktop/123/shp/AD_Lane.shp')
print(data.crs)
print(data.head())
data.plot()
plt.show()

  • 创建shapefile文件,分别用点要素和线要素
data = geopandas.GeoSeries([geometry.Point(120.121, 60),
                            geometry.Point(121.43311, 59.122),
                            geometry.Point(121.034311, 58.999211),
                            geometry.Point(119.431221, 61.232311)], crs='EPSG:4326',index=["点1", "点2", "点3", "点4"])
# 将矢量数据data写入shape文件
data.to_file("Point.shp", driver='ESRI Shapefile', encodings="UTF-8")
data.plot()
plt.show()

  导出shape文件,并展示点位信息

线和面,与点类似。

data = geopandas.GeoSeries([geometry.LineString([(120.32232, 51.222), (121.31032, 51.131), (120.8999, 51.101)]),
geometry.LineString([(121.32232, 51.009), (120.8993, 51.222), (120.14333, 50.1988)])], 
crs='EPSG:4326', index=['线1', '线2'])

5.geopandas与PostGIS进行交互

import geopandas as gpd
from sqlalchemy import create_engine
import matplotlib.pyplot as plt
bj = gpd.read_file("/Users/ecarx/Downloads/110000.geoJson")
# bj.plot()
# plt.show()
engine = create_engine('postgresql://check_comxxx:Ku3pyaXsNW@dev-pg.test.xxxx.cloud:1921/check_comxxx')
bj.to_postgis(name="beijing", con=engine, if_exists='replace', schema='check_coxxx')

北京市的区块范围:

写入数据库展示:

读取数据库中的数据

import geopandas as gpd
from sqlalchemy import create_engine
import matplotlib.pyplot as plt
engine = create_engine('postgresql://check_comxxx:Ku3py1APxgNW@dev-pg.test.xxxx.cloud:1921/check_comxxx')
# 读post库中的数据
sql = "select * from beijing"
beijing = gpd.read_postgis(sql, con=engine, geom_col='geometry')
beijing.plot()
plt.show()

### Geopandas 使用教程 #### 什么是 GeoPandasGeoPandas 是一个基于 PandasPython 库,专为地理空间数据分析而设计。它扩展了 Pandas 的功能,支持几何对象的操作和分析[^2]。 #### 安装 GeoPandas 要安装 GeoPandas,可以使用 `conda` 或 `pip` 工具。以下是两种方式的命令: ```bash # 使用 conda 进行安装 conda install -c conda-forge geopandas # 使用 pip 进行安装 pip install geopandas ``` #### 基本概念 GeoPandas 提供了一个核心的数据结构——`GeoDataFrame`,它是 Pandas 中 `DataFrame` 的扩展版本,额外增加了一列用于存储几何对象(如点、线或多边形)。这种数据结构非常适合处理 GIS 数据[^3]。 #### 示例代码:读取 Shapefile 文件并绘制地图 以下是一个简单的例子,展示如何使用 GeoPandas 读取 Shapefile 文件并绘制地图。 ```python import geopandas as gpd # 读取 Shapefile 文件 gdf = gpd.read_file("path_to_shapefile.shp") # 查看前几行数据 print(gdf.head()) # 绘制地图 gdf.plot() ``` 这段代码展示了如何加载一个 Shapefile 并将其作为 GeoDataFrame 对象进行操作。最后通过 `.plot()` 方法快速生成地图可视化效果[^4]。 #### 创建自定义几何对象 除了读取现有的地理数据外,还可以手动创建几何对象并将它们组合到一个新的 GeoDataFrame 中。 ```python from shapely.geometry import Point, LineString, Polygon import pandas as pd import geopandas as gpd # 创建一些几何对象 point = Point(0, 0) line = LineString([(0, 0), (1, 1)]) polygon = Polygon([(0, 0), (1, 1), (1, 0)]) # 将这些对象放入列表中 geometry = [point, line, polygon] # 构建对应的属性数据 data = {'name': ['Point', 'Line', 'Polygon']} # 创建 DataFrame 和 GeoDataFrame df = pd.DataFrame(data) gdf = gpd.GeoDataFrame(df, geometry=geometry) # 打印结果 print(gdf) # 可视化 gdf.plot(column='name') ``` 此代码片段演示了如何利用 Shapely 几何对象构建自己的 GeoDataFrame,并对其进行基本的空间可视化[^4]。 #### 地理数据投影转换 在实际应用中,可能需要更改坐标参考系(CRS)。可以通过设置或修改 CRS 属性来完成这一任务。 ```python # 设置新的 CRS 投影 new_crs = "EPSG:4326" gdf.to_crs(new_crs, inplace=True) # 检查当前使用的 CRS print(gdf.crs) ``` 以上代码说明了如何将 GeoDataFrame 转换至指定的 EPSG 编码下的投影系统。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值