私がテキストとしてアドレスを持っているとしましょう:
901 Cherry Ave. San Bruno、CA 94066 USA
この住所のGPS座標(経度と緯度)を特定するのに役立つ無料のサービスはありますか? (アプリケーションで使用するので、何らかのAPIにする必要があります)
テキストは任意の言語にすることができます。
住所を地理座標に変換するプロセスが呼び出されますgeocodingと呼ばれます。
データの使用方法に応じて、Googleから入手できるAPIがあります。詳細 ここ 。幸運を!
どのフレームワークを使用するかは実際にはわかりません。何か大きなものが必要な場合は、大きな驚きがあります。後で使用するためにこれらの情報をxmlに保存しない場合に備えて、1日あたり2.5Kリクエストの制限があります。したがって、現時点では、これをローカリゼーション用のOSM機能と組み合わせるより良い方法を見つけることができます。
このグーグルマップAPI3サービスを確認してくださいこれはグーグルマップAPIの逆ジオコーディングサービスです
http://code.google.com/apis/maps/documentation/javascript/services.html#Geocoding
http://googlegeodevelopers.blogspot.com/2010/03/introducing-new-google-geocoding-web.html
以下は私が使用するコードです。 voncoxコードに基づいて準備しました(ありがとう)。 Zendを使いたくなかっただけです。
複数の住所をジオコーディングする必要がある場合は、このコードを任意の種類のループで閉じるだけですが、おそらくもっと速い方法があります。私はそれを約100のアドレスにのみ使用し、処理に約30秒かかりました。
$street="Lwowska 4"; $postcode="00-658"; $city="Warszawa"; $region="mazowieckie";
$a=$street.", ".$postcode.", ".$city.", ".$region;
$address = urlencode($a);
$link = "http://maps.google.com/maps/api/geocode/xml?address=".$address."&sensor=false";
$file = file_get_contents($link);
if(!$file) {
echo "Err: No access to Google service: ".$a."<br/>\n";
}else {
$get = simplexml_load_string($file);
if ($get->status == "OK") {
$lat = (float) $get->result->geometry->location->lat;
$long = (float) $get->result->geometry->location->lng;
echo "lat: ".$lat."; long: ".$long."; ".$a."<br/>\n";
}else{
echo "Err: address not found: ".$a."<br/>\n";
}
}
参考までに、MapQuestのコミュニティライセンスには「オープン」APIがあり、裏側でnominatim/OpenStreetMapを使用します。
これは、コミュニティの「ライセンス済み」APIと同じAPI(インターフェースに関して)であり、後で簡単に移行できます。
オープンバージョンでは、アドレスが少し正確すぎる必要があることがわかりました。展開後の初日に、いくつかのアドレスを「見逃しました」。サービスがダウンしていると思いましたが、通りの名前には方向(SWなど)などの詳細がほとんど欠けていたことがわかりました。
ライセンス版を試してみたところ、スペルミスのあるアドレスも返されました。
コミュニティライセンスライセンスデータバージョンも無料ですが、Googleのものとほぼ同じ条件で制限されています。あなたが望むものであなたがすることができる「オープン」データ。
あなたがお金を払うことになろうとしているなら、YahooのBoss/Geoapiは少量で最も安いようです。彼らはただ無料版を持っていません。
PhpとZendFrameworkを使用できる/使用する意思がある場合、ほとんどのGoogle MapsAPIはZend_Http_Clientを使用して抽象化されます。
例えば:
$address = '69 Some Road, Somewhere, NW1 8UJ';
$http = new Zend_Http_Client('google_maps_url');
$http->setParameterGet(array('address' => $address, 'sensor' => 'false'));
$get = $http->request();
$get = json_decode($get->getBody());
if ($get->status == self::GOOGLE_MAPS_SUCCESS) {
$lat = (float) $get->results[0]->geometry->location->lat;
$long = (float) $get->results[0]->geometry->location->lng;
}