Если полигоны имеют общую границу в шейп-файле, создайте атрибут, который связывает их - PullRequest
0 голосов
/ 20 апреля 2019

Цель: создать сеть, основанную на шейп-файле, где узлы являются центроидами каждого многоугольника (~ 900), а ссылки показывают, где эти многоугольники / узлы имеют общую границу.

Я использовал Geopandas для чтения шейп-файла с ~ 900 полигонами и вычислил центроиды этих полигонов.

Используя Networkx, я использовал эти точки центроида в качестве узлов в новой сети.

Теперь мне нужно создать ссылку между каждой парой узлов, имеющих общую границу.

Может кто-нибудь посоветует, как лучше всего подойти к этому, используя Geopandas, Networkx или другие геопространственные и / или сетевые пакеты в Python?Пример кода будет полезен.

##### Open input Districts shapefile using GeoPandas #####
polys = gpd.read_file(r"C:\Users\mrich\gadm36_TUR_2.shp")
print(polys.head())
#polys.plot()

points = polys.copy()
# Calculate centroids of polygons
points['geometry'] = points['geometry'].centroid
print(points.head())
#points.plot()
#plt.show()

# Write centroids to new Shapefile
points.to_file('centroids.shp')

##### Create network #####
centroids = gpd.read_file(r"C:\Users\mrich\centroids.shp")
print(centroids['geometry'].head())
# draw graph
graph = nx.read_shp('centroids.shp', simplify=True, geom_attrs=True, strict=True)
nx.draw(graph, node_size = 2)
plt.show()
...