Changeset 56086 in spip-zone


Ignore:
Timestamp:
Dec 28, 2011, 6:25:33 PM (12 years ago)
Author:
brunobergot@…
Message:

version 2.2.0 : optimiser les squelettes json à l'aide du critère {gis} qui permet maintenant de forcer une jointure correcte sur la table gis depuis les boucles des autres objets

Location:
_plugins_/gis/branches/v2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis/branches/v2/gis_fonctions.php

    r54170 r56086  
    6868
    6969/**
    70  * Critere {gis distance<XX} pour filtrer une liste de points par rapport à la distance du point de l'env
     70 * Critère {gis} sur les boucles autres que GIS pour forcer la jointure sur la table GIS
     71 * Critère {gis distance<XX} sur une boucle GIS pour filtrer une liste de points par rapport à la distance du point de l'env
    7172 *
    7273 * @param unknown_type $idb
     
    7778       
    7879        $boucle = &$boucles[$idb];
    79         $id = $boucle->primary;
    80        
    81         // exclure l'élément en cours des résultats
    82         $id_gis = calculer_argument_precedent($idb,$id, $boucles);
    83         $boucle->where[]= array("'!='", "'$boucle->id_table." . "$id'", $id_gis);
    84        
    85         // récupérer les paramètres du critère
    86         $op='';
    87         $params = $crit->param;
    88         $type = array_shift($params);
    89         $type = $type[0]->texte;
    90         if(preg_match(',^(\w+)([<>=]+)([0-9]+)$,',$type,$r)){
    91                 $type=$r[1];
    92                 $op=$r[2];
    93                 $op_val=$r[3];
    94         }
    95         if ($op)
    96                 $boucle->having[]= array("'".$op."'", "'".$type."'",$op_val);
    97        
    98         // récupérer lat/lon du point de la boucle englobante
    99         $lat = calculer_argument_precedent($idb,'lat', $boucles);
    100         $lon = calculer_argument_precedent($idb,'lon', $boucles);
    101        
    102         // http://www.awelty.fr/developpement-web/php/
    103         // http://www.movable-type.co.uk/scripts/latlong-db.html
    104         // http://code.google.com/intl/fr/apis/maps/articles/geospatial.html#geospatial
    105         $select = "(6371 * acos( cos( radians(\".$lat.\") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(\".$lon.\") ) + sin( radians(\".$lat.\") ) * sin( radians( gis.lat ) ) ) ) AS distance";
    106         $order = "'distance'";
    107        
    108         $boucle->select[]= $select;
    109         $boucle->order[]= $order;
     80        $id_table = $boucle->id_table; // articles
     81        $primary = $boucle->primary; // id_article
     82        $objet = objet_type($id_table); // article
     83       
     84        if ($id_table == 'gis') {
     85                // exclure l'élément en cours des résultats
     86                $id_gis = calculer_argument_precedent($idb,$primary, $boucles);
     87                $boucle->where[]= array("'!='", "'$boucle->id_table." . "$primary'", $id_gis);
     88               
     89                // récupérer les paramètres du critère
     90                $op='';
     91                $params = $crit->param;
     92                $type = array_shift($params);
     93                $type = $type[0]->texte;
     94                if(preg_match(',^(\w+)([<>=]+)([0-9]+)$,',$type,$r)){
     95                        $type=$r[1];
     96                        $op=$r[2];
     97                        $op_val=$r[3];
     98                }
     99                if ($op)
     100                        $boucle->having[]= array("'".$op."'", "'".$type."'",$op_val);
     101               
     102                // récupérer lat/lon du point de la boucle englobante
     103                $lat = calculer_argument_precedent($idb,'lat', $boucles);
     104                $lon = calculer_argument_precedent($idb,'lon', $boucles);
     105               
     106                // http://www.awelty.fr/developpement-web/php/
     107                // http://www.movable-type.co.uk/scripts/latlong-db.html
     108                // http://code.google.com/intl/fr/apis/maps/articles/geospatial.html#geospatial
     109                $select = "(6371 * acos( cos( radians(\".$lat.\") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(\".$lon.\") ) + sin( radians(\".$lat.\") ) * sin( radians( gis.lat ) ) ) ) AS distance";
     110                $order = "'distance'";
     111               
     112                $boucle->select[]= $select;
     113                $boucle->order[]= $order;
     114        } else {
     115                // ajouter le titre et le descriptif du point au select
     116                $boucle->select[]= 'gis.titre AS titre_gis';
     117                $boucle->select[]= 'gis.descriptif AS descriptif_gis';
     118                // jointure sur spip_gis_liens/spip_gis
     119                // cf plugin notation
     120                // $boucle->join["surnom (as) table de liaison"] = array("surnom de la table a lier", "cle primaire de la table de liaison", "identifiant a lier", "type d'objet de l'identifiant");
     121                $boucle->from['gis_liens'] = 'spip_gis_liens';
     122                $boucle->join['gis_liens']= array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')");
     123                $boucle->from['gis'] = 'spip_gis';
     124                $boucle->join['gis']= array("'gis_liens'","'id_gis'");
     125                // bien renvoyer tous les points son attachés à l'objet
     126                $boucle->group[] = 'gis_liens.id_gis';
     127                // ajouter gis aux jointures et spécifier les jointures explicites pour pouvoir utiliser les balises de la table de jointure
     128                // permet de passer dans trouver_champ_exterieur() depuis index_tables_en_pile()
     129                // cf http://article.gmane.org/gmane.comp.web.spip.zone/6628
     130                $boucle->jointures[] = 'gis';
     131                $boucle->jointures_explicites = 'gis_liens gis';
     132        }
    110133       
    111134}
     
    119142function balise_distance_dist($p) {
    120143        return rindex_pile($p, 'distance', 'gis');
     144}
     145
     146/**
     147 * Balise #TITRE_GIS : retourne le titre du point
     148 * Necessite le critere {gis} sur la boucle
     149 *
     150 * @param unknown_type $p
     151 */
     152function balise_titre_gis_dist($p) {
     153        return rindex_pile($p, 'titre_gis', 'gis');
     154}
     155
     156/**
     157 * Balise #DESCRIPTIF_GIS : retourne le descriptif du point
     158 * Necessite le critere {gis} sur la boucle
     159 *
     160 * @param unknown_type $p
     161 */
     162function balise_descriptif_gis_dist($p) {
     163        return rindex_pile($p, 'descriptif_gis', 'gis');
    121164}
    122165
  • _plugins_/gis/branches/v2/json/gis_articles.html

    r55738 r56086  
    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){gis}{id_article ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}>
    22                {"type": "Feature",
    33                "geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
    44                "id":"#ID_GIS",
    5                 "title":[(#TITRE*|sinon{#_art:TITRE*}|supprimer_numero|json_encode)],
    6                 "description":[(#DESCRIPTIF|sinon{#_art:DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
     5                "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)],
     6                "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
    77                [(#LOGO_GIS|oui)
    88                [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]]
     
    1818                "icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)],
    1919                "icon_anchor": [(#VAL{91}|chr)][(#GET{icon_w}|div{2})],[(#GET{icon_h})][(#VAL{93}|chr)]
    20                 ]}</BOUCLE_gis></BOUCLE_art>
     20                ]}</BOUCLE_art>
  • _plugins_/gis/branches/v2/json/gis_auteurs.html

    r55738 r56086  
    1                 <BOUCLE_auteurs(AUTEURS){id_article ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}><BOUCLE_gis(GIS){id_auteur}{","}>
     1                <BOUCLE_auteurs(AUTEURS){gis}{id_article ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}>
    22                {"type": "Feature",
    33                "geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
    44                "id":"#ID_GIS",
    5                 "title":[(#TITRE*|sinon{#_auteurs:NOM*}|supprimer_numero|json_encode)],
    6                 "description":[(#DESCRIPTIF|sinon{#_auteurs:BIO}|json_encode)][(#SET{logo_doc,''})]
     5                "title":[(#TITRE_GIS*|sinon{#NOM*}|supprimer_numero|json_encode)],
     6                "description":[(#DESCRIPTIF_GIS|sinon{#BIO}|json_encode)][(#SET{logo_doc,''})]
    77                [(#LOGO_GIS|oui)
    88                [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]]
     
    1818                "icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)],
    1919                "icon_anchor": [(#VAL{91}|chr)][(#GET{icon_w}|div{2})],[(#GET{icon_h})][(#VAL{93}|chr)]
    20                 ]}</BOUCLE_gis></BOUCLE_auteurs>
     20                ]}</BOUCLE_auteurs>
  • _plugins_/gis/branches/v2/json/gis_mots.html

    r55738 r56086  
    1                 <BOUCLE_mots(MOTS){id_mot ?}{id_groupe ?}{id_article ?}{id_rubrique ?}{id_breve ?}{id_syndic ?}{id_forum ?}{recherche ?}{0, #ENV{limit}}{","}><BOUCLE_gis(GIS){id_mot}{","}>
     1                <BOUCLE_mots(MOTS){gis}{id_mot ?}{id_groupe ?}{id_article ?}{id_rubrique ?}{id_breve ?}{id_syndic ?}{id_forum ?}{recherche ?}{0, #ENV{limit}}{","}>
    22                {"type": "Feature",
    33                "geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
    44                "id":"#ID_GIS",
    5                 "title":[(#TITRE*|sinon{#_mots:TITRE*}|supprimer_numero|json_encode)],
    6                 "description":[(#DESCRIPTIF|sinon{#_mots:DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
     5                "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)],
     6                "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
    77                [(#LOGO_GIS|oui)
    88                [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]]
     
    1818                "icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)],
    1919                "icon_anchor": [(#VAL{91}|chr)][(#GET{icon_w}|div{2})],[(#GET{icon_h})][(#VAL{93}|chr)]
    20                 ]}</BOUCLE_gis></BOUCLE_mots>
     20                ]}</BOUCLE_mots>
  • _plugins_/gis/branches/v2/json/gis_rubriques.html

    r55738 r56086  
    1                 <BOUCLE_rub(RUBRIQUES){id_rubrique ?}{id_secteur ?}{id_parent?=#ENV{id_parent}}{id_mot ?}{recherche ?}{0, #ENV{limit}}{","}><BOUCLE_gis(GIS){id_rubrique}{","}>
     1                <BOUCLE_rub(RUBRIQUES){gis}{id_rubrique ?}{id_secteur ?}{id_parent?=#ENV{id_parent}}{id_mot ?}{recherche ?}{0, #ENV{limit}}{","}>
    22                {"type": "Feature",
    33                "geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
    44                "id":"#ID_GIS",
    5                 "title":[(#TITRE*|sinon{#_rub:TITRE*}|supprimer_numero|json_encode)],
    6                 "description":[(#DESCRIPTIF|sinon{#_rub:DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
     5                "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)],
     6                "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
    77                [(#LOGO_GIS|oui)
    88                [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]]
     
    1818                "icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)],
    1919                "icon_anchor": [(#VAL{91}|chr)][(#GET{icon_w}|div{2})],[(#GET{icon_h})][(#VAL{93}|chr)]
    20                 ]}</BOUCLE_gis></BOUCLE_rub>
     20                ]}</BOUCLE_rub>
  • _plugins_/gis/branches/v2/json/gis_sites.html

    r55738 r56086  
    1                 <BOUCLE_sit(SITES){id_syndic ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{recherche ?}{0, #ENV{limit}}{","}><BOUCLE_gis(GIS){id_syndic}{","}>
     1                <BOUCLE_sit(SITES){gis}{id_syndic ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{recherche ?}{0, #ENV{limit}}{","}>
    22                {"type": "Feature",
    33                "geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
    44                "id":"#ID_GIS",
    5                 "title":[(#TITRE*|sinon{#_sit:NOM_SITE*}|supprimer_numero|json_encode)],
    6                 "description":[(#DESCRIPTIF|sinon{#_sit:DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
     5                "title":[(#TITRE_GIS*|sinon{#NOM_SITE*}|supprimer_numero|json_encode)],
     6                "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
    77                [(#LOGO_GIS|oui)
    88                [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]]
     
    1818                "icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)],
    1919                "icon_anchor": [(#VAL{91}|chr)][(#GET{icon_w}|div{2})],[(#GET{icon_h})][(#VAL{93}|chr)]
    20                 ]}</BOUCLE_gis></BOUCLE_sit>
     20                ]}</BOUCLE_sit>
  • _plugins_/gis/branches/v2/plugin.xml

    r55738 r56086  
    22        <nom>GIS</nom>
    33        <auteur>b_b, kent1</auteur>
    4         <version>2.1.4</version>
     4        <version>2.2.0</version>
    55        <version_base>2.0.2</version_base>
    66        <licence>GNU/GPL</licence>
Note: See TracChangeset for help on using the changeset viewer.