Javascript 使用getCenter()创建GMap Lat/Lng对象时在v3.22中出错
EDIT:这是/曾经是实验版v3.22中确认的错误,但是,您将要阅读的是一个非常糟糕的实现,我最终在遗留代码中发现了它。 在新版本中,运行以下代码会产生错误:Javascript 使用getCenter()创建GMap Lat/Lng对象时在v3.22中出错,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,EDIT:这是/曾经是实验版v3.22中确认的错误,但是,您将要阅读的是一个非常糟糕的实现,我最终在遗留代码中发现了它。 在新版本中,运行以下代码会产生错误: new google.maps.LatLng(map.getCenter()); 我得到的错误如下: xb {message: "in property lat: not a number", name: "InvalidValueError", stack: "Error↵ at Error (native)↵ at ne
new google.maps.LatLng(map.getCenter());
我得到的错误如下:
xb {message: "in property lat: not a number", name: "InvalidValueError", stack: "Error↵ at Error (native)↵ at new xb (https:/…ject.InjectedScript.evaluate (<anonymous>:664:21)"}
(anonymous function) @ main.js:16
M @ main.js:20
(anonymous function) @ VM744:2
InjectedScript._evaluateOn @ VM601:875
InjectedScript._evaluateAndWrap @ VM601:808
InjectedScript.evaluate @ VM601:664
以下是我的地图初始化:
<div id="map" data-latitude="" data-longitude=""></div>
function loadMap() {
var options = {
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true,
scrollwheel: 1
};
map = new google.maps.Map(document.getElementById('map'), options);
var mapCenter = new google.maps.LatLng(18.48970297360103,-69.89810943603516);
map.setCenter(mapCenter,12);
}
函数loadMap(){
变量选项={
缩放:12,
mapTypeId:google.maps.mapTypeId.ROADMAP,
mapTypeControl:true,
滚轮:1
};
map=new google.maps.map(document.getElementById('map'),选项);
var mapCenter=new google.maps.LatLng(18.48970297360103,-69.89810943603516);
地图中心(地图中心,12);
}
带v3.22的JSFIDLE:
带v3.21的JSFIDLE:
我知道这可能应该在JSAPI中报告,但是,我似乎无法在中打开新问题(我在尝试提交问题时收到400个错误响应,并且那里的所有内容看起来都过时了)
如果你能回答以下任何一个问题,那将非常有帮助:
- 是否有其他人面临同样的问题(或可以重现错误)
- 是什么导致了这个问题(没有重大的版本更改,所以应该具有向后兼容性)
- 报告此类错误/问题的正确位置在哪里
- 我无法帮助解决这个特定错误,但我刚刚修复了一个类似的问题。我有一个客户已经使用这个库很长时间了,今天他们说他们没有地图。在本地检查完所有内容后,我将从字符串数组中传递元素以获取Lat/Lng值,直到几天前API才接受该值
我的补救办法是在
新的google.maps.LatLng(Lat+0,Lng+0)
的构造函数中为Lat和Lng添加零
关于这个问题的正确链接是,@geocodezip的注释包含一个后括号,但这是正确的问题,我添加了一条注释来确认这个问题。最后
map.getCenter()
所做的是返回一个LatLng obj,因此使用另一个LatLng创建一个新的LatLng obj没有意义
我想我在“它在以前的版本中工作!”的争论中结束了“隧道设想”
在我的例子中,代码被用来创建一个新的LatLng Obj来创建一个标记,所以我只是删除了新的google.maps.LatLng()
part并直接使用map.getCenter()
创建标记,这应该是合乎逻辑的事情
出于某种原因,这在问题跟踪程序中可能相关的问题中起作用[issue 8809:(Maps API V3)不再接受空值新的google.Maps.LatLng()[您如何设置地图的中心?有两个必需的参数“中心”和“缩放”。您是对的@geocodezip,我忽略了初始化的这一部分。请参阅我的编辑。此外,使用搜索动态更改中心,但是,这一部分并不重要,因为在v3.22中,它在搜索集之后或与初始化和在v3.21中它都可以工作(通过初始化和endsup设置中心的搜索)。@geocodezip问题似乎是map.getCenter()在v3.22中生成了一个不同的对象。考虑到它只是一个补丁版本的更改(甚至不是e MINOR版本),这非常奇怪.问题追踪器上的相关问题:.v3.22当前是实验版本,功能不稳定,可以随时更改或中断。感谢您的输入!该链接非常有用,但问题似乎在地图中。getCenter()这会产生不同的结果。在引用的bug报告中,Google确认他们刚刚通过删除对对象的支持而打破了当前的实验版本。我猜这将在生产之前得到修复。解决方案是在下一个版本发布之前,使用
v=3.20
指定您想要的库的版本生产。是的!我已经在使用v3.21,这解决了生产中的问题,我只是想确保v3.22发布后不会出现问题。最后,在我的情况下,从另一个LatLng创建一个新的LatLng Obj没有任何意义(甚至没有文档记录)。因为这个原因,我更喜欢使用getCenter()直接:)!不管怎样,你的答案很有帮助,所以我将对其进行升级投票。感谢你对我的答案进行升级投票,但将你自己的答案标记为已接受。使用GetCenter是可以的。这不是问题所在。问题是版本更改,导致有效代码失败。你的三个问题都已在此处得到回答。
<div id="map" data-latitude="" data-longitude=""></div>
function loadMap() {
var options = {
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true,
scrollwheel: 1
};
map = new google.maps.Map(document.getElementById('map'), options);
var mapCenter = new google.maps.LatLng(18.48970297360103,-69.89810943603516);
map.setCenter(mapCenter,12);
}