使用谷歌地图加载本地.kml文件?

hdd*_*ddd 52 gis kml kmz google-maps-api-3

我创建了一个hello world程序来加载一个本地kml文件(借用谷歌的文档):

var ctaLayer = new google.maps.KmlLayer("http://localhost:8080/kml/cta.kml");
Run Code Online (Sandbox Code Playgroud)

这不起作用(没有任何东西被加载).

但是,当我将该行更改为:

  var ctaLayer = new google.maps.KmlLayer("http://gmaps-samples.googlecode.com/svn/trunk/ggeoxml/cta.kml");
Run Code Online (Sandbox Code Playgroud)

它正确加载.两个kml文件都是相同的.在自己提供服务时,我需要做些什么来加载它?(我尝试了绝对和相对路径,我知道我使用的路径是正确的......)

我还在我的appserver的配置文件中添加了正确的mime类型:

<mime-mapping>
    <extension>kml</extension>
<mime-type>application/vnd.google-earth.kml+xml</mime-type>
</mime-mapping>
<mime-mapping>
    <extension>kmz</extension>
    <mime-type>application/vnd.google-earth.kmz</mime-type>
</mime-mapping>
Run Code Online (Sandbox Code Playgroud)

但它仍然没有加载.

我在谷歌的文档中发现了这个:

Google Maps API支持用于显示地理信息的KML和GeoRSS数据格式.这些数据格式使用KmlLayer对象显示在地图上,该对象的构造函数采用可公开访问的KML或GeoRSS文件的URL.

所以,我想什么,我试图做的是没有可能的,而不从公开访问的网址服务的KML ......除非有人能够证明否则

Mar*_*phy 56

KML无法访问,因为它位于您的本地计算机上,谷歌无法访问,因为它不知道如何访问localhost:8080

  • 这是正确的,谷歌需要能够访问它.我们遇到了同样的问题,因为我们不希望公众可以访问我们的KML文件.远程API访问KML文件,因此它不能是本地的,必须在Web上发布. (3认同)

cap*_*gon 39

不幸的是你不能使用"localhost".你有两个选择:

  1. 将kml放在公共可用域上.(如果谷歌无法访问它,它将无法正常工作)
  2. 使用geoxml3,它基本上做谷歌做的,但允许你自己下载和托管解析器JS文件.它将允许您加载LOCALHOST KML并为您解析(可通过JSON访问的对象)(http://code.google.com/p/geoxml3/).

对于那些从事国防合同并处理敏感信息的人来说,选择#1可能不是一个选项,因为kml会在后台发送到谷歌并在地图上呈现.


Rag*_*aar 17

此网站display-kml.appspot.com要求您将整个KML文件复制/粘贴到网站中.或者,您可以使用Dropbox使用公用文件夹托管KML文件.在公共Dropbox文件夹中,有一个右键单击上下文菜单,允许您复制URL.

更新:

appspot网站有不稳定的历史.截至2019年1月,该网站似乎正在运作.

参考文献:
  1. http://display-kml.appspot.com/
  2. https://www.dropbox.com/

  • 自2017年起,该网站不再可用. (2认同)