2010-08-18 88 views
50

我創建了一個Hello World程序加載本地KML文件(從谷歌的文檔借用):使用Google地圖加載本地.kml文件?

var ctaLayer = new google.maps.KmlLayer("http://localhost:8080/kml/cta.kml"); 

這不工作(沒有被加載)。

然而,當我把上面一行:

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

它正常加載。兩個kml文件是相同的。我自己提供服務時需要做些什麼來加載它? (我試過絕對和相對路徑,我知道我現在用的路徑是正確的......)

而且我加入了正確的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> 

但它仍然不加載。

我發現這在谷歌的docs

的谷歌地圖API支持用於顯示地理信息的KML和GeoRSS數據格式。這些數據格式使用KmlLayer對象顯示在地圖上,KmlLayer對象的構造函數接受可公開訪問的KML或GeoRSS文件的URL。

所以,我想什麼,我試圖做的是可能沒有從公開訪問的網址服務的KML ......除非有人能夠證明否則

+0

當您在瀏覽器中訪問本地KML URL時會發生什麼情況? – 2012-08-25 11:58:45

回答

53

的KML無法訪問,因爲它是在您的本地機器和谷歌無法訪問,因爲它不知道如何到達本地主機:8080

+3

這是正確的,谷歌需要能夠訪問它。我們遇到了同樣的問題,因爲我們不希望公開我們的KML文件。遠程API訪問KML文件,因此它不能是本地的,它必須在網上發佈。 – Kezzer 2010-09-23 12:47:48

+0

@KieranSenior您可以在創建kml時讓您的kml可以私密訪問。在隱私設置下,有兩個選項可供公開和未列出。 – 2013-06-28 06:38:05

+1

好吧...難怪我無法找到KmlLayer的「rawData」(而不是「url」)選項。 – targnation 2014-03-31 23:45:44

35

不幸的是,你不能使用「本地主機」。您有兩種選擇:

  1. 將kml放置在公開可用的域中。 (如果谷歌無法訪問它,它將無法正常工作)
  2. 使用geoxml3,它基本上做了谷歌的工作,但允許你下載和主持解析器JS文件你自己。它將允許您加載LOCALHOST KML並將其解析出來(可通過JSON訪問的對象)(http://code.google.com/p/geoxml3/)。

對於那些在防務合同中工作並處理敏感信息的人來說,選擇#1可能不是一種選擇,因爲kml會在後臺發送到谷歌並在地圖上呈現。

+2

爲我工作,使用[geoxml3](http://code.google.com/p/geoxml3/) – 2014-08-19 14:55:02

17

This website要求您將整個KML文件複製/粘貼到網站中。 或者,您可以使用Dropbox來使用公用文件夾託管KML文件。在公共Dropbox文件夾中有一個右鍵單擊的上下文菜單,允許您複製該URL。

+1

此網站在2017年不再可用。 – 2017-08-17 16:27:09

+0

我不認爲Dropbox允許在此上下文中託管文件要麼:\ – Ragaar 2017-08-18 05:33:10