1

ISO 3166 国コード (240) のリストと、8 つの国/地域/地域 (オーストラリア、デンマーク、オランダ、カタール、南アフリカ、UAE、英国、および米国) のリストがあります。国コードのリストを調べて、それぞれの国コードについて、8 つのリストから最も近いものを見つけたいと思います。メトリック (地理的距離、直線距離、運転時間など) は違います。完璧である必要はなく、合理的である必要があるため、特に重要です。

8 つの場所のリストは定期的に変更される可能性があるため、手動でタスクを実行するのは現実的ではありません。Google Maps API を使用してみましたが、今のところうまくいきません。理想的なソリューションは PHP であり、国コードをインデックスとし、(8 つのリストから) 最も近い国を値とする配列になります。どんな助けでも大歓迎です!

4

1 に答える 1

1

geonames プロジェクトには、使用できる公開データがあります

http://www.geonames.org/

これで、地理座標間の距離を取得できます。

function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
{
    $pi80 = M_PI / 180;
    $lat1 *= $pi80;
    $lng1 *= $pi80;
    $lat2 *= $pi80;
    $lng2 *= $pi80;

    $r = 6372.797; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;
    $dlng = $lng2 - $lng1;
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;

    return ($miles ? ($km * 0.621371192) : $km);
}

ユースケースでは、国の首都を使用できます。大きな国の場合は、国境の近くにさらにいくつかの国を追加する必要があります。

それが一つの解決策です。国を近似する幾何学的形状をデータベースに保存し、正確なクエリを作成することもできます...

しかし、出発点はデータです。あなたは実際に何が欲しいですか?どのようなデータがありますか?

効率が問題になる場合は、すべての国が保存され、国境を接する国とリンクされているグラフを作成することをお勧めします。国境の国だけを見ると、計算量が大幅に削減されます。

于 2013-06-14T11:21:56.097 に答える