#1 Tue 15 April 2014 23:18
- Zventibald
- Participant occasionnel
- Date d'inscription: 7 Sep 2012
- Messages: 47
insérer kml dans OpenLayers
Bonsoir à tous,
Débutant en Webmapping, j'ai créé une petite carte avec OpenLayers et parviens à y afficher deux couches WMS superposées. Par contre, au moment d'y ajouter une couche kml, rien à faire: non seulement elle ne s'affiche pas, mais le fait de l'insérer dans mon code fait disparaître toutes les autres! Après plusieurs heures passées sur Internet, je me suis rendu compte que je n'étais pas le seul à avoir eu ce problème, mais n'ai pas trouvé la solution adaptée à mon cas. Voici donc comment j'en suis arrivé là, en espérant que quelqu'un ait des lumières:
1. j'ai créé un fichier html contenant ceci:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html><head> <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"> <title>Carte</title> <script src="http://openlayers.org/api/OpenLayers.js"></script> <script src="premierspas.js"></script> </head><body onload="init();"> <div style="width:900px; height:600px" id="div_ma_carte"></div> <br> <br> </body></html>
2. L'élément "premierspas.js" auquel fait référence ce premier code se présente comme ceci:
Code:
function init(){ var la_carte = new OpenLayers.Map('div_ma_carte'); var couche_de_base = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} ); var twms = new OpenLayers.Layer.WMS( "Carte du monde", "http://world.freemap.in/cgi-bin/mapserv?", { map: '/www/freemap.in/world/map/factbooktrans.map', transparent: 'true', layers: 'factbook'} ); la_carte.addLayer(couche_de_base); la_carte.addLayer(twms); var layer = new OpenLayers.Layer.GML("KML", "/kml/ev.kml", { format: OpenLayers.Format.KML, formatOptions: { 'extractStyles': true } }); la_carte.addLayer(layer); la_carte.zoomToExtent(new OpenLayers.Bounds(-2.774,40.381,12.662,48.628)); la_carte.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':true})); }
Tant que je me contente des deux premières couches et que je n'insère rien à propos de la 3e (notamment pas le passage qui commence par "var layer", tout va bien. Mais quand j'ajoute celle-ci, rien ne va plus. J'ai essayé en local sur mon ordinateur ou sur mon serveur, c'est pareil. Pourtant le fichier kml dont il est question dans la 3e couche a l'air bon, puisque j'arrive à l'importer et le visualiser dans Google Maps. J'ai essayé de rectifier avec des bouts de code variables, notamment ceux qui sont présentés ici, mais ça ne marche pas (il est vrai que le fil en question est assez ancien).
Du coup, je suppose que je renseigne mal cette couche kml dans le code ci-dessus. D'où mes questions:
- le premier argument après la formule OpenLayers.Layer.GML, c'est un nom (donc "ev" dans mon cas) ou un type (donc "kml")? J'ai essayé les deux solutions, mais votre réponse m'évitera de faire tous mes tâtonnements futurs en double.
- l'adresse du fichier en question vous paraît-elle correcte, étant donné que sur mon serveur, ce kml est dans un dossier intitulé "kml" situé au même niveau que la page html de base et que le fichier "premierspas.js"? Si je fais ça en local sur mon ordinateur, avec les trois fichiers dans le même dossier, l'adresse est "ev.kml", tout court?
- le serveur n'a pas spécialement besoin d'être configuré avec Apache, MySQL ou autre chose?
- y a-t-il une autre raison pour que j'arrive à afficher du WMS mais pas du kml?
Merci d'avance à toutes les bonnes âmes!
Edit: je précise encore que je ne suis pas particulièrement accro du kml. Pour moi, il s'agit simplement de pouvoir mettre en webmapping des shapefiles (points et polygones) produits avec QGis. S'il y a des meilleures solutions, je suis preneur!
Dernière modification par Zventibald (Tue 15 April 2014 23:23)
Hors ligne
#2 Wed 16 April 2014 08:38
- jlebouvier
- Juste Inscrit !
- Date d'inscription: 27 Feb 2007
- Messages: 8
Re: insérer kml dans OpenLayers
Bonjour,
Avez-vous testé avec "new OpenLayers.Layer.Vector" au lieu de "new OpenLayers.Layer.GML"
Code:
var layer = new OpenLayers.Layer.Vector("KML", { protocol: new OpenLayers.Protocol.HTTP({ url: "/kml/ev.kml", format: new OpenLayers.Format.KML({ extractStyles: true, extractAttributes: true }) }) })
Bonne journée
Jérémie
Hors ligne
#3 Wed 16 April 2014 09:06
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: insérer kml dans OpenLayers
Bonjour,
première piste : Aucune projection n'est indiquée, ni pour la carte ni pour les couches. On peut faire comme ça si toutes les couches ont la même projection.
Il faut vérifier ce point car google utliise la projection EPSG:900913 et OSM la 4326
deuxième piste : l'adresse du fichier url: "/kml/ev.kml" fait référence à la racine web, essayer avec url: "kml/ev.kml"
troisième piste : analyser les erreurs avec un outil comme firebug ou les outils de développeur du navigateur (insdispensable)
Bon courage
Hors ligne
#4 Wed 16 April 2014 11:58
- Zventibald
- Participant occasionnel
- Date d'inscription: 7 Sep 2012
- Messages: 47
Re: insérer kml dans OpenLayers
Chers vous deux,
Vous aviez raison tous les deux: il fallait à la fois rectifier l'adresse du fichier url, comme indiqué par Delu, et remplacer "new OpenLayers.Layer.GML" par "new OpenLayers.Layer.Vector" comme le suggérait jlebouvier. En faisant ça, la couche supplémentaire était listée dans la carte. Il est vrai que ses points ne s'affichaient pas encore de manière visible, mais en ajoutant "strategies: [new OpenLayers.Strategy.Fixed()],", le résultat devenait parfait. Il ne me reste plus qu'à peaufiner l'affichage (couleurs etc.), et tout sera en ordre. J'ai pris bonne note également de la remarque de Delu concernant les projections.
Quand je pense au temps que j'avais passé à chercher ces infos... Vive GeoRezo, et un grand merci à vous deux!
Hors ligne