2013-07-24 1 views
8

Я использую google maps api 3, чтобы получить город из координат. Я прочитал ReverseGeocoding, но я не понимаю, как иметь правильное значение города от этого вида результата: http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=falseКак получить город из координат?

+0

так, ваш вопрос "Как разобрать JSON"? – Raptor

+0

да! То есть, хо я могу разобрать массив с JS? – Tab

+0

см. Мой ответ .. –

ответ

15

это Funktion возвращает имя запрашиваемого города на широту/долготу. Поскольку этот Скрипт с конца 2012 года. В то время работал отлично. Возвращает «неизвестно», когда API не находит.

function get_api ($lat, $long) { 
    $get_API = "http://maps.googleapis.com/maps/api/geocode/json?latlng="; 
    $get_API .= round($lat,2).","; 
    $get_API .= round($long,2);   

    $jsonfile = file_get_contents($get_API.'&sensor=false'); 
    $jsonarray = json_decode($jsonfile);   

    if (isset($jsonarray->results[1]->address_components[1]->long_name)) { 
     return($jsonarray->results[1]->address_components[1]->long_name); 
    } 
    else { 
     return('Unknown'); 
    } 
} 

редактирование: и jquery.

<p id="city"></p> 

<script> 
$(document).ready(function() {  
    // define lat/long 
    var lat = 37.42; 
    var long = -122.08; 

    $.ajax({ 
     type: 'GET', 
     dataType: "json", 
     url: "http://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+long+"&sensor=false", 
     data: {}, 
     success: function(data) { 
      $('#city').html(data); 
      $.each(data['results'],function(i, val) { 
       $.each(val['address_components'],function(i, val) { 
        if (val['types'] == "locality,political") { 
         if (val['long_name']!="") { 
          $('#city').html(val['long_name']); 
         } 
         else { 
          $('#city').html("unknown"); 
         } 
         console.log(i+", " + val['long_name']); 
         console.log(i+", " + val['types']); 
        } 
       }); 
      }); 
      console.log('Success'); 
     }, 
     error: function() { console.log('error'); } 
    }); 
}); 
</script> 
+0

обратите внимание на комментарий Shivan Raptors, хотя –

+4

Этот код предполагает, что желаемый результат во второй записи адреса_компонента второго результата, нет гарантии, что (или всегда будет, даже если она работает сейчас) желаемый результат. Вы действительно должны искать результат с типом [type] (https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingAddressTypes) данных, которые вы ищете (местность: указывает на включенную городскую или городскую политическую объект) и вернуть это. – geocodezip

+0

Поскольку OP не указывает язык программирования, ваш PHP-код может не подходить для OP. * sidenote: * 'return' не является функцией, поэтому' return 'Unknown'; 'более точно – Raptor

2

В HTML5 странице мы можем получить название города следующим образом:

<script src="//maps.googleapis.com/maps/api/js?v=3.exp&sensor=true"></script> 
<script> 
     (function() { 

      if(!!navigator.geolocation) { 
       navigator.geolocation.getCurrentPosition(function(position) { 

        var geocoder = new google.maps.Geocoder(); 
        var geolocate = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 

        console.log(position.coords.latitude + ', ' + position.coords.longitude); 

        geocoder.geocode({'latLng': geolocate}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
         var result; 
         if (results.length > 1) { 
         result = results[1]; 
         } else { 
         result = results[0]; 
         } 
         //console.log(result); 
         console.log(result.address_components[2].long_name + ', ' + result.address_components[3].long_name); 

        } 
        });  
       }); 
</script>