2010-08-18 26 views
50

J'ai créé un programme mondial de bonjour pour charger un fichier kml local (emprunté à docs de google):Chargement d'un fichier .kml local à l'aide de google maps?

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

Cela ne fonctionne pas (rien ne se charge).

Cependant, quand je change cette ligne à:

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

il charge correctement. Les deux fichiers kml sont identiques. Que dois-je faire pour le charger lorsque je le sers moi-même? (J'ai essayé deux chemins absolus et relatifs, et je sais que les chemins que je me sers sont corrects ...)

I a également ajouté le type MIME correct à mon fichier de configuration de serveur d'applications:

<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> 

Mais encore ne charge pas.

Je trouve cela dans docs de google:

L'API Google Maps prend en charge les formats de données KML et GeoRSS pour afficher des informations géographiques. Ces formats de données sont affichés sur une carte à l'aide d'un objet KmlLayer, dont le constructeur prend l'URL d'un fichier KML ou GeoRSS accessible au public.

donc je suppose que ce que je suis en train de faire est pas possible sans au service de la kml d'une URL accessible au public ... à moins que quelqu'un peut prouver le contraire

+0

ce qui se passe lorsque vous visitez l'URL locale KML dans le navigateur? –

Répondre

53

Le KML ne peut pas être accessible car il est sur votre machine locale et Google ne peut pas accéder à ce, car il ne sait pas comment se rendre à localhost: 8080

+3

Ceci est correct, google doit pouvoir y accéder. Nous avons eu le même problème, car nous ne voulions pas que nos fichiers KML soient accessibles au public. L'API distante accède au fichier KML, elle ne peut donc pas être locale, elle doit être publiée sur le web. – Kezzer

+0

@KieranSenior vous pouvez faire votre kml pour être accessible en privé au moment de la création kml .. Sous confidentialité Configuration deux options publiques et non cotées. –

+1

bien l'enfer ...pas étonnant que je ne pouvais pas trouver une option "rawData" (par opposition à "url") pour KmlLayer. – targnation

35

Malheureusement, vous ne pouvez pas utiliser « localhost ». Vous avez deux choix:

  1. Placez le kml sur un domaine public. (Si Google ne peut pas y accéder, il ne fonctionnera pas)
  2. Utilisez geoxml3 qui fait essentiellement ce que fait Google, mais vous permet de downlaod et d'héberger l'analyseur fichier JS youself. Il vous permettra de charger un fichier KML LOCALHOST et de l'analyser pour vous (objets accessibles via JSON) (http://code.google.com/p/geoxml3/).

choix # 1 pourrait ne pas être une option pour ceux qui travaillent sur les contrats de défense et de traiter des informations sensibles comme kml est envoyée à Google en arrière-plan et rendu sur la carte.

+2

Travaillez pour moi, utilisez [geoxml3] (http://code.google.com/p/geoxml3/) –

17

This website exige que vous copiez/collez l'intégralité du fichier KML dans le site. Vous pouvez également utiliser Dropbox pour héberger le fichier KML à l'aide de votre dossier public. Dans le dossier public Dropbox, il y a un menu contextuel qui vous permet de copier l'URL.

+1

Ce site web n'est plus utilisable à partir de 2017. –

+0

Je ne pense pas que Dropbox permette l'hébergement de fichiers dans ce contexte non plus :\ – Ragaar