Google map v3 Geocoder 向后兼容性 [重复]

Posted

技术标签:

【中文标题】Google map v3 Geocoder 向后兼容性 [重复]【英文标题】:Google map v3 Geocoder backward compatibility [duplicate] 【发布时间】:2012-11-22 17:23:20 【问题描述】:

可能重复:google.maps.Geocoder.geocode() geometry.location lat/lng property names change frequently

我在我的应用程序中使用 Google Map v3 及其地理编码器 api。我使用这个 url 来引用 api: http://maps.google.com/maps/api/js?key=key&sensor=false

以下代码曾经运行良好:

    geocoder.geocode( 
    'address': address , function(data, status) 
     

            var lat = data[0].geometry.location.Ya;
            var lng = data[0].geometry.location.Za;
              );

但由于 11 月 18 日 api 更改,此代码无法再获取 lat 和 lng 信息:

var lat = data[0].geometry.location.Ya;
var lng = data[0].geometry.location.Za;

我需要使用:

var lat = data[0].geometry.location.$a;
var lng = data[0].geometry.location.ab;

我了解该问题可以通过以下方式解决:

var latlng = data[0].geometry.location;
var lat = latlng.lng();
var lng = latlng.lat();

但是不断更改变量的名称是否很奇怪?这发生在 10 月 22 日,现在再次更改。我只是想知道以前是否有人遇到过类似的问题?是否有带有版本号的 Google Map v3 javascript URL,以便我不需要使用最新版本?提前致谢。

【问题讨论】:

【参考方案1】:

通过以下方式加载 Google API:

<!--load Google API-->
<script type="text/javascript" src="https://apis.google.com/js/client.js"></script>

然后转到 API 控制台,创建您的新项目并启用您需要的 Google API,在您的情况下为 Gmaps V3 api(您会看到打开/关闭按钮以启用您需要的服务)

https://code.google.com/apis/console

【讨论】:

【参考方案2】:

我很奇怪你为什么要访问内部变量。 Google 更改了 Google Maps API 的 Javascript 库,即使版本相同。 他们编译他们的代码。编译器,我认为是谷歌闭包编译器,每次用户指定“Optimization=Advanced”时都会生成随机变量名称。

要了解编译器的行为,您可以在此处尝试 Closure Compiler。 http://closure-compiler.appspot.com/home

这是一个示例代码。

function MyFunc(prefix) 
  this.prefix_ = prefix;


MyFunc.prototype.helloWorld = function() 
  alert(this.prefix_ + " world");
;

MyFunc.prototype.sayHello = function() 
  alert(this.prefix_);
;

var myFunc = new MyFunc("Hello");
myFunc.helloWorld();
myFunc.sayHello();

当您指定“Optimization=Simple”时,您会得到这样的结果:

function MyFunc(a)this.prefix_=aMyFunc.prototype.helloWorld=function()alert(this.prefix_+" world");MyFunc.prototype.sayHello=function()alert(this.prefix_);var myFunc=new MyFunc("Hello");myFunc.helloWorld();myFunc.sayHello();

但如果你指定“Optimization=Advanced”,你会得到这样的:

var a=new function()this.a="Hello";alert(a.a+" world");alert(a.a);

在高级模式下,编译器会自动更改变量名。 这就是为什么内部变量名总是被改变的原因。

【讨论】:

以上是关于Google map v3 Geocoder 向后兼容性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps API v3:使用 IP 地址多个 LatLng 的 Geocoder.geocode

如何在 Google Maps V3 上居中和缩放多个标记

如何使用 Google Maps V3 从 lat/lng 获取城市?

如何使用 Google Maps API v3 突出显示地址?

使用 google.maps.geocoder 检索位置的纬度/经度

在 typescript/javascript 的 google.maps.Geocoder().geocode() 上使用全局变量