私は何百万もの地理的ポイントを持っています。これらのそれぞれについて、すべての「隣接ポイント」、つまり、数百メートルなどの半径内の他のすべてのポイントを見つけたいと考えています。
この問題に対する単純な O(N^2) ソリューションがあります。単純に、すべての点のペアの距離を計算します。ただし、適切な距離メトリック (地理的距離) を扱っているため、これを行うためのより迅速な方法があるはずです。
これをPython内で実行したいと思います。頭に浮かぶ 1 つの解決策は、何らかのデータベース (GIS 拡張機能を備えた mySQL、PostGIS) を使用し、そのようなデータベースが何らかのインデックスを使用して上記の操作を効率的に実行することを期待することです。ただし、そのようなテクノロジを構築して学習する必要がない、より単純なものを好みます。
いくつかのポイント
- 「隣人を探す」操作を何百万回も実行します
- データは静的なままです
- ある意味単純な問題なので、それを解くpythonコードを出してほしいです。
Pythonコードの観点から言えば、次のようなものが必要です:
points = [(lat1, long1), (lat2, long2) ... ] # this list contains millions lat/long tuples
points_index = magical_indexer(points)
neighbors = []
for point in points:
point_neighbors = points_index.get_points_within(point, 200) # get all points within 200 meters of point
neighbors.append(point_neighbors)