geopandas缓冲区相交分析(数据量大时推荐)
目录
1.需求
2.实现代码
3.其它
1.需求
[1] 不采用arcgis、qgis等软件实现
[2] 需要自己编写1个gui软件实现相关功能,那么就不能使用arcpy环境
[3] 采用python自己写代码实现
功能需求:点shp、线shp,对点进行缓冲区,然后与线进行相交分析,将最近的点属性赋予线要素!(点线数量很多,不适合shapely的那种单个相交函数判断)
开源的geopandas.sjoin_nearest更加适合,其应用example也进一步证明了如此。底层代码做了优化,实现了类似postgis的ST_Intersects等sql执行功能!
2.实现代码
无论问gpt4还是自己部署的ollama-qwen2:7b,一开始直接问大量数据相交处理,都给出的结果不太好,但是如果说具体sjoin函数,再详细说说,那结果还可以。如下是ollama-qwen2:7b给的代码:
# ollama-qwen2:7b 生成
import geopandas as gpd
'''
个人建议:
# 为确保CRS一致性,一开始都要设置成4326,然后统一投影成cgcs2000对应的epsg投影坐标系下面!
'''
# 加载点数据集,并为点创建缓冲区
point_gdf = gpd.read_file('path_to_point_data.shp')
buffer_distance = 0.5 # 缓冲距离
buffered_points = point_gdf.geometry.buffer(buffer_distance)
buffered_points.crs = 'epsg:4326'
# 加载线数据集(假设线的数据文件名和路径)
line_gdf = gpd.read_file('path_to_line_data.shp')
# 使用sjoin函数进行空间连接,找出与点缓冲区相交的线
result_gdf = gpd.sjoin(line_gdf, buffered_points, how='left', op='intersects')
# 保存结果到文件
result_gdf.to_file('output_shp.shp')
3.其它
自己部署ollama,实现大模型编程自由,省的网络不好时不好问。