我有一个通常与谷歌地图合作的同事,现在我正在制作我的第一张地图。我正在使用他们过去开发的东西并根据我的需要进行更改。他们创建了一个脚本来设置一些地图默认值,这就是为什么事情可能会略有不同。
var map = new Map();
map.loadMap();
var kml = new google.maps.KmlLayer({ url: 'http://api.mankatomn.gov/api/engineeringprojectskml', suppressInfoWindows: true });
kml.setMap(map.map);
地图加载。我的KML文件无法加载。我在控制台中没有出现任何错误。当我用不同的网址http://www.mankato-mn.gov/Maps/StreetConstruction/streetconstruction.ashx?id=122
替换网址时,它会正常工作。我的新Feed确实有效。我的网络服务有问题吗?
更新:几天后,我仍然遇到了这个问题。所以我很确定这不再是DNS问题了。我创建了一个jsFiddle来查看它是否是我的代码或其他内容。我从Google's sample code开始,将KML文件的URL更改为我的Web服务和生成文件的静态版本。这两个are valid个KML文件。都没有工作。如果出现语法错误,API是否会报告?
答案 0 :(得分:1)
您可以使用
获取KML图层的状态kml.getStatus();
在这种情况下返回:
"INVALID_DOCUMENT"
现在,如果我从浏览器请求您的网址,我会
<Error>
<Message>An error has occurred.</Message>
</Error>
所以似乎那里有一个有效的KML,它已经不存在了。假设从你的问题我可以猜测它超过了重量限制,或者你没有将它与有效的地图实例相关联。
要让getStatus返回有用的内容,您必须等待Google Maps API尝试加载您声明的KML图层。例如,您可以在status_changed事件上添加侦听器。
var kmloptions={
url: 'https://dl.dropboxusercontent.com/u/2732434/engineeringprojectskml.kml',
suppressInfoWindows: true
};
var newKml = new google.maps.KmlLayer(kmloptions);
newKml.setMap(map);
google.maps.event.addListenerOnce(newKml, 'status_changed', function () {
console.log('KML status is', newKml.getStatus());
});
在这种情况下(请注意我使用您在jsFiddle中使用的替代网址),我仍然会收到无效文档。
更新:问题似乎是文件的编码(UTF-16 BE意味着是二进制)。我将它转换为utf-8并重新缩进(it's in my public dropbox now)
答案 1 :(得分:0)
您可以通过以下方式检查DNS是否已设置:
如果问题仍然存在,请确保您的KML语法和Javascript 100%正确。如果您还有任何问题,请查看https://developers.google.com/maps/documentation/javascript/examples/layer-kml。