【问题标题】:Reverse geocoding with Google Maps API使用 Google Maps API 进行反向地理编码
【发布时间】:2011-03-22 22:09:42
【问题描述】:

我找到了反向地理编码的代码:

var point = new GLatLng (lat[1],long[1]);
var geocoder = new GClientGeocoder();
geocoder.getLocations (point, function(result) { alert (lat[1]+' '+long[1]+' '+result.address); });

但它会弹出警报,说 result.address 是“未定义”。任何想法,可能是什么问题?


编辑:成功了,谢谢。

【问题讨论】:

    标签: javascript google-maps reverse-geocoding


    【解决方案1】:

    你能包括“lat”和“long”的定义吗?此外,“long”是保留关键字,因此很可能是错字/错误。

    此外,返回的结果,至少在 gmaps v2 json 格式中,具有更复杂的结构,并且“result.address”不会有任何内容。当我对其进行测试时,我需要使用以下内容访问其中一个地址:

    result.Placemark[0].address

    http://code.google.com/apis/maps/documentation/geocoding/index.html#GeocodingResponses

    【讨论】:

    • 还有一件事,如果我用变量替换“警报”,比如 x = result.Placemark[6].address; ,那么似乎这个 x 在函数之外是不可访问的?
    • 是的,回调中定义的任何内容都只能从该回调中访问。如果可能的话,最好在回调中做任何你需要做的工作。更混乱的方法可能是在函数之外定义一个对象或数组并将结果添加到其中。
    • >>> 更混乱的方法可能是在函数之外定义一个对象或数组并将结果添加到其中。
    • 问题是在反向地理编码请求的回调返回之前调用了“document.write(g)”。这就是为什么最好在回调中做你需要的事情,否则你将不得不担心回调的时间。
    • hmm...我不能真正从该函数中完成我需要的所有事情,因为我需要获取一个变量以将其传递给另一个函数。
    【解决方案2】:

    由此我只能说result 没有被传递给函数或者它不是一个对象。

    你需要查看回调函数接收到哪些参数。文档是这样说的:

    此响应将包含一个状态代码,如果成功,将包含一个或多个 Placemark 对象。

    如果您使用的是 Firebug,您可以通过这种方式查看传递给回调的内容:

    var point = new GLatLng (lat[1],long[1]);
    var geocoder = new GClientGeocoder();
    geocoder.getLocations (point, function(result) { 
        window.console.log(arguments);
        // Here you will see what arguments are passed and
        // decide what to do about them
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2015-10-30
      • 2014-10-23
      相关资源
      最近更新 更多