Web サイトに、ユーザーが場所の住所を入力するフォームがあります。彼らがフォームを送信すると、この場所を緯度/経度に変換し、MySQL データベースに保存します。この変換には Google の Geocode サービスを使用しています。問題は、その緯度/経度を住所に戻すクラスまたはサービスが見つからないことです。私の知る限り、Google の Geocode サービスは一方向の変換です。物理アドレスをデータベースに保存できることはわかっていますが、時間の経過とともに、より単純な形式で保存できるようになると、これは無駄なスペースになります。緯度/経度から住所に変換するクラス/サービスを知っている人はいますか?それとも私が間違っていて、Googleのジオコードシステムを使用できるのですか? 過去数日間、答えを探しましたが、何も見つかりませんでした。ご協力いただきありがとうございます!
4 に答える
地理座標を住所に変換することは、リバース ジオコーディングと呼ばれます。このスクリプトでは、無料で高速で、API キーが不要な Google マップ API を使用しています。
Google のジオコーディングのレート制限は、IP ごとに 1 日あたり 2500 API 呼び出しです。
Reveres Geocoding の PHP 関数
<?
function getaddress($lat,$lng)
{
$url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($lat).','.trim($lng).'&sensor=false';
$json = @file_get_contents($url);
$data=json_decode($json);
$status = $data->status;
if($status=="OK")
{
return $data->results[0]->formatted_address;
}
else
{
return false;
}
}
?>
getaddress() 関数で緯度と経度を渡します。成功した場合はアドレス文字列を返し、それ以外の場合はブール値の false を返します。
例
<?php
$lat= 26.754347; //latitude
$lng= 81.001640; //longitude
$address= getaddress($lat,$lng);
if($address)
{
echo $address;
}
else
{
echo "Not found";
}
?>
Geolocation PHP は緯度経度を住所に変換します。まず、以下のリンクを使用して見つけた Google マップ API の API キーを取得する必要があります。
https://developers.google.com/maps/documentation/geocoding/start#ReverseGeocoding
以下の関数をヘルパークラスに入れて、緯度と経度を渡すだけの場所でその関数を呼び出します。緯度経度を渡した後、緯度経度値に関する住所を返します。そのプロセス全体がリバース ジオコーディングと呼ばれます。
/**
* find address using lat long
*/
public static function geolocationaddress($lat, $long)
{
$geocode = "https://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$long&sensor=false&key=AIzaSyCJyDp4TLGUigRfo4YN46dXcWOPRqLD0gQ";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $geocode);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$output = json_decode($response);
$dataarray = get_object_vars($output);
if ($dataarray['status'] != 'ZERO_RESULTS' && $dataarray['status'] != 'INVALID_REQUEST') {
if (isset($dataarray['results'][0]->formatted_address)) {
$address = $dataarray['results'][0]->formatted_address;
} else {
$address = 'Not Found';
}
} else {
$address = 'Not Found';
}
return $address;
}
詳細については、以下のリンクをチェックアウトしてください: Geolocation PHP Latitude Longitude to Address - Lelocode