【问题标题】:Can not load kml files which was in my local server?无法加载本地服务器中的 kml 文件?
【发布时间】:2014-02-10 14:25:10
【问题描述】:

尝试在我的应用程序中加载以下 KML 文件。我可以从浏览器本身访问该文件。但该文件未在谷歌地图中呈现。尝试检查 KML 图层状态,得到一个奇怪的结果为 "undefined"。我不知道我错过了什么。请帮我用谷歌地图学习KML层。

有趣的事实: Kml 图层已在谷歌地图中呈现,如果我使用了谷歌的 KML url http://gmaps-samples.googlecode.com/svn/trunk/ggeoxml/cta.kml 。我不知道为什么谷歌地图从谷歌服务器渲染 KML 图层。以及为什么它没有从我的服务器渲染 KML 层 (http://www.mylocalIPAddress.com/WebModule/polygon.kml)。但我确信没有任何东西阻止我的 KML 文件。如果我在浏览器中点击了 URL。我可以查看文件。所以没有什么会阻止文件。但不知道为什么我无法加载我的 kml 文件。

KML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <ScreenOverlay>
    <name>Absolute Positioning: Top left</name>
    <Icon>
      <href>http://developers.google.com/kml/documentation/images/top_left.jpg</href>
    </Icon>
    <overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
    <screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
    <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
    <size x="0" y="0" xunits="fraction" yunits="fraction"/>
  </ScreenOverlay>
</kml>

JavaScript:

google.maps.visualRefresh = true;
var map;
function initialize() {
    // Specifies the google Map properties
    map = new google.maps.Map(document.getElementById('map-canvas'), {
        zoom : 3,
        center : new google.maps.LatLng(0, 0),
        mapTypeId : google.maps.MapTypeId.ROADMAP
    });
    var layer   =   new google.maps.KmlLayer('http://www.mylocalIPAddress.com/WebModule/polygon.kml');
    layer.setMap(map);
    console.log(layer.getStatus());
}
google.maps.event.addDomListener(window, 'load', initialize);

** 特别提示:** 检查谷歌链接的响应时,我得到以下内容

 _xdc_._nox6ih && _xdc_._nox6ih( [0,"kml:cOyYrFGigX5u4USCpzso8ggEWKR7NP4TNfjRaORI","|ks:;dc:tb;ts:46343661|kv:3|api:3",["Chicago Transit Map","Chicago Transit Authority train lines","Chicago Transit Authority train lines"],[[41.721877,-87.8929],[42.072787,-87.606048]],[["gfd29185067c55f5f"],["g5e295bda04f08836"],["ga24949030bee7e8c"],["g55e98e4a4c0ba15f"],["g51d583df1e7a5451"],["g72b37441838ae58e"],["g4da782bd5142613c"],["ge63204f1f8e4087a"]],1,[["client","2"]],42,[["ks",";dc:tb;ts:46343661"],["kv","3"],["api","3"]]] )

当我再次检查服务器的响应时,我得到了以下信息

_xdc_._ghavva && _xdc_._ghavva( [0,null,null,null,null,null,4,[["client","2"]]] )

我不知道为什么我得到 null 作为响应。我相信由于空响应,谷歌地图无法呈现 KML 文件。

【问题讨论】:

  • 所以没有任何东西阻止文件你怎么能确定? 该文件必须对所有人公开。当您能够从您的计算机加载该文件时,并不意味着所有人都可以访问该文件。检查您的防火墙设置,通常防火墙应该阻止此类请求(但可能允许来自您自己的网络)

标签: javascript google-maps google-maps-api-3 google-maps-markers kml


【解决方案1】:

通过解析geoxml3.js库解决了这个问题。

将 kml 文件更改为 xml 文件。并使用 geoxml3 库解析 xml 文件。现在我可以在我的应用程序中加载 KML 文件了。

我解析的脚本如下。

var geoXml = new geoXML3.parser({
     map: map,
     singleInfoWindow: true
     });
geoXml.parse('polygon.xml');

提示 我不知道这是否可以解决。但它解决了我的问题。请通过您宝贵的cmets指导我是否正确。

【讨论】:

    【解决方案2】:

    您是否在服务器上添加了 KML 的 MIME 类型?

    尝试添加到您的 .htaccess 文件中:

    AddType application/vnd.google-earth.kml+xml    kml
    AddType application/vnd.google-earth.kmz        kmz
    

    【讨论】:

    • 我使用 JBoss 作为我的服务器。能否请您分享一下 JBoss 服务器中 .htaccess 的文件名。
    • 抱歉,我只使用过 Apache 服务器。此页面在第 3 篇文章中为您提供了可能的解决方案,但它是从 2009 年开始的,可能已经过时。祝你好运! community.jboss.org/thread/…
    • 感谢您的回复。我正在按照你的方式工作。如果我解决了问题,我会发布一次结果。
    • 在 IIS 中托管时,您必须手动添加这些 MIME 类型才能使本地 KMZ 文件正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2011-03-31
    • 2021-03-25
    相关资源
    最近更新 更多