Google maps 谷歌地图上的多个标记位置完全相同,但不起作用

Google maps 谷歌地图上的多个标记位置完全相同,但不起作用,google-maps,google-maps-api-3,google-maps-markers,Google Maps,Google Maps Api 3,Google Maps Markers,我想检查现有标记是否与新标记的板条匹配,如果匹配,则合并信息窗口/工具提示文本 这就是我试图做的: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title></title> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">&l

我想检查现有标记是否与新标记的板条匹配,如果匹配,则合并信息窗口/工具提示文本

这就是我试图做的:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<script type="text/javascript"  src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclustererplus/src/markerclusterer.js"></script>


<script type="text/javascript"> 
var map;
var mc;//marker clusterer
var mcOptions = {gridSize: 10, maxZoom: 8};
var infowindow = new google.maps.InfoWindow();//global infowindow
var geocoder = new google.maps.Geocoder(); //geocoder
var address = new Array("42.3334,-89.1572",
"39.2058,-76.7531",
"39.7751,-86.1322",
"40.4894,-78.3499",
"42.0203,-87.9059",
"36.2673,-86.2912",
"33.6115,-84.3745",
"44.9793,-93.273",
"40.1461,-76.0738",
"32.2911,-90.1927",
"32.9315,-96.6158",
"36.0553,-79.8317",
"41.8397,-88.0887",
"47.8029,-103.267",
"34.106,-83.589",
"41.5907,-87.3199",
"43.0905,-74.3554",
"40.3438,-74.4289",
"40.8651,-96.8231",
"40.8651,-96.8231",
"41.759,-88.1524",
"38.2512,-86.8675",
"41.8119,-87.6873",
"41.3651,-89.0866",
"25.7791,-80.1978",
"41.6404,-88.0696",
"41.7684,-88.1366",
"39.7299,-86.4234",
"41.5234,-81.5996",
"41.6233,-88.0225",
"41.0171,-80.8029",
"40.2899,-82.9811",
"41.8119,-87.6873",
"32.3445,-99.8021",
"41.8119,-87.6873",
"29.8131,-95.3098",
"35.1693,-89.9904",
"33.6115,-84.3745",
"47.7374,-103.298",
"46.3502,-94.1",
"41.9907,-88.4298",
"35.3716,-80.5621",
"38.189,-85.6768",
"41.8119,-87.6873",
"32.7714,-97.2915");
var content = new Array("UnitNo1",
"UnitNo2",
"UnitNo3",
"UnitNo4",
"UnitNo5",
"UnitNo6",
"UnitNo7",
"UnitNo8",
"UnitNo9",
"UnitNo10",
"UnitNo11",
"UnitNo12",
"UnitNo13",
"UnitNo14",
"UnitNo15",
"UnitNo16",
"UnitNo17",
"UnitNo18",
"UnitNo19",
"UnitNo20",
"UnitNo21",
"UnitNo22",
"UnitNo23",
"UnitNo24",
"UnitNo25",
"UnitNo26",
"UnitNo27",
"UnitNo28",
"UnitNo29",
"UnitNo30",
"UnitNo31",
"UnitNo32",
"UnitNo33",
"UnitNo34",
"UnitNo35",
"UnitNo36",
"UnitNo37",
"UnitNo38",
"UnitNo39",
"UnitNo40",
"UnitNo41",
"UnitNo42",
"UnitNo43",
"UnitNo44",
"UnitNo45");

//min and max limits for multiplier, for random numbers //keep the range pretty small, so markers are kept close by
var min = .999999;
var max = 1.000001;

function createMarker(latlng,text) {

var marker = new google.maps.Marker({
position: latlng,
                map: map
});

                ///get array of markers currently in cluster
                var allMarkers = mc.getMarkers();

                //check to see if any of the existing markers match the latlng of the new marker
                if (allMarkers.length != 0) {
                for (i=0; i < allMarkers.length; i++) {
                var existingMarker = allMarkers[i];
                var pos = existingMarker.getPosition();

                if (latlng.equals(pos)) {
                text = text + " & " + content[i];
                }                   
                }
                }
// WHERE TO ADD: mc.addMarker(marker); //??

google.maps.event.addListener(marker, 'click', function() {
infowindow.close();
infowindow.setContent(text);
infowindow.open(map,marker);
});
return marker;
}

function initialize(){
var options = { 
zoom: 4, 
center: new google.maps.LatLng(39.8282,-98.5795), 
mapTypeId: google.maps.MapTypeId.ROADMAP 
};
map = new google.maps.Map(document.getElementById('map'), options); 

var gmarkers = [];
for (i=0; i<address.length; i++) {
var ptStr = address[i];
var coords = ptStr.split(",");
var latlng = new google.maps.LatLng(parseFloat(coords[0]),parseFloat(coords[1]))
gmarkers.push(createMarker(latlng,content[i]));
}

//marker cluster
mc = new MarkerClusterer(map, gmarkers, mcOptions);
for (i=0; i<address.length; i++) { 
geocodeAddress(address[i],i);

}
}
</script> 
<style>
html, body, #map {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
  }
</style>
</head>
<body onload="initialize();">
<div id="map"></div>
</body>
</html>

var映射;
var-mc//标记聚类器
var mcOptions={gridSize:10,maxZoom:8};
var infowindow=new google.maps.infowindow()//全局信息窗口
var geocoder=new google.maps.geocoder()//地理编码
var地址=新数组(“42.3334,-89.1572”,
"39.2058,-76.7531",
"39.7751,-86.1322",
"40.4894,-78.3499",
"42.0203,-87.9059",
"36.2673,-86.2912",
"33.6115,-84.3745",
"44.9793,-93.273",
"40.1461,-76.0738",
"32.2911,-90.1927",
"32.9315,-96.6158",
"36.0553,-79.8317",
"41.8397,-88.0887",
"47.8029,-103.267",
"34.106,-83.589",
"41.5907,-87.3199",
"43.0905,-74.3554",
"40.3438,-74.4289",
"40.8651,-96.8231",
"40.8651,-96.8231",
"41.759,-88.1524",
"38.2512,-86.8675",
"41.8119,-87.6873",
"41.3651,-89.0866",
"25.7791,-80.1978",
"41.6404,-88.0696",
"41.7684,-88.1366",
"39.7299,-86.4234",
"41.5234,-81.5996",
"41.6233,-88.0225",
"41.0171,-80.8029",
"40.2899,-82.9811",
"41.8119,-87.6873",
"32.3445,-99.8021",
"41.8119,-87.6873",
"29.8131,-95.3098",
"35.1693,-89.9904",
"33.6115,-84.3745",
"47.7374,-103.298",
"46.3502,-94.1",
"41.9907,-88.4298",
"35.3716,-80.5621",
"38.189,-85.6768",
"41.8119,-87.6873",
"32.7714,-97.2915");
var content=新数组(“UnitNo1”,
“第二单元”,
“第三单元”,
“第四单元”,
“第五单元”,
“第六单元”,
“第七单元”,
“第八单元”,
“第九单元”,
“第十单元”,
“第11单元”,
“第12单元”,
“第13单元”,
“第14单元”,
“第15单元”,
“第16单元”,
“第17单元”,
“第18单元”,
“第19单元”,
“第20单元”,
“第21单元”,
“第22单元”,
“第23单元”,
“第24单元”,
“第25单元”,
“第26单元”,
“第27单元”,
“第28单元”,
“第29单元”,
“第30单元”,
“第31单元”,
“第32单元”,
“第33单元”,
“第34单元”,
“第35单元”,
“第36单元”,
“第37单元”,
“第38单元”,
“第39单元”,
“第40单元”,
“第41单元”,
“第42单元”,
“第43单元”,
“第44单元”,
“第45号单位”);
//乘法器的最小和最大限制,对于随机数//保持范围非常小,因此标记保持在附近
var min=.999999;
var max=1.000001;
函数createMarker(板条,文本){
var marker=new google.maps.marker({
位置:latlng,
地图:地图
});
///获取群集中当前的标记数组
var allMarkers=mc.getMarkers();
//检查现有标记是否与新标记的板条匹配
如果(allMarkers.length!=0){
对于(i=0;i
        ///get array of markers currently in cluster
        var allMarkers = mc.getMarkers();

        //check to see if any of the existing markers match the latlng of the new marker
        if (allMarkers.length != 0) {
        for (i=0; i < allMarkers.length; i++) {
        var existingMarker = allMarkers[i];
        var pos = existingMarker.getPosition();

        if (latlng.equals(pos)) {
        text = text + " & " + content[i];
        }                   
        }
        }
///获取集群中当前的标记数组
var allMarkers=mc.getMarkers();
//检查现有标记是否与新标记的板条匹配
如果(allMarkers.length!=0){
对于(i=0;i
因此,当您单击具有相同板条的标记时,最终结果将显示一个包含合并文本的信息窗口,如此处所示。它显示数字4,但仅显示3个标记,这是因为右侧的标记与后面的另一个标记合并,当您单击它时,它将显示两者的文本。o只有我想用geocodezip的例子,并在上面工作,因为我已经有了跳线,不需要谷歌去为我找到它们。 如果没有其他问题的话,谢谢你阅读这个长问题

谢谢你,如果你能帮我找到解决办法,请给我打个电话

再次感谢!!!

您需要:

  • 首先创建标记聚集器
  • 将标记添加到MarkerClusterer(并格式化代码以便更易于阅读…)

    函数createMarker(板条,文本){
    var marker=new google.maps.marker({
    位置:latlng,
    地图:地图
    });
    ///获取群集中当前的标记数组
    var allMarkers=mc.getMarkers();
    //检查现有标记是否与新标记的板条匹配
    如果(allMarkers.length!=0){
    对于(i=0;i

  • 包含该代码的帖子中没有生成该错误。正确,现在我正尝试将该工作示例合并到此示例中。如果我将您的数据放在示例中,它会起作用,如果您尝试重新添加地理编码,您将面临一些挑战。请澄清您的问题。进一步,请参阅如果有多个相同的latlng,osted不会合并信息窗口。(检查现有标记是否与新标记的latlng匹配,并合并信息窗口)这里的示例就是这样做的。@geocodezip为了澄清,我正在尝试使用您的wo
    function createMarker(latlng,text) {
      var marker = new google.maps.Marker({
        position: latlng,
        map: map
      });
    
      ///get array of markers currently in cluster
      var allMarkers = mc.getMarkers();
    
      //check to see if any of the existing markers match the latlng of the new marker
      if (allMarkers.length != 0) {
        for (i=0; i < allMarkers.length; i++) {
          var existingMarker = allMarkers[i];
          var pos = existingMarker.getPosition();
    
          if (latlng.equals(pos)) {
            text = text + " & " + content[i];
          }                   
        }
      }
    
      google.maps.event.addListener(marker, 'click', function() {
        infowindow.close();
        infowindow.setContent(text);
        infowindow.open(map,marker);
      });
      mc.addMarker(marker);
      return marker;
    }