Sto cercando di eseguire l'equivalente di ArcPy Generate Near Table utilizzando Geopandas/Shapely. Sono molto nuovo a Geopandas e Shapely e ho sviluppato una metodologia che funziona, ma mi chiedo se c'è un modo più efficiente di farlo.Calcola la distanza dalla caratteristica più vicina con le Geopandas
Ho set di dati di due file di punti - Centri di censimento e ristoranti. Sto cercando di trovare, per ogni centroide del blocco censito, la distanza dal suo ristorante più vicino. Non ci sono restrizioni in termini di ristorante stesso essendo il ristorante più vicino per più blocchi.
Il motivo per cui questo diventa un po 'più complicato per me è perché il Geopandas Distance function calcola elementwise, la corrispondenza in base all'indice. Pertanto, la mia metodologia generale consiste nel trasformare il file Restaurants in un file multipunto e quindi impostare l'indice del file dei blocchi su tutti come lo stesso valore. Quindi tutti i centroidi dei blocchi e i ristoranti hanno lo stesso valore di indice.
import pandas as pd
import geopandas as gpd
from shapely.geometry import Polygon, Point, MultiPoint
Ora leggete nel blocco Centroid and Restaurant Shapefiles:
Blocks=gpd.read_file(BlockShp)
Restaurants=gpd.read_file(RestaurantShp)
Dal momento che la funzione di distanza Geopandas calcola la distanza elementwise, ho convertire il geoserie ristorante ad un MultiPoint geoserie:
RestMulti=gpd.GeoSeries(Restaurants.unary_union)
RestMulti.crs=Restaurants.crs
RestMulti.reset_index(drop=True)
Quindi ho impostato l'indice per i blocchi uguale a 0 (lo stesso valore del multipunto di ristoranti) come soluzione per il calcolo elementwise.
Blocks.index=[0]*len(Blocks)
Infine, utilizzare la funzione di distanza Geopandas per calcolare la distanza dal più vicino ristorante per ogni baricentro Block.
Blocks['Distance']=Blocks.distance(RestMulti)
Si prega di offrire qualche suggerimento su come qualsiasi aspetto di questo potrebbe essere migliorato. Non sono legato all'utilizzo di Geopandas o Shapely, ma sto cercando di imparare un'alternativa ad ArcPy.
Grazie per l'aiuto!
determinare vicini più prossimi è un compito abbastanza straight-forward nel solo NumPy. vedere la fine di questa presentazione (https://speakerdeck.com/jakevdp/losing-your-loops-fast-numerical-computing-with-numpy-pycon-2015) per una soluzione pura-numpy confrontata con una funzione di apprendimento scikit . –
Dovresti essere in grado di iterare i tuoi blocchi e quindi semplicemente calcolare la distanza per tutti i ristoranti in quel particolare blocco (usando la funzionalità di geopandas incorporata). Seleziona il minimo e sei pronto? Per ulteriori informazioni, potresti postare dove trovare gli shapefile sorgente? – shongololo