返回

高级标记中的 `getPosition()` 陷阱:终极解决方案

javascript

高级标记中的getPosition() 陷阱:终极指南

作为一名经验丰富的程序员,我经常使用 Google 地图高级标记来增强我的项目。然而,在获取标记位置时,我遇到了一个常见的陷阱:getPosition() 方法不起作用。在这篇博客文章中,我将深入探讨这个问题,提供解决方案,并分享其他相关知识。

问题:getPosition() 无效

当你使用高级标记时,getPosition() 方法会引发以下错误消息:

Uncaught TypeError: marker2.getPosition is not a function

这是因为高级标记的 API 与传统标记不同。传统标记存储位置信息在 getPosition() 方法中,而高级标记则存储在 marker.position 属性中。

解决方案:使用 marker.position.latmarker.position.lng

要获取高级标记的位置,你应该使用以下属性:

marker.position.lat
marker.position.lng

代码示例

下面的代码演示了如何使用高级标记获取位置:

var marker = new google.maps.Marker({
  position: { lat: 40.7127, lng: -74.0059 },
  map: map
});

var lat = marker.position.lat;
var lng = marker.position.lng;

注意事项

对于传统标记,getPosition() 方法仍然有效。但是,对于高级标记,务必使用 marker.position.latmarker.position.lng 属性。

结论

理解高级标记与传统标记之间的差异非常重要,以便有效地使用它们。通过使用正确的属性,你可以轻松获取高级标记的位置。希望本指南帮助你解决 getPosition() 问题,并加强你对 Google 地图 API 的掌握。

常见问题解答

  1. 为什么高级标记与传统标记的 API 不同?
    高级标记旨在提供更多功能和自定义选项,因此其 API 与传统标记不同。

  2. 我可以在高级标记中使用 getPosition() 方法吗?
    不,getPosition() 方法仅适用于传统标记。

  3. 如何判断标记是高级标记还是传统标记?
    使用 instanceof 操作符检查标记的类型,如下所示:

if (marker instanceof google.maps.Marker) {
  // Traditional marker
} else if (marker instanceof google.maps.OverlayView) {
  // Advanced marker
}
  1. 我可以转换高级标记为传统标记吗?
    不可以,高级标记无法转换为传统标记。

  2. 除了获取位置之外,高级标记还提供哪些其他功能?
    高级标记提供了一系列功能,包括自定义图标、覆盖物、鼠标事件和动画。