【问题标题】:Display markers in the polygon I zoomed to在我放大到的多边形中显示标记
【发布时间】:2013-03-01 21:50:54
【问题描述】:

这是我的example.

我添加了一些代码,当页面加载时,可以只看到多边形,这很好,但是当我用这个函数缩放到多边形时,我得到了所有标记,但我的梦想是只得到我放大到的多边形中的标记所以我需要用 containsLocation 解决这个问题,但不知道如何。

function kmlShowPlacemark(pm) {
    if (geoXmlDoc.placemarks[pm].polygon) {
        map.fitBounds(geoXmlDoc.placemarks[pm].polygon.bounds);
        addMarker(45.374632, 14.425697,'<b>93 Feet East</b><br/>150 Brick Lane, London  E1 6RU&lt;br/&gt;7 Dec 2010 : Jenny &amp; Johnny&lt;br/&gt;');
        addMarker(45.374632, 14.425697,'<b>93 Feet East</b><br/>150 Brick Lane, London  E1 6RU&lt;br/&gt;7 Dec 2010 : Jenny &amp; Johnny&lt;br/&gt;');
        addMarker(45.348674, 14.386749,'<b>Adelphi Theatre</b><br/>The Strand, London  WC2E 7NA&lt;br/&gt;11 Oct 2010 : Love Never Dies');
        addMarker(45.35051, 14.351883,'<b>Adelphi Theatre</b><br/>The Strand, London  WC2E 7NA&lt;br/&gt;11 Oct 2010 : Love Never Dies');
        addMarker(45.319618, 14.501915,'<b>Albany, The</b><br/>240 Gt. Portland Street, London  W1W 5QU');
        addMarker(45.339893, 14.475479,'<b>Aldwych Theatre</b><br/>Aldwych, London  WC2B 4DF&lt;br/&gt;11 Oct 2010 : Dirty Dancing');
        addMarker(45.343513, 14.436684,'<b>Alexandra Palace</b><br/>Wood Green, London  N22&lt;br/&gt;30 Oct 2010 : Lynx All-Nighter');
        addMarker(45.330736, 14.434211,'<b>Stan F.La Guardia 10</b><br/>Najbolji stan na svijetu');
        addMarker(45.385431, 14.357071,'<b>sdas</b><br/>dfsada');
     } 
for (var i=0;i<geoXmlDoc.placemarks.length;i++) {
 var placemark = geoXmlDoc.placemarks[i];
 if (i == pm) {
   if (placemark.polygon) placemark.polygon.setMap(null);
   if (placemark.polyline) placemark.polyline.setMap(map);

 } else {
   if (placemark.polygon) placemark.polygon.setMap(map);
   if (placemark.polyline) placemark.polyline.setMap(null);
   }
}
}

下一个问题部分解决了。当你按下显示所有多边形(Prikaži sve kvartove)时,它被称为函数 showAll,它向你显示所有多边形,但它必须向你显示所有没有标记的多边形。我尝试了两种方法,但它对我不起作用 marker.setVisible(false);和marker.setMap(null);然后我加载基本页面 top.location="test2.php";如何更好地解决这个问题?

function showAll() {
    top.location="test2.php";
    map.fitBounds(geoXmlDoc.bounds); //show all bounds
    map.setZoom(13);
   //marker.setVisible(false);
   //marker.setMap(null); 
   for (var i=0;i<geoXmlDoc.placemarks.length;i++) {
       var placemark = geoXmlDoc.placemarks[i];
       if (placemark.polygon) placemark.polygon.setMap(map);
       if (placemark.polyline) placemark.polyline.setMap(map);
   }
 }

我试图隐藏标记,但我的方式并不好,因为在我的方式之后我看不到任何标记,这是我的做法:

function hideMarkers(){
    for(var i=0; i<hmarkers.length; i++){
        hmarkers[i].setVisible(false);
    }
}    
<?
    $query = mysql_query("SELECT * FROM poi_example");
    while ($row = mysql_fetch_array($query)){
    $name=$row['name'];
    $lat=$row['lat'];
    $lon=$row['lon'];
    $desc=$row['desc'];
    echo ("addMarker($lat, $lon,'<b>$name</b><br/>$desc');\n");
    echo 'hideMarkers();'
    }
?>

【问题讨论】:

    标签: javascript xml google-maps-api-3 google-maps-markers polygons


    【解决方案1】:

    我建议在开始时将所有标记添加到地图中(但隐藏它们),将对它们的引用保存在数组中。然后当点击多边形时,通过数组测试google.maps.geometry.poly.containsLocation是否为真:

    function kmlShowPlacemark(pm) {
      if (geoXmlDoc.placemarks[pm].polygon) {
        map.fitBounds(geoXmlDoc.placemarks[pm].polygon.bounds);
        for (var i=0;i<gmarkers.length;i++) {
          if (google.maps.geometry.poly.containsLocation(gmarkers[i].getPosition(),geoXmlDoc.placemarks[pm].polygon)) {
             gmarkers[i].setMap(map);
          } else {
             gmarkers[i].setMap(null);
          }
        }
      } 
    
       for (var i=0;i<geoXmlDoc.placemarks.length;i++) {
         var placemark = geoXmlDoc.placemarks[i];
         if (i == pm) {
           if (placemark.polygon) placemark.polygon.setMap(null);
           if (placemark.polyline) placemark.polyline.setMap(map);
    
         } else {
           if (placemark.polygon) placemark.polygon.setMap(map);
           if (placemark.polyline) placemark.polyline.setMap(null);
           }
       }
    }
    

    (注意:下面的示例没有隐藏要开始的标记,因为我想知道它们在哪里,单击多边形会隐藏多边形外部的所有标记并(再次)显示其中的标记) working example

    要在第一次添加标记时隐藏标记,请从 addMarker 函数中删除“地图”选项:

    function addMarker(lat, lng, info) {
        var pt = new google.maps.LatLng(lat, lng);
        bounds.extend(pt);
    
        var marker = new google.maps.Marker({
            position: pt,
            icon: icon
        });
    // rest of the code stays the same.
    

    【讨论】:

    • 单击多边形时效果很好,无法在开始时隐藏而不是在单击多边形后显示?
    • 我试图隐藏标记(检查我的问题),但是当我单击多边形时它不起作用,标记仍然隐藏
    • 在我的回答中添加了如何做到这一点。
    • 下一步是通过数据库为标记建立输入表单。认为这对我来说很容易。但是还有一件事在我脑海中:当您单击某个多边形时,您会看到带有这些多边形名称的信息窗口,可以在此信息窗口中放入该多边形内的标记数量(与标记簇编号相同)或放入此数字(标记簇号)在多边形上?
    • 这是一个不同的问题。对的,这是可能的。对于您的每个多边形,通过标记数组计算包含的数字,将该数字与多边形相关联并显示它。
    猜你喜欢
    • 2019-04-20
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 2013-08-24
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多