我需要将自定义kml文件加载到Google Map中,代码与相应的资源几乎没有变化:
function initialize() {
var myLatlng = new google.maps.LatLng(39.397, -100.644);
var myOptions = {
zoom: 5,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
var geoXml = new geoXML3.parser({map: map, processStyles: true});
geoXml.parse('test.kml');
};
.kml直接来自谷歌地图,并有一堆标记,都带有自定义图标,例如:
<Style id="sn_1">
<IconStyle>
<scale>1.1</scale>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/Z.png</href>
</Icon>
<hotSpot x="32" y="1" xunits="pixels" yunits="pixels"/>
</IconStyle>
<ListStyle>
<ItemIcon>
<href>http://maps.google.com/mapfiles/kml/paddle/Z-lv.png</href>
</ItemIcon>
</ListStyle>
</Style>
其他图标被定义为(现有的)本地路径,例如:
<Icon>
<href>img/marker/5.png</href>
</Icon>
然而,虽然地图显示得很好,但没有一个图标被加载,而是我只获得默认的Google地图图标。任何有关这方面的帮助都将非常感激,因为我的JavaScript知识非常有限,而且我觉得我正处于一个更多的头脑不会让我无处可寻的地方......
干杯:)
答案 0 :(得分:2)
grigno 提供的答案对我来说效果很好,但KML文件中的所有标记都必须具有这样的样式,或者在传递之前检查 placemark.style.icon 是否未定义功能:
<Document>
<name>myKml.kml</name>
<Style id="My_Style">
<IconStyle>
<Icon>
<href>office-building.png</href>
</Icon>
</IconStyle>
</Style>
并在地标部分:
<Placemark>
<name><![CDATA[iMEX0011]]></name>
<description><![CDATA[MARKER TITLE]]></description>
<styleUrl>#My_Style</styleUrl>
<Point>
<coordinates>-99.2232472,25.4413972,0</coordinates>
</Point>
</Placemark>
答案 1 :(得分:1)
我用tis代码解决了:
var marker = new google.maps.Marker({position:point,icon:placemark.style.icon});
这是完整的初始化:
//Construct a geoXML3 parser
var myParser = new geoXML3.parser({
map: map,
singleInfoWindow:true,
processStyles: true,
createMarker:function(placemark){
//Constructing marker for each Placemark node, and then add it to the markclustere
var point = new google.maps.LatLng(placemark.point.lat, placemark.point.lng);
var marker = new google.maps.Marker({position:point,icon: placemark.style.icon});
google.maps.event.addListener(marker, "click", function(){
//console.log(placemark.name);
infoWindow.content = placemark.description;
infoWindow.open(map, marker);
});
markerclusterer.addMarker(marker);
}
});