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

#1 Thu 15 August 2013 16:30

Leo.M
Juste Inscrit !
Date d'inscription: 7 May 2013
Messages: 3

[OPENLAYERS] Obtenir les centroides des polygones d'une couche

Bonjour à tous,

Je travaille en ce moment sur un petit viewer des POI d'OpenStreetMap et j'aurais besoin de votre aide pour un petit soucis que je rencontre.

Je m'explique:

- Le but est d'afficher des Points d’Intérêts rentrés sous OpenStreetMap sur un autre fond et en utilisant des icônes perso.

- Pour les Points d'interêts ponctuels, c'est facile, je fais une petite requête sur le XAPI et hop:

Code:

                
// SOMMETS
peak = new OpenLayers.Layer.Vector("Sommets", {
        styleMap: new OpenLayers.StyleMap({externalGraphic:"icon_png/peak.png",graphicWidth:16, graphicHeight:16}),
        strategies: [new OpenLayers.Strategy.Fixed()],
            protocol: new OpenLayers.Protocol.HTTP({
            url: "http://api.openstreetmap.fr/xapi/xapi?node[natural=peak][bbox=MA BBOX A MOI]", 
            format: new OpenLayers.Format.OSM()}),
            projection: new OpenLayers.Projection("EPSG:4326"),
            visibility: true,
                });

Ensuite, un petit map.addLayer(peak) et le tour est joué, j'ai mes sommets qui s'affichent smile


- Pour les éléments linéaires (par exemple les rivières), facile aussi, je remplace dans la requête node par way. Avec un petit OpenLayers.StyleMap je change la taille du trait, sa couleur ... bref, j'arrive à rendre ce que je veux.

- Pour les polygones, je suis confronté à un petit problème inhérent à OpenStreetMap:

Prenons l'exemple des musées. Pour rentrer un musée sous OpenStreetMap, certains contributeurs vont tagguer un point, donc du ponctuel, mais d'autres vont tagguer un batiment (donc un polygone), c'est l'éternel débat du: on taggue un point ou un polygone?

Et là je suis bien embêté. Parce que je voudrais afficher une icone à l'emplacement des musées, pas faire apparaitre le contour du musée.

Donc je "pense" avoir trouvé un début de solution:

- Je fais une première variable (museum1) qui fait une requête sur le XAPI concernant les points (node)
- Je fais une deuxieme variable (museum2) qui fait une requête sur le XAPI concernant les chemins (way)

- J'extrais les centroides de tous les polygones de museum2 et je les mets dans une variable museum3

- Je fais museum1+museum3=museum

- Et j'ai ma couche museum qui comprend à la fois les musées rentrés en ponctuels et les centroides des musées rentrés en polygone et le tour est joué.


Donc, ce sur quoi je demande de l'aide, c'est cette extraction des centroides de la couche de polygones. Je vois bien qu'il y a une fonction getCentroid ICI dans la doc d'OL mais j'avoue ne pas trop comprendre comment elle marche ... et je ne sais pas non plus si elle peut extraire l'ensemble des centroides d'une couche.

Voilà, j'espère avoir été relativement clair,

Merci d'avance pour vos idées/remarques/réactions. smile


Léo

Hors ligne

 

Pied de page des forums

Powered by FluxBB