1

これが私の例です。

コードを追加すると、ページが読み込まれるとポリゴンだけが表示されますが、この関数でポリゴンにズームするとすべてのマーカーが表示されますが、私の夢はズームしたポリゴンのマーカーだけを取得することでした。 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žisve kvartove)を押すと、関数showAllと呼ばれ、すべてのポリゴンが表示されますが、マーカーなしですべてのポリゴンが表示される必要があります。2つの方法を試しましたが、うまくいきません。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();'
    }
?>
4

1 に答える 1

0

最初にすべてのマーカーをマップに追加して(ただし、非表示にして)、それらへの参照を配列に保持することをお勧めします。次に、ポリゴンをクリックしたときに、google.maps.geometry.poly.containsLocationがtrueであるかどうかを配列テストで処理します。

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);
       }
   }
}

(注:以下の例では、開始するマーカーが非表示になりません。マーカーがどこにあるかを知りたかったので、ポリゴンをクリックすると、ポリゴンの外側のすべてのマーカーが非表示になり、(再び)その内側のマーカーが表示されます) 実際の例

が最初に追加されたときにマーカーを非表示にするには、addMarker関数から「map」オプションを削除します。

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.
于 2013-03-13T20:38:34.803 に答える