[OSM-dev-fr] carte interactive, Mali

yvecai yvecai at gmail.com
Sam 14 Avr 07:32:21 BST 2012


Le 13/04/2012 21:05, Jean-Guilhem Cailton a écrit :
> Salut Pierre,
>
> On peut peut-être demander de l'aide sur la liste dev-fr (en copie), 
> ou sinon sur dev (en anglais) ?
>
> Merci d'avance les gars (et les filles, bien sûr) ! ;-)
>
> Bien cordialement,
>
> Jean-Guilhem
>
>
> Le 13/04/2012 20:41, Pierre Béland a écrit :
>> Avant d'ajouter la fonction de Crowdsourcing, j'ai légèrement remanié 
>> la carte interactive du Mali.
>> http://pierzen.dev.openstreetmap.org/hot/openlayers/mali.php
>> J'ai ajouté la section de droite qui servira à ajouter les 
>> instructions. Maintenant la fonction de description des marqueurs 
>> fonctionne correctement, tant pour les localités que les aéroports.
>> Et je vais maintenant greffer les instructions de Crowdsourcing.
>> Mais un problème auquel on devrait répondre, c'est l'encombrement des 
>> icônes de marqueurs sur la carte. Pour l'instant, j'ai réduit la 
>> taille des cercles représentant les localités.
>> Voici une brève description du problème. Pourrais-tu trouver 
>> quelqu'un qui peut nous aider à résoudre ce problème?
>> J'utilise présentement le styleMap suivant :
>> var styleMap_villes2 = new OpenLayers.StyleMap({
>>                 "default": new OpenLayers.Style(OpenLayers.Util.applyDefaults({
>>                 graphicOpacity: 0.5,
>> pointRadius: 4}, OpenLayers.Feature.Vector.style["default"]))
>>                 });
>> Pour diminuer l'encombrement, il serait bien d'avoir un styleMap avec 
>> une fonction de variabilité de la taille selon le niveau de zoom. Aux 
>> niveaux de zoom supérieur, il serait aussi possible de ne pas 
>> afficher les marqueurs, laissant ainsi la place au texte de 
>> description des localités.
>> J'ai vu l'exemple suivant où une fonction permet de modifier la 
>> variable pointRadius. Mais ne réussit pas à le faire fonctionner. Il 
>> y a un traitement en JQuery avec la variable ${radius}. Je ne suis 
>> suffisamment familier avec le tout pour modifier et déboguer le tout.
>> var style_villes = new OpenLayers.Style({
>>                 pointRadius: "*${radius}*",
>>                 fillColor: "red",
>>                 fillOpacity: 0.8,
>>                 strokeColor: "#ff5555",
>>                 strokeWidth: 2,
>>                 strokeOpacity: 0.8
>>             }, {
>>                 context: {
>> *radius: function(feature)* {
>> return Math.min(feature.attributes.count, 7) + 3;
>>                     },
>>                 }
>>             });
>> var styleMap_villes = new OpenLayers.StyleMap({
>>                         "default": style_villes,
>>                         "select": {
>>                             fillColor: "#8aeeef",
>>                             strokeColor: "#32a8a9"
>>                         }
>>                 });
>> //
>> /Pierre/
>> //
>
>
> -- 
> gpg 0x5939EAE2
>
>
> _______________________________________________
> dev-fr mailing list
> dev-fr at openstreetmap.org
> http://lists.openstreetmap.org/listinfo/dev-fr
Salut,

J'utilise une fonction sur pointRadius pour www.pistes-nordiques.org, 
mais avec une strategy: cluster sur le layer. Sinon, 
feature.attribute.count est probablement toujours égal à 1. Mais si tu 
utilise une strategie 'cluster' sur le layer, je ne vois pas trop bien 
comment tu peux sortir le popup avec les attributs du point noyé dans un 
cluster.
Dans ton cas, la fonction radius() devrait plutôt dépendre de map.getZoom().
Essaye ça:

    context: {
    *    radius: function(feature)* {
             return map.getZoom();
         },


Ce qui fonctionne chez moi avec une strategy cluster:

         var pointStyle = new OpenLayers.Style(
             {pointRadius: "${radius}",
             fillColor: "#FF7800",
             fillOpacity: 0.5,
             strokeColor: "#FF7800",
             strokeWidth: 1,
             strokeOpacity: 0},
             {context:
                 { radius: function(feature) {
                         return Math.min(feature.attributes.count, 10) + 2;
                     }
                 }
             });
             var pistesLayerLowZoom = new
    OpenLayers.Layer.Vector("Pistes_Low-zoom", {
                 strategies: [
                 new OpenLayers.Strategy.Fixed(),
                 new OpenLayers.Strategy.Cluster()
                 ],
                 protocol: new OpenLayers.Protocol.HTTP({
                         url:"data/nordic_1npw.osm",
                         format: new OpenLayers.Format.OSM()
                 }),
                 projection: new OpenLayers.Projection("EPSG:4326"),
                 maxScale: 1000000,
                 styleMap: new OpenLayers.StyleMap({
                     "default": pointStyle,
                     "highlight": new OpenLayers.Style({fillColor:
    "#4477EE",strokeColor: "#4477EE"})
                 })
             });
             map.addLayers([pistesLayerLowZoom])

Yves
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.openstreetmap.org/pipermail/dev-fr/attachments/20120414/f7f4492f/attachment-0001.html>


Plus d'informations sur la liste de diffusion dev-fr