2017-03-16 43 views
0

我想从google反向地理编码api获取城市名称,我的代码显示位置的完整地址,但我只需要城市。波纹管是我的代码从google反向地理编码api获取城市名称的最佳方式php

<?php 
session_start(); 
if(!empty($_POST['latitude']) && !empty($_POST['longitude'])){ 
    //Send request and receive json data by latitude and longitude 
    $url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($_POST['latitude']).','.trim($_POST['longitude']).'&sensor=false'; 
    $json = @file_get_contents($url); 
    $data = json_decode($json); 
    $status = $data->status; 
    if($status=="OK"){ 
     //Get address from json data 
     //$location = $data->results[0]->formatted_address; 
     $location = $data->results[0]->address_components; 

    }else{ 
     $location = ''; 
    } 
    //Print city 
    $_SESSION['getgeoloc']=$location[6]->long_name; 

    echo $location; 
} 
?> 

我想下面的代码,以显示城市,但有些时候它显示邮政编码,有时城市名

$_SESSION['getgeoloc']=$location[6]->long_name; 

有什么最好的方法?

+1

我认为这是因为每个位置都有不同类型的数据,并形成不同的数组。不是吗? –

+0

是的,那么如何从中获得发挥城市名称 –

+0

这是一个有点困难的任务,因为你必须做出一些正则表达式类的东西 –

回答

3

这里是解决方案,

<?php 
    $lat = $_POST['lat']; 
    $lng = $_POST['lng']; 

    $url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$lat.','.$lng.'&sensor=false'; 
    $json = @file_get_contents($url); 
    $data = json_decode($json); 
    $status = $data->status; 
    if($status=="OK") { 
     //Get address from json data 
     for ($j=0;$j<count($data->results[0]->address_components);$j++) { 
      $cn=array($data->results[0]->address_components[$j]->types[0]); 
      if(in_array("locality", $cn)) { 
       $city= $data->results[0]->address_components[$j]->long_name; 
      } 
     } 
    } else{ 
     echo 'Location Not Found'; 
    } 
    //Print city 
    echo $city; 

这已经解决我的问题和伟大工程。主要部分是for循环,

for ($j=0;$j<count($data->results[0]->address_components);$j++) { 
    $cn=array($data->results[0]->address_components[$j]->types[0]); 
    if (in_array("locality", $cn)) { 
     $city= $data->results[0]->address_components[$j]->long_name; 
    } 
} 

希望这会有所帮助。

相关问题