geopandas:数据读取、坐标设置与转换、空间查询连接、数据输出、距离计算

这篇博客介绍了如何使用geopandas库处理空间数据。首先,通过`read_file`函数读取多边形数据,然后利用Pandas DataFrame创建GeoDataFrame。接着,将点数据从CSV文件转换为GeoDataFrame,设置坐标系并进行坐标转换。最后,通过空间连接操作(`sjoin`)找到与多边形相交的点数据,并将结果保存为CSV文件。博客内容涵盖了空间数据的基本操作和分析,是地理信息系统(GIS)和数据科学的实践应用。

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

导入相关包

import geopandas as gp
import pandas as pd

数据读取

polygonShp=gp.read_file("./shp/globeland30-10.shp")
polygonShp
OBJECTIDIdgridcodeShape_LengShape_Areageometry
011101740.059400.000000POLYGON ((321652.212 3472141.992, 321562.212 3...
122101020.027900.000001POLYGON ((320602.212 3472111.992, 320572.212 3...
233101080.020700.000000POLYGON ((320842.212 3472111.992, 320812.212 3...
34410120.0900.000000POLYGON ((318442.212 3472021.992, 318412.212 3...
45510120.0900.000000POLYGON ((318502.212 3471991.992, 318472.212 3...
.....................
299829992999102040.0107100.000000POLYGON ((341932.212 3376801.992, 341752.212 3...
299930003000105100.0202500.000000POLYGON ((342412.212 3376171.992, 342382.212 3...
300030013001105280.0337500.000001POLYGON ((342052.212 3375511.992, 341932.212 3...
300130023002101380.060300.000001POLYGON ((340822.212 3375061.992, 340552.212 3...
300230033003101620.074700.000000POLYGON ((341812.212 3374521.992, 341692.212 3...

3003 rows × 6 columns

基于带有坐标的Pandas DataFrame创建GeoDataFrame

pointcsv=pd.read_csv("./datadata-Test.csv")
pointcsv
OBJECTIDField1Field2Field3
01109.35308030.492034-9.465
12109.34687030.4915653.000
23109.34646730.4923988.000
34109.34656730.4924134.000
45109.35158930.49435939.000
...............
84296278429628109.04703031.3688690.000
84296288429629109.04719631.3688950.000
84296298429630109.04693131.3689810.000
84296308429631109.04705231.3690000.000
84296318429632109.04682031.3690920.000

8429632 rows × 4 columns

pointShp = gp.GeoDataFrame(pointcsv, geometry=gp.points_from_xy(pointcsv.Field1,pointcsv.Field2))
pointShp
OBJECTIDField1Field2Field3geometry
01109.35308030.492034-9.465POINT (109.35308 30.49203)
12109.34687030.4915653.000POINT (109.34687 30.49157)
23109.34646730.4923988.000POINT (109.34647 30.49240)
34109.34656730.4924134.000POINT (109.34657 30.49241)
45109.35158930.49435939.000POINT (109.35159 30.49436)
..................
84296278429628109.04703031.3688690.000POINT (109.04703 31.36887)
84296288429629109.04719631.3688950.000POINT (109.04720 31.36889)
84296298429630109.04693131.3689810.000POINT (109.04693 31.36898)
84296308429631109.04705231.3690000.000POINT (109.04705 31.36900)
84296318429632109.04682031.3690920.000POINT (109.04682 31.36909)

8429632 rows × 5 columns

polygonShp.plot()
<AxesSubplot:>

png

GeoDataFrame设置坐标系与进行坐标转换

# 设置坐标系
pointShp.set_crs(epsg=4326,inplace=True)
pointShp.to_crs(epsg=32649,inplace=True)

两个GeoDataFrame间进行空间连接

join_inner_df = gp.sjoin(pointShp, polygonShp, how='inner', op='intersects')
join_inner_df
OBJECTID_leftField1Field2Field3geometryindex_rightOBJECTID_rightIdgridcodeShape_LengShape_Area
56109.35201630.49442639.0POINT (341838.913 3374728.302)300230033003101620.074700.000000
345346109.34017830.4972931.0POINT (340707.335 3375062.731)300130023002101380.060300.000001
346347109.34028230.4973107.0POINT (340717.363 3375064.410)300130023002101380.060300.000001
347348109.34037030.4973246.0POINT (340725.746 3375065.815)300130023002101380.060300.000001
348349109.34046330.4973385.0POINT (340734.720 3375067.319)300130023002101380.060300.000001
....................................
84284378428438109.08045931.3702700.0POINT (317445.086 3472230.637)677101860.0108900.000000
84285538428554109.07996431.3703210.0POINT (317398.122 3472237.057)677101860.0108900.000000
84285548428555109.08010431.370343-1.0POINT (317411.484 3472239.253)677101860.0108900.000000
84286718428672109.07992131.370442-1.0POINT (317394.240 3472250.568)677101860.0108900.000000
84286728428673109.08006831.370465-1.0POINT (317408.250 3472252.871)677101860.0108900.000000

4393811 rows × 11 columns

结果输出

join_inner_df.to_csv("./result.csv",columns=['OBJECTID_left','Field1','Field2','Field3'],index=False)

geopandas计算两列geometry间的距离

请添加图片描述
计算geometrygeometry_2间的距离

df[geometry].distance(df[geometry_2],align=True) 

参数align的使用
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值