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 从 lat/lng 获取城市?
如何使用 Google Maps API v3 突出显示地址?
使用 google.maps.geocoder 检索位置的纬度/经度
在 typescript/javascript 的 google.maps.Geocoder().geocode() 上使用全局变量