Changeset 60882 in spip-zone for _plugins_/gis/trunk/gis_fonctions.php


Ignore:
Timestamp:
May 3, 2012, 2:49:11 PM (9 years ago)
Author:
guy.cesaro@…
Message:

quelques reports des evolutions de la branche v2 entre r51054 et r60879 : a tester.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis/trunk/gis_fonctions.php

    r53842 r60882  
    7777       
    7878        $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];
     79        $id_table = $boucle->id_table; // articles
     80        $primary = $boucle->primary; // id_article
     81        $objet = objet_type($id_table); // article
     82       
     83        if ($id_table == 'gis') {
     84                // exclure l'élément en cours des résultats
     85                $id_gis = calculer_argument_precedent($idb,$primary, $boucles);
     86                $boucle->where[]= array("'!='", "'$boucle->id_table." . "$primary'", $id_gis);
     87               
     88                // récupérer les paramètres du critère
     89                $op='';
     90                $params = $crit->param;
     91                $type = array_shift($params);
     92                $type = $type[0]->texte;
     93                if(preg_match(',^(\w+)([<>=]+)([0-9]+)$,',$type,$r)){
     94                        $type=$r[1];
     95                        $op=$r[2];
     96                        $op_val=$r[3];
     97                }
     98                if ($op)
     99                        $boucle->having[]= array("'".$op."'", "'".$type."'",$op_val);
     100               
     101                // récupérer lat/lon du point de la boucle englobante
     102                $lat = calculer_argument_precedent($idb,'lat', $boucles);
     103                $lon = calculer_argument_precedent($idb,'lon', $boucles);
     104               
     105                // http://www.awelty.fr/developpement-web/php/
     106                // http://www.movable-type.co.uk/scripts/latlong-db.html
     107                // http://code.google.com/intl/fr/apis/maps/articles/geospatial.html#geospatial
     108                $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";
     109                $order = "'distance'";
     110               
     111                $boucle->select[]= $select;
     112                $boucle->order[]= $order;
     113        } else {
     114                // ajouter tous les champs du point au select
     115                // et les suffixer pour lever toute ambiguite avec des champs homonymes
     116                $boucle->select[]= 'gis.titre AS titre_gis';
     117                $boucle->select[]= 'gis.descriptif AS descriptif_gis';
     118                $boucle->select[]= 'gis.adresse AS adresse_gis';
     119                $boucle->select[]= 'gis.pays AS pays_gis';
     120                $boucle->select[]= 'gis.code_pays AS code_pays_gis';
     121                $boucle->select[]= 'gis.region AS region_gis';
     122                $boucle->select[]= 'gis.ville AS ville_gis';
     123                $boucle->select[]= 'gis.code_postal AS code_postal_gis';
     124                // jointure sur spip_gis_liens/spip_gis
     125                // cf plugin notation
     126                // $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");
     127                $boucle->from['gis_liens'] = 'spip_gis_liens';
     128                $boucle->join['gis_liens']= array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')");
     129                $boucle->from['gis'] = 'spip_gis';
     130                $boucle->join['gis']= array("'gis_liens'","'id_gis'");
     131                // bien renvoyer tous les points qui son attachés à l'objet
     132                $boucle->group[] = 'gis_liens.id_gis';
     133                // ajouter gis aux jointures et spécifier les jointures explicites pour pouvoir utiliser les balises de la table de jointure
     134                // permet de passer dans trouver_champ_exterieur() depuis index_tables_en_pile()
     135                // cf http://article.gmane.org/gmane.comp.web.spip.zone/6628
     136                $boucle->jointures[] = 'gis';
     137                $boucle->jointures_explicites = 'gis_liens gis';
    94138        }
    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;
    110139       
    111140}
     
    119148function balise_distance_dist($p) {
    120149        return rindex_pile($p, 'distance', 'gis');
     150}
     151
     152/**
     153 * Balise #TITRE_GIS : retourne le titre du point
     154 * Necessite le critere {gis} sur la boucle
     155 *
     156 * @param unknown_type $p
     157 */
     158function balise_titre_gis_dist($p) {
     159        return rindex_pile($p, 'titre_gis', 'gis');
     160}
     161
     162/**
     163 * Balise #DESCRIPTIF_GIS : retourne le descriptif du point
     164 * Necessite le critere {gis} sur la boucle
     165 *
     166 * @param unknown_type $p
     167 */
     168function balise_descriptif_gis_dist($p) {
     169        return rindex_pile($p, 'descriptif_gis', 'gis');
    121170}
    122171
Note: See TracChangeset for help on using the changeset viewer.