【问题标题】:Am getting error "w.getPosition is not a function" using google map API setMarkers function?使用谷歌地图 API setMarkers 函数时出现错误“w.getPosition 不是函数”?
【发布时间】:2020-08-01 09:45:35
【问题描述】:

如果标记在我的标记数组中彼此重叠,则尝试偏移标记。我似乎无法阻止错误。我使用这个答案作为指导:
https://stackoverflow.com/a/25615622/13249825

标记 GPS 坐标和来自数据库中 ajax 请求的其他数据的数组:

var markers = (response['markers']);
var markerArray = []; //Marker array I use to store Marker data so I can delete/add later.
function setMarkers(markers) {
var iconBase =
            '/local/';
var icons = {
         'Automotive Care': {
            image: iconBase + 'AC.png',  
          },
          Contractor: {
            image: iconBase + 'contractor.png',
          }
        };
var infowindow = new google.maps.InfoWindow();
    if (markers){
  for (let i = 0; i < markers.length; i++) {
    var w = markers[i];
    var pos = w.getPosition();
    var latLng = new google.maps.LatLng(parseFloat(w[1]),parseFloat(w[2])); 

    if (latLng.equals(pos)) {
    var a = 360.0 / markers.length;
    var newlat = pos.lat() + -.00004 * Math.cos((+a*i) / 180 * Math.PI);  //x
    var newlng = pos.lng() + -.00004 * Math.sin((+a*i) / 180 * Math.PI);  //Y
    var latLng = new google.maps.LatLng(newLat,newLng);    
}
    var marker = new google.maps.Marker({
      position: latLng,
      map: map,
      icon: {url: icons[w[4]].image,
            scaledSize: new google.maps.Size(32, 32)},
      title: w[0],
      zIndex: parseFloat(w[3])
    });
      markerArray.push(marker);
}        
}    
}

标记数组

(4) [Array(9), Array(9), Array(9), Array(9)]
0: (9) ["aawefwaef", "43.033320", "-76.053556", "3", "Automotive Care", "234", "Anytime", "Anytime", 163]
1: (9) ["sdfg", "43.028406", "-76.000523", "3", "Pet Care", "345", "Anytime", "Anytime", 159]
2: (9) ["asd", "43.028406", "-76.000523", "3", "Contractor", "111", "Anytime", "Anytime", 151]
3: (9) ["qwe", "43.028406", "-76.000523", "3", "Automotive Care", "123", "Anytime", "Anytime", 150]
length: 4

【问题讨论】:

  • 1) 请将for (i = 0 更改为for (let i = 0,否则您会意外创建全局变量。 2) 请在markers 中显示您填写标记的位置,最好在控制台中显示出现错误时markers 的内容。
  • 因为现在看起来markers 数组包含 something 但不是实际的标记对象。
  • 好的,我更新我的代码
  • 你正在推进markerArray(我看不到任何地方定义),而不是markers(我看不到任何地方使用也没有定义)。同样,请显示您在哪里使用markers(不是markerArray)并将其内容在错误点记录到您的控制台。
  • 好的,所以您尝试在数组["aawefwaef", "43.033320", "-76.053556", "3", "Automotive Care", "234", "Anytime", "Anytime", 163] 上调用getPosition..?那没有意义。请再次思考您的代码,并考虑应该如何使用markersmarkerArray,因为我对您在那里尝试做的事情有点困惑。似乎markers 仅包含带有来自您的 API 的数据的数组(不是 Marker 对象!),而 markerArray 具有您创建的实际 Marker 对象(确实具有getPosition ) - 但是你创建它们之后,所以我很困惑。

标签: javascript jquery google-maps-api-3


【解决方案1】:

给你。保留你的markerArray,但只是每次你想添加新图标时。只需通过 markerArray 运行它们,看看是否有任何重复的 lat/lng。

var markerArray = []; //Marker array I use to store Marker data so I can delete/add later.
function setMarkers(markers) {
var iconBase =
            '/local/';
var icons = {
         'Automotive Care': {
            image: iconBase + 'AC.png',  
          },
          Contractor: {
            image: iconBase + 'contractor.png',
          }
        };
var infowindow = new google.maps.InfoWindow();
    if (markers){
  for (var i = 0; i < markers.length; i++) {
    var w = markers[i]; 
    var latLng = new google.maps.LatLng(parseFloat(w[1]),parseFloat(w[2])); 


if(markerArray.length != 0) {
    for (let i=0; i < markerArray.length; i++) {
        var existingMarker = markerArray[i];
        var pos = existingMarker.getPosition();
        if (latLng.equals(pos)) {
            var a = 360.0 / markerArray.length;
            var newLat = pos.lat() + -.00004 * Math.cos((+a*i) / 180 * Math.PI);  //x
            var newLng = pos.lng() + -.00004 * Math.sin((+a*i) / 180 * Math.PI);  //Y
            var latLng = new google.maps.LatLng(newLat,newLng);
        }
    }
}
    var marker = new google.maps.Marker({
      position: latLng,
      map: map,
      icon: {url: icons[w[4]].image,
            scaledSize: new google.maps.Size(32, 32)},
      title: w[0],
      zIndex: parseFloat(w[3])
    });
      markerArray.push(marker);
}        
}    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2015-02-17
    相关资源
    最近更新 更多