2

緯度と経度があり、国を取得する必要があります。

私はこれを使用しています:

$geocode_stats = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?latlng=".$deal_lat.",".$deal_long . "&sensor=false");
$output_deals = json_decode($geocode_stats);
$country = $output_deals->results[2]->address_components[4]->long_name;

正しい国名を指定する場合もあれば、空白の値を指定する場合もあり、都市名を返す場合もあります。

誰か助けてもらえますか?

4

6 に答える 6

6

簡単にする関数を書きました。完全な住所、郵便番号、または緯度と経度の地理アドレスを渡すだけです。次に、住所コンポーネント配列から国を検索します。郡が見つからない場合は単に null を返します。必要に応じて、これを空の文字列 ("") に変更できます。

function getGeoCounty($geoAddress) {
    $url = 'http://maps.google.com/maps/api/geocode/json?address=' . $geoAddress .'&sensor=false'; 
    $get     = file_get_contents($url);
    $geoData = json_decode($get);
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new \InvalidArgumentException('Invalid geocoding results');
    }

    if(isset($geoData->results[0])) {
        foreach($geoData->results[0]->address_components as $addressComponent) {
            if(in_array('administrative_area_level_2', $addressComponent->types)) {
                return $addressComponent->long_name; 
            }
        }
    }
    return null; 
}
于 2013-03-11T16:14:36.130 に答える
1
$deal_lat=30.469301;
$deal_long=70.969324;
$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng='.$deal_lat.','.$deal_long.'&sensor=false');

$output= json_decode($geocode);

for($j=0;$j<count($output->results[0]->address_components);$j++){

    $cn=array($output->results[0]->address_components[$j]->types[0]);

    if(in_array("country", $cn)){
        $country= $output->results[0]->address_components[$j]->long_name;
    }
}

echo $country;
于 2015-08-05T10:26:28.013 に答える
0

私はベースとして matwonk のコードを取りました。

function getGeoCounty($geoAddress) {
    $url = 'http://maps.google.com/maps/api/geocode/json?address=' . urlencode($geoAddress) .'&sensor=false'; 
    $get     = file_get_contents($url);
    $geoData = json_decode($get);
    if(isset($geoData->results[0])) {
        $return = array();
        foreach($geoData->results[0]->address_components as $addressComponet) {
            if(in_array('political', $addressComponet->types)) {
                if($addressComponet->short_name != $addressComponet->long_name)
                    $return[] = $addressComponet->short_name. " - " . $addressComponet->long_name; 
                else
                    $return[] = $addressComponet->long_name; 
            }
        }
        return implode(", ",$return);
    }
    return null;
}

コードは次の形式で返されます: 近隣、市、州、国

短縮名 (国コードまたは州コード) が検出された場合は、CODE - NAME の形式で表示されます。

于 2013-05-10T21:26:22.827 に答える