我已经编写了一个R脚本来创建一个KML文件,下面生成的KML在Google地球中查看时加载icon18.png很好:
<kml xmlns:xsd="http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd" xmlns:xmlns="http://www.opengis.net/kml/2.2/" version="1.0">
<Document>
<name>Member locations</name>
<open>1</open>
<Folder>
<name>SpatialPointsDataFrame</name>
<Style id="pnt1">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/pal2/icon18.png</href>
</Icon>
</IconStyle>
<BalloonStyle>
<text>$[description]</text>
</BalloonStyle>
</Style>
<Placemark>
<name>1</name>
<styleUrl>#pnt1</styleUrl>
<Point>
<extrude>1</extrude>
<altitudeMode>clampToGround</altitudeMode>
<coordinates>151.26250,-33.89374,0</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
但是当使用maps API和以下代码加载到KmlLayer时,它会显示为默认的蓝色'泪滴'标记:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map_canvas { height: 100% }
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=mykey&sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(-34.397, 150.644),
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
var ctaLayer = new google.maps.KmlLayer('http://www.peter-johnson.com.au/test.kml');
ctaLayer.setMap(map);
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>
在这里查看其他问题我只能看到一些没有回复的代码,或者一些与公共网络服务器无关的代码。 有一些迹象表明存在问题现在可以了,所以我想支持将自定义图标加载到KmlLayer中,但我对KML格式或我加载它的方式有问题吗?
正如评论中所建议的,我刚刚将KML放在公开的可用区域中:
http://www.peter-johnson.com.au/test.kml
这是HTML:
答案 0 :(得分:2)
您发布的KML即使在我Google Maps之后也无法使用KmlLayer或validate
您的版本的架构无效(至少根据feedvalidator)
<强>更新强> 问题在于共享样式定义的位置。
Style定义在您拥有它的地方不起作用。 Shared styles看起来他们必须在文档中。