source: spip-zone/_plugins_/spip_geoportail/public/geoportail_boucles.php @ 44063

Last change on this file since 44063 was 44063, checked in by jean-marc.viglino@…, 9 years ago

[MAJ] Réorganisation du code.

File size: 4.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**/
12
13include_spip('base/geoportail');
14
15// Affichage du popup des zones Geoportail
16function geoportail_popup_zone ($name, $selected=null, $class='', $options="")
17{       if (!$selected || $selected=='') $selected = geoportail_profil('zone');
18
19        $s = "<select class='$class' name='$name' id='$name' $options >";
20        eval ('$p = array('._T("geoportail:tzone").');');
21        eval ('$px = array('._T("geoportail:tzonetxt").');');
22        eval ('$pd = array('._T("geoportail:tzoned").');');
23        $i=0;
24        foreach ($px as $v) 
25        {       $s.= "<option value='".$p[$i]."'";
26                if ($p[$i]==$selected) $s.= ' SELECTED';
27                if ($pd[$i++]==0) $s.= ' disabled style="color:graytext" '; 
28                $s.= ">$v</option>";
29        }
30        $s.= "</select>\n";
31        return $s;
32}
33
34/**
35 *      Criteres geoposition pour faire la jointure avec la table
36        des positions dans les boucles
37 */
38function critere_geoposition($idb, &$boucles, $crit)
39{
40        $boucle = &$boucles[$idb];
41        $id = $boucle->primary;
42        $table = $boucle->id_table;
43        // Identifiant de l'objet de la forme id_nomobjet
44        $objet = substr($id, 3);
45
46        // Faire une jointure explicite sur la table des positions
47        $t = "geopositions";
48        $boucle->from[$t] = 'spip_geopositions';
49        $boucle->jointures[] = $t;
50        $boucle->jointures_explicites = true;
51       
52        // Critere de jointure (sur l'objet et sur l'id_objet)
53        $boucle->where[]= array ("'='","'$t.objet'","\"'$objet'\"");
54        $boucle->where[]= array ("'='","'$t.id_objet'","'$table.$id'");
55
56        return;
57}
58
59/**
60        Balise pour la recherche dans le GEORGC a partir des info d'une commune (id_dep et id_com)
61*/
62function geoportail_get_rgc($id_dep, $id_com='', $what='name')
63{       // Ne pas refaire la requete ! 
64        static $id;
65        if ($id[$id_dep.$id_com]) return $id[$id_dep.$id_com][$what];
66        // rechercher...
67        if ($id_com) $row = spip_fetch_array(spip_query("SELECT * FROM spip_georgc WHERE id_dep='$id_dep' AND id_com='$id_com' AND feature_class!='0'"));
68        else $row = spip_fetch_array(spip_query("SELECT * FROM spip_georgc WHERE id_dep='$id_dep'"));
69        $id[$id_dep.$id_com]=$row;
70        // OK
71        return $row[$what];
72}
73
74function geoportail_georgc ($p,$what, $dep=false)
75{       $id_dep = interprete_argument_balise(1,$p);
76        if ($id_dep=='' || $id_dep==NULL) $id_dep = champ_sql('id_dep', $p);
77        if ($dep) $id_com = "''";
78        else
79        {       $id_com = interprete_argument_balise(2,$p);
80                if ($id_com=='' || $id_com==NULL) $id_com = champ_sql('id_com', $p);
81        }
82        $p->code = 'geoportail_get_rgc('.$id_dep.','.$id_com.',\''.$what.'\')';
83        // Recherche dans la boucle du dessus
84        $p->interdire_scripts = false;
85        return $p;
86}
87
88function balise_NOM_DEP_dist ($p) 
89{       return geoportail_georgc($p,'name', true);
90}
91
92function balise_NOM_COM_dist ($p) 
93{       return geoportail_georgc($p,'name');
94}
95
96function balise_TOP25_dist ($p) 
97{       return geoportail_georgc($p,'map');
98}
99
100function balise_POPULATION_dist ($p) 
101{       return geoportail_georgc($p,'population');
102}
103
104function balise_SURFACE_dist ($p) 
105{       return geoportail_georgc($p,'surface');
106}
107
108/** Critere departement pour les boucles georgc
109        permet de se limiter a la recherche d'un departement.
110*/
111function critere_departement($idb, &$boucles, $crit)
112{       $boucle = &$boucles[$idb];
113        $table = $boucle->id_table;
114        // Critere
115        $boucle->where[]= array ("'='","'$table.feature_class'","0");
116        return;
117}
118
119/** Recherche du nom de departement
120*/
121function geoportail_departement($d)
122{       $query = "SELECT * FROM spip_georgc WHERE feature_class = '0' AND id_dep = '".$d."'";
123        $res = spip_query($query);
124        $row = spip_fetch_array($res);
125
126        $rep = $row['name'];
127        return $rep;
128}
129
130/*========================================
131  Filtres du plugin
132========================================*/
133
134/** Transformation degre/minute/seconde
135*/
136function geoportail_dms($l, $short=false)
137{       if (!is_numeric($l)) return $l;
138       
139        $d = floor($l);
140        $p = ($l-$d)*60;
141        $m = floor($p);
142        if ($m<10) $m = "0$m";
143        $s = round((($p-$m)*600))/10;
144        if ($s<10) $s = "0$s";
145        $str = "$d&deg; $m' $s\"" ;
146        if ($short) $str = str_replace (' ','',$str);
147        return $str;
148}
149
150/** Transformation #LON|geoportail_longitude
151*/
152function geoportail_longitude ($l, $short=false)
153{       if (is_numeric($l))
154        {       if ($l<0) return geoportail_dms(-$l,$short).($short?'':' ')."W";
155                else return geoportail_dms($l,$short).($short?'':' ')."E";
156        }
157        return $l;
158}
159
160/** Transformation #LAT|geoportail_latitude
161*/
162function geoportail_latitude ($l, $short=false)
163{       if (is_numeric($l))
164        {       if ($l<0) return geoportail_dms(-$l,$short).($short?'':' ')."S";
165                else return geoportail_dms($l,$short).($short?'':' ')."N";
166        }
167        return $l;
168}
169?>
Note: See TracBrowser for help on using the repository browser.