Changeset 53916 in spip-zone


Ignore:
Timestamp:
Oct 31, 2011, 5:47:42 PM (10 years ago)
Author:
brunobergot@…
Message:

On avance dans l'expérimentation :
-* ajout d'un index sur les champs lat/lon (merci JLuc)
-* la carte charge uniquement les markers qui correspondent au viewport affiché
-* du coup on se branche sur la nouvelle version de la lib qui corrige l'event endPand de mxn
Le clustering fonctionne presque mais il reste un pb de taille pour faire passer le zoom au filtre (pas possible en utilisant #FILTRE). Bref c'est du dev...

Location:
_plugins_/gis/branches/v2_cluster
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis/branches/v2_cluster/base/gis.php

    r49787 r53916  
    4141       
    4242        $spip_gis_key = array(
    43                 "PRIMARY KEY" => "id_gis");
     43                "PRIMARY KEY" => "id_gis",
     44                "KEY lat" => "lat",
     45                "KEY lon" => "lon"
     46        );
    4447       
    4548        $tables_principales['spip_gis'] = array(
  • _plugins_/gis/branches/v2_cluster/base/gis_upgrade.php

    r52788 r53916  
    7979                        ecrire_meta($nom_meta_base_version,$current_version="2.0.2",'non');
    8080                }
     81                if (version_compare($current_version, '2.0.3','<')){
     82                        // ajouter des index sur les coords lat/lon
     83                        include_spip('base/abstract_sql');
     84                        sql_alter("TABLE spip_gis ADD INDEX (lat)");
     85                        sql_alter("TABLE spip_gis ADD INDEX (lon)");
     86                        ecrire_meta($nom_meta_base_version,$current_version="2.0.3",'non');
     87                }
    8188        }
    8289}
  • _plugins_/gis/branches/v2_cluster/gis_fonctions.php

    r53739 r53916  
    216216                        // marquer les markers qui sont des clusters, attribut category dans mxn.addJSON()
    217217                        $result[$key]['properties']['category'] = 'cluster';
     218                        // pas d'infoBubble pour les markers de cluster
     219                        $result[$key]['properties']['infoBubble'] = '';
    218220                        // récupérer les bounds pour afficher l'enssemble des points du clusters
    219221                        $bounds = array(
  • _plugins_/gis/branches/v2_cluster/gis_options.php

    r53827 r53916  
    33if (!defined("_ECRIRE_INC_VERSION")) return;
    44
    5 define('_DIR_LIB_GIS',_DIR_RACINE.'lib/mxn-gis-cluster-2.0.9/');
     5define('_DIR_LIB_GIS',_DIR_RACINE.'lib/mxn-gis-cluster-2.0.10/');
    66
    77$table_des_traitements['VILLE'][]= 'typo(extraire_multi(%s))';
  • _plugins_/gis/branches/v2_cluster/javascript/gis.js

    r53739 r53916  
    2727*/
    2828
    29 //mxn.addProxyMethods(Mapstraction,[addGeoJSON]);
     29function gis_load_json(map) {
     30        // récuper le zoom de la carte
     31        map.json_args.zoom = map.getZoom();
     32        // et les coords des points sw et ne de la carte
     33        var bounds = map.getBounds();
     34        // pour les ajouter à la requête ajax
     35        map.json_args.minlon = bounds.sw.lon;
     36        map.json_args.minlat = bounds.sw.lat;
     37        map.json_args.maxlon = bounds.ne.lon;
     38        map.json_args.maxlat = bounds.ne.lat;
     39        // applique-t-on le clustering ?
     40        if (map.cluster) map.json_args.cluster= true;
     41        // lancer la requête
     42        jQuery.getJSON(map.json_url, map.json_args,
     43                function(data) {
     44                        if (data){
     45                                // virer tous les markers de la carte
     46                                map.removeAllMarkers();
     47                                // et ajouter les markers renvoyés par la requete
     48                                map.addJSON(data);
     49                                if (map.cluster) gis_cluster(map);
     50                        }
     51                }
     52        );
     53}
    3054
    31 function gis_cluster(map, img) {
    32         //var map = eval('map'+ map);
     55function gis_cluster(map) {
    3356        for (i in map.markers) {
    3457                if (map.markers[i].attributes.category == 'cluster') {
    3558                        var marker = map.markers[i];
     59                        // éviter de reboucler sur ce marker
     60                        marker.attributes.category = '';
     61                        // retirer le marker de la carte
    3662                        map.removeMarker(marker);
    37                         marker.setIcon(img, [40,40], [20,20]);
     63                        // le remplacer par un marker de type cluster
     64                        marker.setIcon(map.cluster_icon, [40,40], [20,20]);
     65                        // on surveille le clic sur le marker
    3866                        marker.click.addHandler(function(event_name, event_source, event_args) {
     67                                console.log('click');
     68                                var bounds = new mxn.BoundingBox(event_source.attributes.data.sw_lat, event_source.attributes.data.sw_lon, event_source.attributes.data.ne_lat, event_source.attributes.data.ne_lon);
    3969                                console.log(event_source);
    40                                 event_source.closeInfoBubble.fire();
    41                                 map.removeAllMarkers();
    42                                 var bounds = new mxn.BoundingBox(event_source.attributes.data.sw_lat, event_source.attributes.data.sw_lon, event_source.attributes.data.ne_lat, event_source.attributes.data.ne_lon);
    43                                 map.setBounds(bounds);
     70                                map.setBounds(bounds);
     71                                gis_load_json(map);
    4472                        });
     73                        // et on l'ajoute à la carte
    4574                        map.addMarker(marker);
    4675                }
  • _plugins_/gis/branches/v2_cluster/json/gis_articles.html

    r53739 r53916  
    1                 <BOUCLE_art(ARTICLES){id_article ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}><BOUCLE_gis(GIS){id_article}{","}>
     1                <BOUCLE_art(ARTICLES){id_article ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}><BOUCLE_gis(GIS){id_article}{lat >= #ENV{minlat,-90}}{lat <= #ENV{maxlat,90}}{lon >= #ENV{minlon,-180}}{lon <= #ENV{maxlon,180}}{","}>
    22                {"type": "Feature",
    33                "geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
  • _plugins_/gis/branches/v2_cluster/modeles/carte_gis.html

    r53776 r53916  
    100100                [(#ENV{control_pan,#ENV{contole_pan}}|!={non}|oui)
    101101                map[(#GET{id})].addControls({pan: true});]
    102 
    103                 [(#ENV{point}|!={non}|oui)
    104                 jQuery.getJSON("[(#URL_PAGE{gis_json}|url_absolue)]",
    105                         {[
    106                                 objets : "(#ENV{objets})",][
    107                                 id_rubrique : (#ENV{id_rubrique}),][
    108                                 id_secteur : (#ENV{id_secteur}),][
    109                                 id_parent : (#ENV{id_parent}),][
    110                                 id_article : (#ENV{id_article}),][
    111                                 id_breve : (#ENV{id_breve}),][
    112                                 id_document : (#ENV{id_document}),][
    113                                 id_mot : (#ENV{id_mot}),][
    114                                 id_groupe : (#ENV{id_groupe}),][
    115                                 id_auteur : (#ENV{id_auteur}),][
    116                                 id_syndic : (#ENV{id_syndic}),][
    117                                 id_forum : (#ENV{id_forum}),][
    118                                 id_gis : (#ENV{id_gis}),][
    119                                 cluster : "(#ENV{cluster})",][
    120                                 recherche : "(#ENV{recherche})",][
    121                                 limit : (#ENV{limit,#ENV{limite,500}})]
    122                         },
     102               
     103        [(#ENV{point}|!={non}|oui)
     104                map[(#GET{id})].json_url = "[(#URL_PAGE{gis_json}|url_absolue)]";
     105                map[(#GET{id})].json_args = {[
     106                        objets : "(#ENV{objets})",][
     107                        id_rubrique : (#ENV{id_rubrique}),][
     108                        id_secteur : (#ENV{id_secteur}),][
     109                        id_parent : (#ENV{id_parent}),][
     110                        id_article : (#ENV{id_article}),][
     111                        id_breve : (#ENV{id_breve}),][
     112                        id_document : (#ENV{id_document}),][
     113                        id_mot : (#ENV{id_mot}),][
     114                        id_groupe : (#ENV{id_groupe}),][
     115                        id_auteur : (#ENV{id_auteur}),][
     116                        id_syndic : (#ENV{id_syndic}),][
     117                        id_forum : (#ENV{id_forum}),][
     118                        id_gis : (#ENV{id_gis}),][
     119                        cluster : "(#ENV{cluster})",][
     120                        recherche : "(#ENV{recherche})",][
     121                        limit : (#ENV{limit,#ENV{limite,500}})]
     122                };
     123               
     124                [(#ENV{cluster}|non)
     125                map[(#GET{id})].load.addHandler(function() { gis_load_json(map[(#GET{id})]); });
     126                /*
     127                jQuery.getJSON(map[(#GET{id})].json_url,
     128                        map[(#GET{id})].json_args,
    123129                        function(data) {
    124130                                if (data){
     
    131137                                                map[(#GET{id})].autoCenterAndZoom();
    132138                                        }]
    133                                         [(#ENV{cluster}|oui)
    134                                         gis_cluster(map[(#GET{id})],'[(#CHEMIN{images/bg_cluster.png}|url_absolue)]');]
    135139                                }
    136140                        }
    137                 );]
     141                );*/]
    138142               
     143                [(#ENV{cluster}|oui)
     144                map[(#GET{id})].cluster = true;[
     145                map[(#GET{id})].cluster_icon = '(#CHEMIN{images/bg_cluster.png}|url_absolue)';]
     146                ]
     147               
     148                // surveiller le changement de zoom et le déplacement dans la carte
     149                map[(#GET{id})].changeZoom.addHandler(function() { gis_load_json(map[(#GET{id})]); });
     150                map[(#GET{id})].endPan.addHandler(function() { gis_load_json(map[(#GET{id})]); });
     151
     152               
     153        ]
     154                                               
    139155                [(#ENV{kml}|oui)
    140156                [(#ENV{kml}|intval|oui)
  • _plugins_/gis/branches/v2_cluster/plugin.xml

    r53739 r53916  
    22        <nom>GIS</nom>
    33        <auteur>b_b, kent1</auteur>
    4         <version>2.1.0</version>
    5         <version_base>2.0.2</version_base>
     4        <version>2.1.1</version>
     5        <version_base>2.0.3</version_base>
    66        <licence>GNU/GPL</licence>
    77        <etat>dev</etat>
     
    8686        <necessite id="spip_bonux" version="[1.8;]" />
    8787        <necessite id="afficher_objets" version="[1.2.0;]" />
    88         <necessite id="lib:mxn-gis-cluster-2.0.9" src="https://github.com/downloads/brunob/mxn/mxn-gis-cluster-2.0.9.zip" />
     88        <necessite id="lib:mxn-gis-cluster-2.0.10" src="https://github.com/downloads/brunob/mxn/mxn-gis-cluster-2.0.10.zip" />
    8989        <categorie>divers</categorie>
    9090        <traduire gestionnaire="salvatore" module="gis" reference="fr" />
Note: See TracChangeset for help on using the changeset viewer.