使用getCenter()创建GMap Lat/Lng对象时,v3.22中出现错误

Error in v3.22 while creating GMap Lat/Lng Object using getCenter()

本文关键字:v3 错误 对象 Lng getCenter 创建 GMap Lat 使用      更新时间:2023-09-26

EDIT:这是/曾经是实验版v3.22中的一个已确认错误,但是,您将要阅读的是一个非常糟糕的实现,我最终在遗留代码中发现了它

在新的JS v3.22 GMap API中,运行以下代码会产生错误:

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

我做了一点研究,最终发现当我在以前的版本中运行相同的代码(<=3.21)时,这种情况不会发生,例如使用:

https://maps.googleapis.com/maps/api/js?v=3.21&sensor=false

这是我的地图初始化:

<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);
}

带有v3.22的JSFiddle:https://jsfiddle.net/nsy3Lugk/1/

JSFiddle与v3.21:https://jsfiddle.net/nsy3Lugk/2/

我知道这可能应该在JS API中报告,但是,我似乎无法在中打开新问题https://code.google.com/p/gmaps-api-issues/issues/list(我在尝试提交问题时收到了400个错误的回复,所有内容看起来都过时了)。

如果你能回答以下任何一个问题,那将非常有帮助:

  • 是否有其他人面临同样的问题(或者可以重现错误)
  • 是什么原因导致了这个问题(没有重大的版本更改,所以它应该具有向后兼容性)
  • 报告此类错误/问题的正确地点在哪里

我无法帮助解决那个特定的错误,但我只是修复了一个类似的问题。我有一个客户已经使用这个图书馆很长时间了,今天他们说他们没有地图。在本地检查完所有内容后,我从字符串数组中传递Lat/Lng值的元素,直到几天前API都接受了这一点。

对我来说,补救措施是在new google.maps.LatLng(lat+0,lng+0)的构造函数中的Lat和Lng中添加零。

关于此问题的正确链接是https://code.google.com/p/gmaps-api-issues/issues/detail?id=8809-@geocodezip的评论包括一个后括号,但这是正确的问题,我添加了一个评论来确认这个问题。

最终map.getCenter()所做的是返回一个LatLng obj,因此使用另一个LatL创建一个新的LatLng obj毫无意义!

我想我最终在"它在以前的版本中起作用了!"的争论中"隧道幻想"了。

在我的例子中,该代码用于创建一个新的LatLng Obj来创建一个标记,所以我只删除了new google.maps.LatLng();部分,并直接使用map.getCenter()来创建标记,这应该是合乎逻辑的做法

出于某种原因,这曾经在<3.21 API,但既不是预期行为,也不是记录/支持的行为。

尽管,正如其他用户所说,实验版v3.22中存在/曾经存在一个已确认的错误(https://code.google.com/p/gmaps-api-issues/issues/detail?id=8809)这可能导致了这个问题(有关更多信息,请参阅已接受的答案)。