Tôi đang tìm cách làm tương đương với ArcPy Generate Near Table sử dụng Geopandas/Shapely. Tôi rất mới với Geopandas và Shapely và đã phát triển một phương pháp làm việc, nhưng tôi tự hỏi nếu có một cách hiệu quả hơn để làm điều đó.Tính khoảng cách đến tính năng gần nhất với Geopandas
Tôi có hai tập dữ liệu tập tin điểm - Khối điều tra dân số Centroids và nhà hàng. Tôi đang tìm kiếm, cho mỗi trung tâm Khối điều tra dân số, khoảng cách đến nhà hàng gần nhất của nó. Không có giới hạn nào đối với cùng một nhà hàng là nhà hàng gần nhất cho nhiều nhà hàng.
Lý do điều này trở nên phức tạp hơn một chút đối với tôi là vì việc tính toán theo nguyên tắc, kết hợp dựa trên chỉ mục theo số liệu Geopandas Distance function. Vì vậy, phương pháp chung của tôi là biến tệp Nhà hàng thành tệp đa điểm và sau đó đặt chỉ mục của tệp khối thành tất cả có cùng giá trị. Sau đó, tất cả các khối centroids và các nhà hàng có cùng một giá trị chỉ số.
import pandas as pd
import geopandas as gpd
from shapely.geometry import Polygon, Point, MultiPoint
Bây giờ đọc trong tập tin hình dạng khối trọng tâm và nhà hàng:
Blocks=gpd.read_file(BlockShp)
Restaurants=gpd.read_file(RestaurantShp)
Kể từ khi chức năng khoảng cách Geopandas tính toán khoảng cách elementwise, tôi chuyển đổi GeoSeries Restaurant để một GeoSeries MultiPoint:
RestMulti=gpd.GeoSeries(Restaurants.unary_union)
RestMulti.crs=Restaurants.crs
RestMulti.reset_index(drop=True)
Sau đó, tôi thiết lập chỉ mục cho các khối bằng 0 (giá trị tương tự như đa điểm nhà hàng) như một công việc xung quanh để tính toán theo nguyên tố.
Blocks.index=[0]*len(Blocks)
Cuối cùng, tôi sử dụng chức năng khoảng cách Geopandas để tính khoảng cách đến nhà hàng gần nhất cho mỗi khối centroid.
Blocks['Distance']=Blocks.distance(RestMulti)
Vui lòng cung cấp bất kỳ đề xuất nào về cách cải thiện điều này. Tôi không bị ràng buộc bởi việc sử dụng Geopandas hay Shapely, nhưng tôi đang tìm cách để tìm hiểu một giải pháp thay thế cho ArcPy.
Cảm ơn sự giúp đỡ!
xác định hàng xóm gần nhất là một nhiệm vụ khá thẳng về phía trước chỉ riêng NumPy. xem phần cuối của bản trình bày này (https://speakerdeck.com/jakevdp/losing-your-loops-fast-numerical-computing-with-numpy-pycon-2015) cho một giải pháp tinh khiết-gumpy được kiểm tra chống lại một hàm scikit-learn . –
Bạn sẽ có thể lặp lại các khối của bạn và sau đó chỉ cần tính toán khoảng cách cho tất cả các nhà hàng cho khối cụ thể đó (sử dụng chức năng geopandas cài sẵn). Chọn mức tối thiểu và bạn đã đặt? Để được trợ giúp thêm, có thể đăng nơi shapefiles nguồn có thể được tìm thấy? – shongololo