source: spip-zone/_plugins_/spip_geoportail/action/geoportail_search.php @ 39814

Last change on this file since 39814 was 39814, checked in by jean-marc.viglino@…, 9 years ago
File size: 3.6 KB
Line 
1<?php
2/**
3* Plugin SPIP Geoportail
4*
5* @author:
6* Jean-Marc Viglino (ign.fr)
7*
8* Copyright (c) 2010
9* Logiciel distribue sous licence GNU/GPL.
10*
11* Recherche d'une communes dans le RGC
12* et renvoie en JSON pour traitement en Ajax
13*
14* Parametres :
15*       q : la question (le nom de la commune recherchee)
16*       code : le code de la commune (');
17*       zone : la zone geograpique
18*       lon : la longitude
19*       lat : la latitude
20* Si q est remplit, la recherche se fait sur le nom et renvoit une liste de commune et leurs les coordonnes.
21* Si q n'est pas remplit, la recherche se fait sur les coordonnees (lon, lat) et renvoit une liste de commune
22*
23* - exemple : spip.php?action=geoportail_search&q=paris&zone=FXX&hash=#GEOPORTAIL_PROTECT{jqsearch}
24* => renvoit :
25*        {name:"nom", nadm:"num dep", adm:"nom dep", fcode:"code", carte:"top25", lon:x, lat:y }, ...
26*
27* - exemple : spip.php?action=geoportail_search&lon=X&lat=Y&zone=FXX&hash=#GEOPORTAIL_PROTECT{jqsearch}
28* => renvoit :
29*        { name:"paris", nadm:"num dep", adm:"nom dep", fcode:"code", carte:"top25", d:distance }, ...';
30*
31*/
32function action_geoportail_search_dist()
33{       header("Content-Type: text/json; charset=UTF-8; ");
34        #HTTP_HEADER{Content-Type: text/json; charset=UTF-8; }
35        //-- Protection du script (interdir l'acces hors du site)
36        include_spip ('inc/geoportail_protect');
37        if (!geoportail_good_referer('jqsearch')) { echo "[{ error:'Bad Referer '}]"; return; }
38       
39        include_spip('inc/compat_192');
40        include_spip('inc/geoupload');
41
42        function select_match ($q, $zone, $code, $extended=false)
43        {       // Recherche etendue
44                if ($extended) $query = "MATCH(asciiname,cpostal) AGAINST ('*".addslashes($q)."*' IN BOOLEAN MODE) ";
45                // recherche stricte mais avec notion de pertinence
46                else $query = "MATCH(asciiname,cpostal) AGAINST ('".addslashes($q)."') ";
47                // Limiter la recheche
48                if ($zone && $zone !='') $query .= " AND zone = '".$zone."' ";
49                if ($code && $code !='') $query .= " AND feature_class = '".$code."' ";
50                // Recherche une commune
51                else $query .= " AND feature_class != '0' ";
52                // Proposer un classement en mode etendu
53                if ($extended) $query .= " ORDER BY population DESC";
54                // Pas trop !
55                $query .= " LIMIT 0,100";
56                // Lancer la recherche
57                $res = spip_query("SELECT * FROM spip_georgc WHERE ".$query);
58                $trouve = false;
59                while ($row =spip_fetch_array($res))
60                {       if ($trouve) echo ",\n";
61                        else $trouve=true;
62                        // resultat
63                        echo '{"name":"'.$row['name'].'", "nadm":"'.$row['id_dep'].'", "adm":"'.geoportail_departement($row['id_dep']).'", "insee":"'.$row['id_dep'].$row['id_com'].'", "fcode":"'.$row['feature_class'].'", "carte":"'.$row['map'].'", "population":"'.$row['population'].'", "lon":'.$row['lon'].', "lat":'.$row['lat'].'}';
64                }
65                // on a trouve quelque chose ?
66                return ($trouve);
67        }
68       
69        // Recuperer les parametres
70        $q =_request('q');
71        $code =_request('code');
72        $zone =_request('zone');
73        $lon =_request('lon');
74        $lat =_request('lat');
75       
76        // Recherche sur un toponyme
77        if ($q)
78        {       $q = utf8_decode($q);
79                echo "[\n";//.$q."\n";
80
81                // Recherche de la commune
82                if (!select_match ($q, $zone, $code)) select_match ($q, $zone, $code, true);
83
84                // FIN
85                echo "]";
86        }
87        // Recherche sur des coordonnees
88        else if (geoportail_chercher_adm($lon, $lat, $adm))
89        {       echo '[{"name":"'                       .$adm['name']
90                        .'", "nadm":"'          .$adm['id_dep']
91                        .'", "adm":"'                   .$adm['departement']
92                        .'", "insee":"'         .$adm['insee']
93                        .'", "fcode":"'         .$adm['feature_class']
94                        .'", "carte":"'         .$adm['map']
95                        .'", "population":"'    .$adm['population']
96                        .'", "d":'                      .$adm['dist']
97                        .'}]';
98        }
99        else echo '[]'; 
100}
101?>
Note: See TracBrowser for help on using the repository browser.