0

可能重复:
google.maps.Geocoder.geocode() geometry.location lat/lng 属性名称经常更改

我在我的应用程序中使用 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,以便我不需要使用最新版本?提前致谢。

4

2 回答 2

0

通过以下方式加载 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

于 2012-11-22T17:28:03.517 回答
0

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

要了解编译器行为,您可以在此处尝试 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_=a}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=Advanced”,你会得到这样的:

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

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

于 2012-11-22T17:48:21.273 回答