2011-08-15 70 views
0

我使用下面的代碼來顯示保存在MySQL數據庫中的每個位置的標記。谷歌地圖邊欄

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>All Locations</title> 
     <link rel="stylesheet" href="css/alllocationsstyle.css" type="text/css" media="all" /> 
     <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=en"></script> 
     <script type="text/javascript"> 
      var customIcons = { 
      0: { 
      icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png', 
      shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      }, 
      1: { 
      icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png', 
      shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png' 
      } 
      }; 

      function load() { 
      var map = new google.maps.Map(document.getElementById("map"), { 
      center: new google.maps.LatLng(54.312195845815246,-4.45948481875007), 
      zoom:6, 
      mapTypeId: 'roadmap' 
      }); 

      var infoWindow = new google.maps.InfoWindow; 

      // Change this depending on the name of your PHP file 
      downloadUrl("phpfile.php", function(data) { 
      var xml = data.responseXML; 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
      var locationname = markers[i].getAttribute("locationname"); 
      var address = markers[i].getAttribute("address"); 
      var finds = markers[i].getAttribute("finds"); 
      var totalfinds = markers[i].getAttribute("totalfinds"); 
      var point = new google.maps.LatLng( 
      parseFloat(markers[i].getAttribute("osgb36lat")), 
      parseFloat(markers[i].getAttribute("osgb36lon"))); 
      var html = locationname + ', No.of finds: ' + "<b>" + totalfinds + "</b>"; 
      var icon = customIcons[totalfinds] || {}; 
      var marker = new google.maps.Marker({   
      map: map, 
      position: point, 
      title: address, 
      icon: icon.icon, 
      shadow: icon.shadow 
      }); 
      bindInfoWindow(marker, map, infoWindow, html); 
      } 
      }); 
      } 

      function bindInfoWindow(marker, map, infoWindow, html) { 
      google.maps.event.addListener(marker, 'click', function() { 
      infoWindow.setContent(html); 
      infoWindow.open(map, marker); 
      }); 
      } 

      function downloadUrl(url, callback) { 
      var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

      request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request, request.status); 
      } 
      }; 

      request.open('GET', url, true); 
      request.send(null); 
      } 

      function doNothing() {} 

      </script> 
      </head> 

      <body onLoad="load()"> 
       <div id="map"></div> 
      </body> 
      </html> 

我現在希望能夠通過添加一個側邊欄擴展頁遠一點的功能,因此如果用戶點擊側邊欄的位置,它凸顯了選擇黃色背景和然後將地圖拖到相關標記的中心,在此處打開信息窗口。如果用戶點擊標記,我想要打開信息窗口並且側欄上的相關位置再次以黃色背景突出顯示。

我一直在研究這一段時間,我發現我想在這裏的側欄的確切類型http://econym.org.uk/gmap/example_map2c.html但問題是,這是在谷歌地圖API的v2。

我只是想知道是否有人可能會請我看看我需要做些什麼來完成這項工作。

更新的代碼

<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>All locations</title> 

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 

</head> 
<div id="map_canvas" style="width: 900px;height: 600px;"> 
</div> <div id="locations"></div> 

<body onload="showLocations()"> 

<script> 
    var map; 
var markers = new Array(); 


function showLocations() { 
downloadUrl("phpfile.php", function(data) { 
    var xml = data.responseXML; 
    markers = xml.documentElement.getElementsByTagName("marker"); 

    for (var i = 0; i < markers.length; i++) { 
     var locationname = markers[i].getAttribute("locationname"); 

     markerId = "id_"+i; 

     location_list += "<div id="+markerId+">"+locationname+"</div>"; 
    }   

    document.getElementById("location_list").innerHTML = location_list; 

    initialize_member_map("lang") 
    }); 
} 

function initialize_member_map(lang) { 
    map = new google.maps.Map(document.getElementById("map-canvas"), { 
    center: new google.maps.LatLng(54.312195845815246,-4.45948481875007), 
    zoom: 6, 
    mapTypeId: 'roadmap' 
    }); 

    var xml = data.responseXML; 

    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0; i < markers.length; i++) { 
     var infoWindow = new google.maps.InfoWindow; 
     var locationname = markers[i].getAttribute("locationname"); 
     var address = markers[i].getAttribute("address"); 
     var locationid = markers[i].getAttribute("locationid"); 
     var point = new google.maps.LatLng( 
      parseFloat(markers[i].getAttribute("osgb36lat")), 
      parseFloat(markers[i].getAttribute("osgb36lon"))); 
     var html = "<b>" + locationname + "</b> <br/>" + address; 
     bounds.extend(point); 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     locationid: locationid 
     }); 

     markerId = "id_"+i; 
     bindInfoWindow(gmarker, map, infoWindow, html, markerId); 

    }   
    map.setCenter(bounds.getCenter()); 
    map.fitBounds(bounds); 


} 

function scrollToMarker(index) { 
    map.panTo(gmarkers[index].getPosition()); 
} 

function bindInfoWindow(marker, map, infoWindow, html, markerId) { 
    google.maps.event.addListener(marker, 'click', function() { 
    infoWindow.setContent(html); 
    infoWindow.open(map, marker); 
    }); 
    markerObj = document.getElementById(markerId); 
    google.maps.event.addDomListener(markerObj, 'click', function() { 
    infoWindow.setContent(html); 
    infoWindow.open(map, marker); 
    map.panTo(marker.getPosition()); 
    }); 

} 

function downloadUrl(url, callback) { 
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     request.onreadystatechange = doNothing; 
     callback(request, request.status); 
    } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 
} 
function doNothing(){ 
} 

</script> 
</body> 
</html> 

回答

1

我的建議是在尋找第一documentation那裏你可以找到例子和教程,然後go to google playgorund具有活生生的實例。完全有可能製作側邊欄,唯一需要考慮的是側邊欄位於地圖的內部還是外部,操場的鏈接中我是讓您自己控制的示例。要存儲數據,您需要了解如何通過ajax進行異步調用以保存位置

+0

嗨,非常感謝您花時間回覆我的帖子。我已經看過Google網站上的文檔以及通過在互聯網上搜索的許多示例,儘管從初學者的角度來看,我發現有點難以理解,這就是我來到這裏的原因。親切的問候。 Chris – IRHM

+0

嗨,我想知道有人能否幫助我。我已經找到了我希望在本論壇上解決我的問題的方法:http://stackoverflow.com/questions/4904549/open-infowindow-of-specific-marker-from-outside-google-maps-v3。我已經修改了這個以適合我的數據,顯示爲我原始文章的更新。然而,當我運行這個時,我收到以下錯誤'對象預期在第33行字符7.我檢查了這與原始,我找不出問題是什麼。有人可能請看看這個,看看我哪裏出錯了。非常感謝和問候克里斯 – IRHM