【问题标题】:Cluster same lat/lng gmaps v3集群相同的 lat/lng gmaps v3
【发布时间】:2011-05-12 10:15:58
【问题描述】:

在我的网站上,我有一个允许用户注册的表格。它要求用户提供他们的城市、州和国家。我还有一张地图,它根据从该城市、州、国家/地区组合 ($location) 绘制的纬度/经度为每个用户放置一个标记。

因为我不是特别具体(例如,我不是在询问他们的实际地址),所以我有许多用户具有相同的 lat/lng。这会在尝试查看我的地图上的标记时产生问题。

我应该使用集群服务吗?如果有,你有什么建议吗??就像我说的,信息来自 mySQL 数据库 --> XML --> PHP。

如果是这样,它将以最大缩放级别聚集(就像我说的,相同的纬度/经度)。因此,我需要一个信息窗口,允许我选择该特定位置的每个用户。

想法?建议???非常感谢!!!

杰里米

【问题讨论】:

    标签: php sql google-maps-api-3 cluster-analysis


    【解决方案1】:

    我想我会粘贴我的代码:

    
    
    

    function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(47.614495, -122.341861), 2); map.enableScrollWheelZoom();

    GDownloadUrl("world_xml.php", function(data) { var xml = GXml.parse(data); var markers = xml.documentElement.getElementsByTagName("marker"); for (var i = 0; i < markers.length; i++) { var first_name = markers[i].getAttribute("first_name"); var last_name = markers[i].getAttribute("last_name"); var email = markers[i].getAttribute("email"); var affiliation = markers[i].getAttribute("affiliation"); var status = markers[i].getAttribute("status"); var service = markers[i].getAttribute("service"); var rank = markers[i].getAttribute("rank"); var specialty = markers[i].getAttribute("specialty"); var city = markers[i].getAttribute("city"); var state = markers[i].getAttribute("state"); var country = markers[i].getAttribute("country"); var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))); var marker = createMarker(point, rank, first_name, last_name, email, affiliation, status, service, specialty, city, state, country); map.addOverlay(marker); } });

    } }

    function createMarker(point, rank, first_name, last_name, email, affiliation, status, service, special, city, state, country) { var marker = new GMarker(point); var html = "" + rank + " " + first_name + " " + last_name + "
    " + service + ", " + status + "
    " + special + "
    " + 隶属关系 + "
    " + 城市 + ", " + 州 + " " + 国家 + "
    " + 电子邮件 + "
    " + " "; GEvent.addListener(marker, 'click', function() { 标记.openInfoWindowHtml(html); }); 返回标记; }

    【讨论】:

      【解决方案2】:

      MarkerClusterer:http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/1.0/docs/examples.html

      或手动(大致 - 仅示例代码!)

              var latlng = new google.maps.LatLng(-33.8671390, 151.2071140);
              var myOptions = {
                  zoom: 8,
                  center: latlng,
                  mapTypeId: google.maps.MapTypeId.ROADMAP
              };
              var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
      
              var markers = [];
              var newmarkers = [];
      
              for(var j=0; j<5; j++) {
                  markers.push({lat:-33.8671390, lng:151.2071140, title:'This is marker #' + i });
      
                  if(j==0) newmarkers.push(markers[j]);
                  for(var i=0; i<newmarkers.length; i++) {
                      if(newmarkers[i].lat == markers[j].lat && newmarkers[i].lng == markers[j].lng) {
                          newmarkers[i].title += ' AND ' + markers[j].title;
                          continue;
                      }
                      newmarkers.push(markers[j]);
                  }
              }
      
              for(var i=0; i<newmarkers.length; i++) {
                  var mkr = new google.maps.Marker({
                      position: new google.maps.LatLng(newmarkers[i].lat, newmarkers[i].lng), 
                      map: map, 
                      title: newmarkers[i].title
                  });
              }
      

      【讨论】:

      • Jonathan:看了一下那个链接。感谢您发送它。我不确定这是否符合我的需要。似乎大多数标记都是从不同的 lat/lng 集中绘制的。而我的很多都是一样的。建议???
      • 该库进行基于正方形的聚类。这意味着您以像素为单位设置距离,并且框内的任何内容都会聚集在一起。所以你可以尝试设置一个小的距离值。否则,您需要解析您的位置集合并附加到另一个集合,检查每个位置与新集合中的位置。
      • 我有很多人将“Vance AFB, OK, USA”列为他们的位置。 lat/lng 为:lat="36.343071" lng="-97.907806"。所以你是说当我将这些信息输入我的数据库时,我应该每次都转换最后一个数字?这可能有点酷……在一个小空间里有多个标记。然后,用户只需放大查看谁在那里。这张图主要是为了“效果”的目的。可排序的数据库提供所有真实信息。
      最近更新 更多