Google maps 程序生成的KML文件会验证,但不会';行不通
我有一个同事通常与谷歌地图合作,现在我正在创建我的第一张地图。我正在使用他们在过去开发的东西,并根据我的需要进行更改。他们创建了一个脚本来设置一些地图默认值,这就是为什么事情看起来可能略有不同Google maps 程序生成的KML文件会验证,但不会';行不通,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我有一个同事通常与谷歌地图合作,现在我正在创建我的第一张地图。我正在使用他们在过去开发的东西,并根据我的需要进行更改。他们创建了一个脚本来设置一些地图默认值,这就是为什么事情看起来可能略有不同 var map = new Map(); map.loadMap(); var kml = new google.maps.KmlLayer({ url: 'http://api.mankatomn.gov/api/engineeringprojectskml', suppressInfoWindows:
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替换为其他urlhttp://www.mankato-mn.gov/Maps/StreetConstruction/streetconstruction.ashx?id=122
它很好用。我的新feed确实有效。我的web服务有问题吗
更新:几天后,我仍然有这个问题。所以我很确定这不再是DNS问题了。我创建了一个脚本来查看它是我的代码还是其他东西。我从开始,将KML文件的URL更改为我的web服务和生成文件的静态版本。两个KML文件。两者都不起作用。如果出现语法错误,API是否会报告?您可以通过以下方式检查DNS是否已设置:
如果问题仍然存在,请确保KML语法和Javascript 100%正确。如果您仍然有任何问题,也可以查看。您可以使用
kml.getStatus();
在这种情况下,返回:
"INVALID_DOCUMENT"
现在,如果我从浏览器请求你的URL,我会得到
<Error>
<Message>An error has occurred.</Message>
</Error>
在这种情况下(请注意,我使用的是您在JSFIDLE中使用的替代URL),仍然会得到无效的文档
更新:问题似乎是文件的编码(UTF-16 BE是二进制的)。我将其转换为utf-8并重新插入()
您测试DNS的方法存在的问题是,我们的ISP托管我们的DNS。因此,我们保证它能正常工作。我不能为世界其他地方担保。说它是可视的,但我也知道,完全保护有时需要3天。移动“文件”是不可能的。我正在使用ASP.NET WebApi发布动态生成的文件。旧站点不支持该功能。服务器:google-public-dns-a.google.com |地址:8.8.8.8 |非权威答案:Name:api.mankatomn.gov |地址:216.114.254.155这是谷歌公共dns。也许您可以尝试使用IP地址访问KML?服务器需要域路由到正确的应用程序。如果你有权访问shell或其他工具,你可以尝试从应用程序运行的服务器上进行DNS查找(nslookup)。这将确认您的服务器是否可以找到域。您的KML使用了错误的MIME类型。看见内容(如果我从我的服务器下载并提供)我是在复制其他服务。我知道MIME类型还需要更改。这两种方法都不起作用。我修复了服务,在您测试时我尝试了其他方法。当我在玩
getStatus()
时,我变得没有定义。没有太多帮助。我想getStatus不会同步工作,请查看我编辑的答案。谢谢帮助!这就是问题所在。我改变了它,认为这可以修复验证,但它破坏了它。
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());
});