赞
踩
geopandas是一个开源项目,它的目的是使得在Python下更方便的处理地理空间数据。geopandas扩展了pandas的数据类型,允许其在几何类型上进行空间操作。geopandas主要结合了pandas和shapely框架的能力。
shapely 有一个名为 geometry 的类,也是python 中一个非常重要的类库,其中包含不同的几何对象。
geopandas两个主要的数据结构,分别是GeoSeries和GeoDataFrame,分别对应了pandas中Series和DataFrame的子类。
geopandas有三个基本类的几何对象(实际上是形状对象):点/点集合、 线/线集合、 多边形/多边形集合。
GeoSeries就是包含了图形series的序列,他包含了几乎所有shapely对象的属性和方法。
在GeoSeries中可以直接使用Shapely的属性和方法。
一个GeoDataFrame是一个列表数据结构,他包含了很多GeoSeries。
GeoDataFrame可以包含具有几何(形状)对象的其他列,但每次只能有一个列作为活动式几何。若更改活动式几何列,可使用set_geometry方法。
注意: 插件库版本可能不兼容有些方法,作者使用以下版本,测OK
插件库名称 | 版本号 |
SQLAlchemy | 1.4.46 |
Shapely | 1.8.5 |
geopandas | 0.10.2 |
geopandas 可以做数据读取、展示、分析、拓展,甚至可以读取zip中的shapefile文件,还可以读取geojson、arcgis中的地理数据库gdb,一起qgis中的geoPackage存放的矢量数据。
- 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()
- 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'])
- 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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。