少し問題があります。最近隣国に基づいて検索を拡張する GeoIP ベースのシステムの例をいくつか見つけようとしました。たとえば、訪問者は英国から来ており、ブラジル、アルゼンチン、中国などではなく、フランス、スペイン、ベルギーなどから IP を見つけようとします。では、特定の国/IP から最も近い国を取得し、距離を増やして拡張するにはどうすればよいですか?
編集: 都市はあまり気にしないので、無料の Max-mind バージョンを使用しています。私のプロジェクトは C# ベースです。
少し問題があります。最近隣国に基づいて検索を拡張する GeoIP ベースのシステムの例をいくつか見つけようとしました。たとえば、訪問者は英国から来ており、ブラジル、アルゼンチン、中国などではなく、フランス、スペイン、ベルギーなどから IP を見つけようとします。では、特定の国/IP から最も近い国を取得し、距離を増やして拡張するにはどうすればよいですか?
編集: 都市はあまり気にしないので、無料の Max-mind バージョンを使用しています。私のプロジェクトは C# ベースです。
問題を軽減するための最初のステップは、基本的な地理を使用して、国を大陸別に分類することです。
そこから、特定の大陸内の距離のリストを作成し、それらの「距離」または「重み」に基づいて並べ替えることができます。
首都間の地理的距離 (例: キロまたはマイル) は、派手になりたい場合は、開始するのに「十分な」近似値である必要があります。インターネットで少し検索すれば、そのようなリストを見つけることもできるでしょう。
そこから、「郵便局の問題」(Knuth) または「最近傍探索」の最適化問題が発生します。この場合、大陸分割内で単純に線形探索を行うことができると思われます。より良いパフォーマンスが必要な場合は、近似アルゴリズム アプローチで十分です。(答えが最善の解決策であるとは限りませんが、ほとんどの場合は妥当なはずです)
この形式の地理ベースの「ルーティング」は、キューバなどのいくつかの例外的なケースでは弱いことに注意してください。たとえば、キューバは、(素朴な) 明らかな地理的隣国である米国や、政治的な理由で一部の「ブラックホール」タイプの国からインターネットにアクセスできません。関係。北朝鮮とチベットも似たようなケースだと思います。
Maxmind は各国の緯度/経度を提供するので、自分の国と他の国との差を計算するだけで完了です。地理位置情報距離の計算については、このスレッドを参照するか、選択したライブラリを使用してください。
ただし、国の地理的位置は、この国のどこかの1 つのポイントにすぎず、あなたに最も近いポイントではないことに注意してください。