使用Google Maps API时,有没有办法在KML文件中创建“侧边栏”?
我正在使用以下内容在地图上加载标记:
var myMarkerLayer = new google.maps.KmlLayer('http://example.com/WestCoast.kml');
到目前为止,这种方法效果很好,但是如何获取数据并循环显示这些数据呢?
如果可能的话,我想避免使用第三方库 - 虽然jQuery没问题。
答案 0 :(得分:7)
KML只是一个XML文档,因此您可以使用jQuery处理它以提取所需的数据。您可以将坐标和地名存储在本地数组中,并将此数据用于您想要的任何目的,例如。当用户点击侧边栏上的地名时,您可以使用它导航到地图上的某个点。
下面是一个关于如何处理KML文件并根据文件中的数据实现导航的示例。请注意我不会对大型KML文件执行此操作,因为它会使加载时间加倍(浏览器必须加载文件以处理功能)...
<script type="text/javascript" src= "http://maps.google.com/maps/api/js?sensor=false">
</script>
<script src="../js/jquery-1.4.2.min.js">
</script>
<script>
var map;
var nav = [];
$(document).ready(function(){
//initialise a map
init();
$.get("kml.xml", function(data){
html = "";
//loop through placemarks tags
$(data).find("Placemark").each(function(index, value){
//get coordinates and place name
coords = $(this).find("coordinates").text();
place = $(this).find("name").text();
//store as JSON
c = coords.split(",")
nav.push({
"place": place,
"lat": c[0],
"lng": c[1]
})
//output as a navigation
html += "<li>" + place + "</li>";
})
//output as a navigation
$(".navigation").append(html);
//bind clicks on your navigation to scroll to a placemark
$(".navigation li").bind("click", function(){
panToPoint = new google.maps.LatLng(nav[$(this).index()].lng, nav[$(this).index()].lat)
map.panTo(panToPoint);
})
});
function init(){
var latlng = new google.maps.LatLng(-43.552965, 172.47315);
var myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);
}
})
</script>
<html>
<body>
<div id="map" style="width:600px;height: 600px;">
</div>
<ul class="navigation">
</ul>
</body>
</html>
答案 1 :(得分:5)
这是不可能的。检查文档: http://code.google.com/apis/maps/documentation/javascript/overlays.html#KMLLayers
在“KML特征数据”下:
由于KML可能包含大量功能,因此您可能无法直接从KmlLayer对象访问功能数据。相反,随着功能的显示,它们将呈现为可点击的Maps API叠加层。