我正在寻找使用 Geopandas / Shapely来做相当于 ArcPy生成近邻表的操作。我对 Geopandas 和 Shapely 非常陌生,并且开发了一种有效的方法,但我想知道是否有更有效的方法来做到这一点。
我有两个点文件数据集 - 人口普查块质心和餐馆。我正在寻找,对于每个人口普查块质心,到它最近的餐厅的距离。在同一家餐厅是多个街区最近的餐厅方面没有限制。
这对我来说变得有点复杂的原因是Geopandas 距离函数计算元素,基于索引匹配。因此,我的一般方法是将餐厅文件转换为多点文件,然后将块文件的索引设置为所有相同的值。然后所有的块质心和餐馆都有相同的索引值。
import pandas as pd
import geopandas as gpd
from shapely.geometry import Polygon, Point, MultiPoint
现在阅读 Block Centroid 和 Restaurant Shapefile:
Blocks=gpd.read_file(BlockShp)
Restaurants=gpd.read_file(RestaurantShp)
由于 Geopandas 距离函数按元素计算距离,因此我将 Restaurant GeoSeries 转换为 MultiPoint GeoSeries:
RestMulti=gpd.GeoSeries(Restaurants.unary_union)
RestMulti.crs=Restaurants.crs
RestMulti.reset_index(drop=True)
然后我将块的索引设置为等于 0(与餐厅多点的值相同)作为按元素计算的解决方法。
Blocks.index=[0]*len(Blocks)
最后,我使用 Geopandas 距离函数计算每个 Block 质心到最近餐厅的距离。
Blocks['Distance']=Blocks.distance(RestMulti)
请就如何改进这方面的任何方面提供任何建议。我不喜欢使用 Geopandas 或 Shapely,但我希望学习 ArcPy 的替代方法。
谢谢您的帮助!