Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps 程序生成的KML文件会验证,但不会';行不通_Google Maps_Google Maps Api 3 - Fatal编程技术网

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替换为其他url
http://www.mankato-mn.gov/Maps/StreetConstruction/streetconstruction.ashx?id=122
它很好用。我的新feed确实有效。我的web服务有问题吗


更新:几天后,我仍然有这个问题。所以我很确定这不再是DNS问题了。我创建了一个脚本来查看它是我的代码还是其他东西。我从开始,将KML文件的URL更改为我的web服务和生成文件的静态版本。两个KML文件。两者都不起作用。如果出现语法错误,API是否会报告?

您可以通过以下方式检查DNS是否已设置:

  • 转到浏览器中的url。在清空缓存并删除历史记录的情况下执行此操作(最好使用私有模式)。如果它最终出现在您的服务器和正确的文件中,则不是DNS问题
  • 将文件移动到您确定可以访问且没有任何DNS问题的位置。e、 g

  • 如果问题仍然存在,请确保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());
    });