У меня есть один набор данных с примерно 10 миллионами точек (широта). Я хотел бы выбрать точки, которые попадают в карту. У меня есть эта карта как объект Shaply (shp). Для этого я преобразовал локализацию каждой точки в объект Point, используя points_from_xy
. Поэтому я преобразовал свой DataFrame в GeoDataFrame. Моя карта в форме объекта Multipolygon. Поэтому я использовал geometry.unary_union
, чтобы преобразовать его в единый многоугольник (я не уверен, что это правильно). Затем я использовал метод within
в Geo pandas, чтобы выбрать точки внутри карты.
import pandas as pd
import geopandas as gpd
from tqdm import tqdm
map = gpd.read_file('foo.shp')
df = pd.read_csv('foo1.csv')
points = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.longitude, df.latitude))
map = map.geometry.unary_union
within_points = [points.geometry[i].within(map) for i in tqdm(range(points.geometry.count()))]
within_points = points[within_points]
Моя проблема в том, что этот процесс занимает слишком много времени (около 5 дней на моем основном ноутбуке i5). Я хотел бы знать, есть ли способ ускорить его.