我想通过Google地图API(V3?)用PHP从经度和纬度获取国家、地区和城市名称。我只是无法为每个县获得它,我设法获得了这个代码,但它在其他县不起作用,因为返回的结果不同(唯一正确的信息是国家,但即使是以当地名称而不是英文名称返回):
<?
$lok1 = $_REQUEST['lok1'];
$lok2 = $_REQUEST['lok2'];
$url = 'http://maps.google.com/maps/geo?q='.$lok2.','.$lok1.'&output=json';
$data = @file_get_contents($url);
$jsondata = json_decode($data,true);
if(is_array($jsondata )&& $jsondata ['Status']['code']==200)
{
$addr = $jsondata ['Placemark'][0]['AddressDetails']['Country']['CountryName'];
$addr2 = $jsondata ['Placemark'][0]['AddressDetails']['Country']['Locality']['LocalityName'];
$addr3 = $jsondata ['Placemark'][0]['AddressDetails']['Country']['Locality']['DependentLocality']['DependentLocalityName'];
}
echo "Country: " . $addr . " | Region: " . $addr2 . " | City: " . $addr3;
?>
这对从我的国家获得正确的数据非常有效,但对其他国家却不适用。。。
您可以像这样使用第二个api(由Thomas建议):
$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=48.283273,14.295041&sensor=false');
$output= json_decode($geocode);
echo $output->results[0]->formatted_address;
试试这个。。
编辑::::
$geocode=file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?latlng=48.283273,14.295041&sensor=false');
$output= json_decode($geocode);
for($j=0;$j<count($output->results[0]->address_components);$j++){
echo '<b>'.$output->results[0]->address_components[$j]->types[0].': </b> '.$output->results[0]->address_components[$j]->long_name.'<br/>';
}
以下是我解决问题的方法
$lat = "22.719569";
$lng = "75.857726";
$data = file_get_contents("http://maps.google.com/maps/api/geocode/json?latlng=$lat,$lng&sensor=false");
$data = json_decode($data);
$add_array = $data->results;
$add_array = $add_array[0];
$add_array = $add_array->address_components;
$country = "Not found";
$state = "Not found";
$city = "Not found";
foreach ($add_array as $key) {
if($key->types[0] == 'administrative_area_level_2')
{
$city = $key->long_name;
}
if($key->types[0] == 'administrative_area_level_1')
{
$state = $key->long_name;
}
if($key->types[0] == 'country')
{
$country = $key->long_name;
}
}
echo "Country : ".$country." ,State : ".$state." ,City : ".$city;
<?php
$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;
?>
您是否尝试过使用他们的GeoCoding API?
https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding
示例:http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.96452&传感器=错误
编辑:我在许多针对印度的应用程序中都使用过它,效果很好。
总是依赖谷歌真的很愚蠢。
将城市放入带有GPS x和Y坐标的文本文件中,然后从中提取。所有这些都可以在线获得
如果你使用laravel,那么它将对你的使用full
$latitude=26.12312;
$longitude=83.77823;
$geolocation = $latitude.','.$longitude;
$response = Http::get('https://maps.googleapis.com/maps/api/geocode/json', [
'latlng' => $geolocation,
'key' => 'api key',
'sensor' => false
]);
$json_decode = json_decode($response);
if(isset($json_decode->results[0])) {
$response = array();
foreach($json_decode->results[0]->address_components as $addressComponet) {
$response[] = $addressComponet->long_name;
}
dd($response);
}
请用您自己的替换api密钥