我有一个通常与Google Maps合作的同事,现在正在创建我的第一张地图。我正在使用他们过去开发的软件,并根据我的需要进行更改。他们创建了一个脚本,该脚本设置了一些地图默认设置,因此这就是为什么看起来可能略有不同的原因。
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文件未加载。我在控制台中没有任何错误。当我用不同的URL替换URL时,http://www.mankato-mn.gov/Maps/StreetConstruction/streetconstruction.ashx?id=122
它将正常工作。我的新Feed确实通过了验证。我的网络服务有问题吗?
更新:几天后,我仍然遇到问题。因此,我很确定这不再是DNS问题。我创建了一个jsFiddle来查看它是我的代码还是其他代码。我从Google的示例代码开始,然后将KML文件的URL更改为我的Web服务和所生成文件的静态版本。两者都是 有效的KML文件。都不起作用。如果存在语法错误,API不会报告该错误吗?
您可以通过以下方式获取KML层的状态:
kml.getStatus();
在这种情况下返回:
"INVALID_DOCUMENT"
现在,如果我从浏览器请求您的URL,我会得到
<Error>
<Message>An error has occurred.</Message>
</Error>
因此,似乎那里曾经有一个有效的KML,现在已经不存在了。根据您的问题,我可以猜测它超出了重量限制,或者您没有将其与有效的map实例相关联。
为了使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中使用的备用URL),我仍然得到INVALID DOCUMENT。
更新:似乎问题在于文件的编码(UTF-16 BE是二进制的)。我将其转换为utf-8并重新缩进了(现在在我的公共保管箱中)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句