【问题标题】:Geolocation - how to get city from long and lat地理位置 - 如何从经纬度获取城市
【发布时间】:2015-08-12 00:35:45
【问题描述】:

我正在尝试从Geolocation API 中获取city。我刚刚开始学习一些 JS 和 jQuery,所以这可能是一个基本错误。

$(document).ready(function(){
    function displayLocation(latitude,longitude){
        var request = new XMLHttpRequest();

        var method = 'GET';
        var url = 
            'http://maps.googleapis.com/maps/api/geocode/json?latlng=' 
            + latitude + ',' + longitude + '&sensor=true';
        var async = true;

        request.open(method, url, async);
        request.onreadystatechange = function(){
            if(request.readyState == 4 && request.status == 200){
                var data = JSON.parse(request.responseText);
                var address = data.results[0];
                alert(address.city.short_name);
            }
        };
        request.send();
    };

    var successCallback = function(position){
        var x = position.coords.latitude;
        var y = position.coords.longitude;
        displayLocation(x,y);
    };

    navigator.geolocation.getCurrentPosition(successCallback);
});

【问题讨论】:

  • 你的代码实际产生了什么?
  • Web 开发工具控制台出现错误:TypeError: address.city is undefined 当我将警报更改为:alert(address.formatted_address);它返回整个格式化的地址,但我只需要城市名称
  • 重点突出

标签: javascript jquery api geolocation


【解决方案1】:

这应该会有所帮助

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
    $(document).ready(function(){
        function displayLocation(latitude,longitude){
        var request = new XMLHttpRequest();

       var method = 'GET';
       var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true';
       var async = true;

       request.open(method, url, async);
       request.onreadystatechange = function(){
       if(request.readyState == 4 && request.status == 200){
         var data = JSON.parse(request.responseText);
         alert(request.responseText); // check under which type your city is stored, later comment this line
         var addressComponents = data.results[0].address_components;
         for(i=0;i<addressComponents.length;i++){
            var types = addressComponents[i].types
            //alert(types);
            if(types=="locality,political"){
               alert(addressComponents[i].long_name); // this should be your city, depending on where you are
             }
           }
        //alert(address.city.short_name);
       }
    };
   request.send();
 };

 var successCallback = function(position){
 var x = position.coords.latitude;
 var y = position.coords.longitude;
 displayLocation(x,y);
  };


 navigator.geolocation.getCurrentPosition(successCallback);

  });
 </script>

【讨论】:

  • 谢谢,但它首先显示(可能)位置的每个可能值的列表,然后单击“确定”后显示城市。是因为for循环吗?
  • 抱歉,只是仔细阅读了代码,发现您指向了需要注释掉的行!很好用,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
相关资源
最近更新 更多