Changeset 104898 in spip-zone


Ignore:
Timestamp:
Jun 19, 2017, 7:45:13 AM (2 years ago)
Author:
marcimat@…
Message:

Lorsque le plugin GIS Géométrie est utilisé, il est possible d’avoir des Points normaux, et diverses formes, mélangées
dans la table GIS. Lorsqu’on demande un affichage en cluster, par exemple si on a plus de 500 points sur ?exec=gis_tous,
le javascript se plantait dès lors que des formes géométriques étaient présentes. Effectivement la création des
marqueurs de clusters nécessite d’avoir 2 coordonnées valides, ce qui n’est pas le cas pour autre chose qu’un point.

On limite donc l’enregistrement des éléments à clustoriser au type 'Point'. Pour les autres éléments (tracés, polygones, ...)
on les affiche normalement sur la carte.

Location:
_plugins_/gis/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis/trunk/javascript/leaflet.gis.js

    r103986 r104898  
    22// Plugin Leaflet L.Map.Gis
    33L.Map.Gis = L.Map.extend({
    4        
     4
    55        includes: L.Mixin.Events,
    6        
     6
    77        options:{
    88                mapId: 'map_gis',
     
    4949                langue: false
    5050        },
    51        
     51
    5252        initialize: function (id,options) {
    5353                L.Util.setOptions(this, options);
    54                
     54
    5555                this.on('load', function () {
    5656                        // Affecter sur l'objet du DOM
     
    6262                        jQuery('#'+this._container.id).trigger('load',this);
    6363                });
    64                
     64
    6565                L.Map.prototype.initialize.call(this, id, options);
    66                
     66
    6767                if (this.options.utiliser_bb) {
    6868                        this.fitBounds(
     
    7373                        );
    7474                }
    75                
     75
    7676                this.populateTileLayers(this.options.affiche_layers);
    77                
     77
    7878                this.initControls();
    79                
     79
    8080                this.loadData();
    81                
     81
    8282                this.addOverlays();
    83                
     83
    8484                if (this.options.localize_visitor) {
    8585                        var maxZoom = this.options.localize_visitor_zoom;
     
    9090                        this.locate({setView: true, maxZoom: maxZoom});
    9191                }
    92                
     92
    9393                // Si pas de points affichés trigger ready ici
    9494                if (!this.options.affiche_points || !Object.keys(this.options.json_points).length) {
     
    134134                }
    135135        },
    136        
     136
    137137        createTileLayer: function (name) {
    138138                var layer;
     
    160160                }
    161161        },
    162        
     162
    163163        // API setGeoJsonFeaturePopup : Pour Ajouter le texte de popup d'un point (feature = item d'un GeoJson)
    164164        setGeoJsonFeaturePopup: function (feature, layer) {
    165165                // Déclarer le contenu de la popup s'il y en a
    166                 if (feature.properties 
    167                         && !feature.properties.noclick 
    168                         && (feature.properties.title || feature.properties.description || 
     166                if (feature.properties
     167                        && !feature.properties.noclick
     168                        && (feature.properties.title || feature.properties.description ||
    169169                                (this.options.langue && (feature.properties['title_'+this.options.langue] || feature.properties['description_'+this.options.langue])))) {
    170170                        var popupContent = '',
     
    190190                }
    191191        },
    192        
     192
    193193        // API parseGeoJson
    194194        parseGeoJson: function (data) {
     
    196196                // Analyse des points et déclaration (sans regroupement des points en cluster)
    197197                if (!map.options.cluster) {
    198                         if (data.features && data.features.length > 0) {
    199                                 var geojson = L.geoJson('', {
    200                                         style: this.options.pathStyles ? this.options.pathStyles : function (feature) {
    201                                                 if (feature.properties && feature.properties.styles)
    202                                                         return feature.properties.styles;
    203                                                 else
    204                                                         return '';
    205                                         },
    206                                         onEachFeature: function (feature, layer) {
    207                                                 // Déclarer l'icone du point
    208                                                 if (feature.geometry.type == 'Point') {
    209                                                         map.setGeoJsonFeatureIcon(feature, layer);
    210                                                 }
    211                                                 // Déclarer le contenu de la popup s'il y en a
    212                                                 map.setGeoJsonFeaturePopup(feature, layer);
    213                                         }
    214                                 }).addData(data).addTo(map);
    215 
    216                                 if (map.options.autocenterandzoom) {
    217                                         if (data.features.length == 1 && data.features[0].geometry.type == 'Point')
    218                                                 map.setView(geojson.getBounds().getCenter(), map.options.zoom);
    219                                         else
    220                                                 map.fitBounds(geojson.getBounds());
    221                                 }
    222                                 if (map.options.openId)
    223                                         gis_focus_marker(map.options.openId,map.options.mapId);
    224 
    225                                 if (typeof map.geojsons=='undefined') map.geojsons = [];
    226                                 map.geojsons.push(geojson);
    227                         }
     198                        this.parseGeoJsonFeatures(data);
    228199                } else {
    229200                        map.markerCluster = L.markerClusterGroup(map.options.clusterOptions).addTo(map);
    230201                        var markers = [];
     202                        var autres = {
     203                                type: 'FeatureCollection',
     204                                features: []
     205                        };
    231206                        /* Pour chaque points présents, on crée un marqueur */
    232207                        jQuery.each(data.features, function (i, feature) {
    233                                 if (feature.geometry.coordinates[0]) {
     208                                if (feature.geometry.type == 'Point' && feature.geometry.coordinates[0]) {
    234209                                        var marker = L.marker([feature.geometry.coordinates[1], feature.geometry.coordinates[0]]);
    235210
     
    241216                                        marker.id = feature.id;
    242217                                        markers.push(marker);
     218                                } else {
     219                                        autres.features.push(feature);
    243220                                }
    244221                        });
    245222
    246223                        map.markerCluster.addLayers(markers);
     224                        this.parseGeoJsonFeatures(autres);
    247225
    248226                        if (map.options.autocenterandzoom) {
     
    255233                                gis_focus_marker(map.options.openId,map.options.mapId);
    256234                        }
     235                }
     236        },
     237
     238        parseGeoJsonFeatures: function(data) {
     239                var map = this;
     240                if (data.features && data.features.length > 0) {
     241                        var geojson = L.geoJson('', {
     242                                style: this.options.pathStyles ? this.options.pathStyles : function (feature) {
     243                                        if (feature.properties && feature.properties.styles)
     244                                                return feature.properties.styles;
     245                                        else
     246                                                return '';
     247                                },
     248                                onEachFeature: function (feature, layer) {
     249                                        // Déclarer l'icone du point
     250                                        if (feature.geometry.type == 'Point') {
     251                                                map.setGeoJsonFeatureIcon(feature, layer);
     252                                        }
     253                                        // Déclarer le contenu de la popup s'il y en a
     254                                        map.setGeoJsonFeaturePopup(feature, layer);
     255                                }
     256                        }).addData(data).addTo(map);
     257
     258                        if (map.options.autocenterandzoom) {
     259                                if (data.features.length == 1 && data.features[0].geometry.type == 'Point')
     260                                        map.setView(geojson.getBounds().getCenter(), map.options.zoom);
     261                                else
     262                                        map.fitBounds(geojson.getBounds());
     263                        }
     264                        if (map.options.openId)
     265                                gis_focus_marker(map.options.openId,map.options.mapId);
     266
     267                        if (typeof map.geojsons=='undefined') map.geojsons = [];
     268                        map.geojsons.push(geojson);
    257269                }
    258270        },
  • _plugins_/gis/trunk/paquet.xml

    r104886 r104898  
    22        prefix="gis"
    33        categorie="divers"
    4         version="4.43.7"
     4        version="4.43.8"
    55        schema="2.1.0"
    66        etat="stable"
Note: See TracChangeset for help on using the changeset viewer.