banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB