1 | [(#REM) |
---|
2 | |
---|
3 | Modele carte_gis |
---|
4 | |
---|
5 | Parametres : |
---|
6 | |
---|
7 | - id_map|id_carte_gis = 1 id de la carte |
---|
8 | - lat|latit|latitude = 48.3 latitude du centre de la carte |
---|
9 | - lon|lonxit|longitude = -4.7 longitude du centre de la carte |
---|
10 | - zoom = 5 zoom de la carte |
---|
11 | - sw_lat = lat - 10° latitude du sud-ouest de la bounding box |
---|
12 | - sw_lon = lon - 10° longitude du sud-ouest de la bounding box |
---|
13 | - ne_lat = lat + 10° latitude du nord-est de la bounding box |
---|
14 | - ne_lon = lon + 10° longitude du nord-est de la bounding box |
---|
15 | - width|largeur = 100% largeur de la carte, 100% par defaut |
---|
16 | - height|hauteur = 400px hauteur de la carte, 400px par defaut |
---|
17 | - style = non ne pas styler la carte |
---|
18 | - zoom_molette|zoom_wheel = non désactiver le zoom avec la molette de la souris, actif par defaut |
---|
19 | - fullscreen = oui afficher un bouton pour passer la carte en plein écran |
---|
20 | - control_type|controle_type = non ne pas afficher les controles de changement de type |
---|
21 | - no_control|aucun_controle = oui ne pas afficher les controles de la carte |
---|
22 | - scale = oui afficher l'échelle de la carte |
---|
23 | - limit|limite = 500 nombre max de marqueurs à afficher, 500 par defaut |
---|
24 | - objets = gis type d'objets à afficher (fichier json/gis_xx qui génère la source de donnees) |
---|
25 | - autocenterandzoom|centrer_auto = oui centrer et zoomer la carte automatiquement pour afficher tous les marqueurs |
---|
26 | - kml = 12 kml à superposer à la carte (id_document ou url) |
---|
27 | - gpx = 12 gpx à superposer à la carte (id_document ou url) |
---|
28 | - localize_visitor|localiser_visiteur = oui centrer la carte sur la position du visiteur (API geolocation HTML5) |
---|
29 | - point = non si elle vaut "non" cette option n'affichera pas de points du tout (utile pour n'afficher qu'un kml par exemple) |
---|
30 | X - ajaxload = non si elle vaut "non" cette option désactive l'init de la carte sur l'event ajaxload |
---|
31 | - media = non permet de passer le critère 'media' (pour les documents) |
---|
32 | |
---|
33 | ] |
---|
34 | |
---|
35 | [(#SET{width,#ENV{width,#ENV{largeur,100%}}})] |
---|
36 | [(#SET{height,#ENV{height,#ENV{hauteur,400px}}})] |
---|
37 | [(#SET{id,#ENV{id_carte_gis,#ENV{id_map,#ENV{id,1}}}})] |
---|
38 | [(#REM) -- compat gis v1 -- ] |
---|
39 | [(#SET{lat,#ENV{lat,#ENV{latit,#ENV{latitude,#CONFIG{gis/lat,0}}}}})] |
---|
40 | [(#SET{lon,#ENV{lon,#ENV{lonxit,#ENV{longitude,#CONFIG{gis/lon,0}}}}})] |
---|
41 | [(#REM) On utilise la bounding box seulement si le centre n'a pas été donné et si les quatre valeurs de la bounding box sont renseignées |
---|
42 | les valeurs par defaut sont "centre +/- 10°", ce qui est naze, mais c'est un cas normalement impossible |
---|
43 | ] |
---|
44 | [(#ENV{lat}|ou{#ENV{lon}}|non|et{#ENV{sw_lat}}|et{#ENV{sw_lon}}|et{#ENV{ne_lat}}|et{#ENV{ne_lon}}) |
---|
45 | #SET{utiliser_bb, oui} |
---|
46 | #SET{sw_lat,#ENV{sw_lat,#GET{lat}|moins{10}}} |
---|
47 | #SET{sw_lon,#ENV{sw_lon,#GET{lon}|moins{10}}} |
---|
48 | #SET{ne_lat,#ENV{ne_lat,#GET{lat}|plus{10}}} |
---|
49 | #SET{ne_lon,#ENV{ne_lon,#GET{lon}|plus{10}}} |
---|
50 | ] |
---|
51 | |
---|
52 | <div id="map[(#GET{id})]" class="carte_gis"[(#ENV{style}|!={'non'}|?{' '})style="[width:(#GET{width});][ height:(#GET{height});]"]></div> |
---|
53 | |
---|
54 | <script type="text/javascript">/*<!\[CDATA\[*/ |
---|
55 | |
---|
56 | var map[(#GET{id})]; |
---|
57 | |
---|
58 | (function($){ |
---|
59 | |
---|
60 | var init_map[(#GET{id})] = function() { |
---|
61 | var map_container = 'map[(#GET{id})]'; |
---|
62 | |
---|
63 | map[(#GET{id})] = new L.Map(map_container,{ |
---|
64 | scrollWheelZoom: [(#ENV{zoom_molette,#ENV{zoom_wheel}}|=={non}|?{false,true})], |
---|
65 | zoomControl: [(#ENV{no_control,#ENV{aucun_controle}}|!={oui}|?{true,false})] |
---|
66 | }); |
---|
67 | |
---|
68 | [(#GET{utiliser_bb}|non) |
---|
69 | map[(#GET{id})].setView(new L.LatLng([(#GET{lat})], [(#GET{lon})]), [(#ENV{zoom,#CONFIG{gis/zoom,0}})]);] |
---|
70 | |
---|
71 | [(#GET{utiliser_bb}|oui) |
---|
72 | map[(#GET{id})].fitBounds( |
---|
73 | new L.LatLngBounds( |
---|
74 | new L.LatLng([(#GET{sw_lat})], [(#GET{sw_lon})]), |
---|
75 | new L.LatLng([(#GET{ne_lat})], [(#GET{ne_lon})]) |
---|
76 | ) |
---|
77 | );] |
---|
78 | |
---|
79 | //default layer |
---|
80 | #SET{layer_defaut,#REM|gis_layer_defaut} #SET{layers,#EVAL{$GLOBALS['gis_layers']}} |
---|
81 | var [(#GET{layer_defaut})] = [new (#GET{layers}|table_valeur{#GET{layer_defaut}/layer})]; |
---|
82 | map[(#GET{id})].addLayer([(#GET{layer_defaut})]); |
---|
83 | |
---|
84 | <B_layers> |
---|
85 | var layers_control = new L.Control.Layers(); |
---|
86 | layers_control.addBaseLayer([(#GET{layer_defaut})],["(#GET{layers}|table_valeur{#GET{layer_defaut}/nom})"]); |
---|
87 | <BOUCLE_layers(DATA){source table, #GET{layers}}{si #ENV{control_type,#ENV{controle_type}}|!={non}|et{#ENV{no_control,#ENV{aucun_controle}}|!={oui}}|et{#CONFIG{gis/layers,#ARRAY}|count|>{1}|oui}|oui}>[ |
---|
88 | (#CLE|!={#GET{layer_defaut}}|oui|et{#CLE|in_array{#CONFIG{gis/layers,#ARRAY}}|oui}|oui) |
---|
89 | layers_control.addBaseLayer([new (#VALEUR|table_valeur{layer})],"[(#VALEUR|table_valeur{nom})]");] |
---|
90 | </BOUCLE_layers> |
---|
91 | map[(#GET{id})].addControl(layers_control); |
---|
92 | // classe noajax sur le layer_control pour éviter l'ajout de hidden par SPIP |
---|
93 | $(layers_control._form).addClass('noajax'); |
---|
94 | </B_layers> |
---|
95 | |
---|
96 | map[(#GET{id})].setView(new L.LatLng(#GET{lat},#GET{lon}),#ENV{zoom,#CONFIG{gis/zoom,0}}); |
---|
97 | |
---|
98 | map[(#GET{id})].attributionControl.setPrefix(''); |
---|
99 | |
---|
100 | [(#ENV{scale}|et{#ENV{no_control,#ENV{aucun_controle}}|!={oui}}|oui) |
---|
101 | map[(#GET{id})].addControl(new L.Control.Scale()); |
---|
102 | ][(#ENV{fullscreen}|et{#ENV{no_control,#ENV{aucun_controle}}|!={oui}}|oui) |
---|
103 | map[(#GET{id})].addControl(new L.Control.FullScreen()); |
---|
104 | ] |
---|
105 | |
---|
106 | [(#ENV{point}|!={non}|oui) |
---|
107 | jQuery.getJSON("[(#URL_PAGE{gis_json}|url_absolue)]", |
---|
108 | {[ |
---|
109 | objets : "(#ENV{objets,#ENV{class}}|trim)",][ |
---|
110 | id_rubrique : (#ENV{id_rubrique}|trim),][ |
---|
111 | id_secteur : (#ENV{id_secteur}|trim),][ |
---|
112 | id_parent : (#ENV{id_parent}|trim),][ |
---|
113 | id_article : (#ENV{id_article}|trim),][ |
---|
114 | id_breve : (#ENV{id_breve}|trim),][ |
---|
115 | id_document : (#ENV{id_document}|trim),][ |
---|
116 | media : "(#ENV{media}|trim)",][ |
---|
117 | id_mot : (#ENV{id_mot}|trim),][ |
---|
118 | id_groupe : (#ENV{id_groupe}|trim),][ |
---|
119 | id_auteur : (#ENV{id_auteur}|trim),][ |
---|
120 | id_syndic : (#ENV{id_syndic}|trim),][ |
---|
121 | id_forum : (#ENV{id_forum}|trim),][ |
---|
122 | id_evenement : (#ENV{id_evenement}|trim),][ |
---|
123 | id_gis : (#ENV{id_gis}|trim),][ |
---|
124 | recherche : "(#ENV{recherche})",][ |
---|
125 | mots : (#ENV{mots}|?{[(#ENV{mots}|trim|json_encode)],''}),][ |
---|
126 | limit : (#ENV{limit,#ENV{limite,500}}|trim)] |
---|
127 | }, |
---|
128 | function(data) { |
---|
129 | if (data){ |
---|
130 | var geojson = new L.geoJson('', { |
---|
131 | onEachFeature: function (feature, layer) { |
---|
132 | if (feature.properties && feature.properties.icon){ |
---|
133 | layer.setIcon(new L.Icon({ |
---|
134 | iconUrl: feature.properties.icon, |
---|
135 | iconSize: new L.Point( feature.properties.icon_size\[0\], feature.properties.icon_size\[1\] ), |
---|
136 | iconAnchor: new L.Point( feature.properties.icon_anchor\[0\], feature.properties.icon_anchor\[1\] ), |
---|
137 | })); |
---|
138 | } |
---|
139 | if (feature.properties && feature.properties.title){ |
---|
140 | layer.bindPopup(feature.properties.title); |
---|
141 | } |
---|
142 | } |
---|
143 | }).addTo(map[(#GET{id})]); |
---|
144 | geojson.addData(data); |
---|
145 | [(#ENV{autocenterandzoom,#ENV{centrer_auto}}|oui) |
---|
146 | map[(#GET{id})].fitBounds(geojson.getBounds());] |
---|
147 | } |
---|
148 | } |
---|
149 | );] |
---|
150 | |
---|
151 | <BOUCLE_test_kml(CONDITION){si (#ENV{kml}|oui)}> |
---|
152 | #SET{kml, #ENV{kml}} |
---|
153 | [(#GET{kml}|is_array|non) #SET{kml, #ARRAY{0,#GET{kml}}} ] |
---|
154 | <BOUCLE_kml(POUR){tableau #GET{kml}}> |
---|
155 | [(#VALEUR|intval|oui) |
---|
156 | var kml_#COMPTEUR_BOUCLE = new L.KML(['(#VALEUR|generer_url_entite{document}|url_absolue)'], {async: true}); ] |
---|
157 | [(#VALEUR|intval|non) |
---|
158 | var kml_#COMPTEUR_BOUCLE = new L.KML(['(#VALEUR|copie_locale)'], {async: true}); ] |
---|
159 | kml_#COMPTEUR_BOUCLE.on("loaded", function(e) { map[(#GET{id})].fitBounds(e.target.getBounds()); }); |
---|
160 | map[(#GET{id})].addLayer(kml_#COMPTEUR_BOUCLE); |
---|
161 | </BOUCLE_kml> |
---|
162 | </BOUCLE_test_kml> |
---|
163 | <BOUCLE_test_gpx(CONDITION){si (#ENV{gpx}|oui)}> |
---|
164 | #SET{gpx, #ENV{gpx}} |
---|
165 | [(#GET{gpx}|is_array|non) #SET{gpx, #ARRAY{0,#GET{gpx}}} ] |
---|
166 | <BOUCLE_gpx(POUR){tableau #GET{gpx}}> |
---|
167 | [(#VALEUR|intval|oui) |
---|
168 | var gpx_#COMPTEUR_BOUCLE = new L.GPX(['(#VALEUR|generer_url_entite{document}|url_absolue)'], {async: true}); ] |
---|
169 | [(#VALEUR|intval|non) |
---|
170 | var gpx_#COMPTEUR_BOUCLE = new L.GPX(['(#VALEUR|copie_locale)'], {async: true}); ] |
---|
171 | gpx_#COMPTEUR_BOUCLE.on("loaded", function(e) { map[(#GET{id})].fitBounds(e.target.getBounds()); }); |
---|
172 | map[(#GET{id})].addLayer(gpx_#COMPTEUR_BOUCLE); |
---|
173 | </BOUCLE_gpx> |
---|
174 | </BOUCLE_test_gpx> |
---|
175 | |
---|
176 | [(#ENV{localize_visitor,#ENV{localiser_visiteur}}|oui) |
---|
177 | map[(#GET{id})].locate({setView: true, maxZoom: [(#ENV{zoom,#CONFIG{gis/zoom,0}})]});] |
---|
178 | |
---|
179 | } |
---|
180 | |
---|
181 | $(function(){ |
---|
182 | jQuery.getScript('[(#PRODUIRE{fond=javascript/gis.js}|compacte)]',function(){ |
---|
183 | init_map[(#GET{id})](); |
---|
184 | }); |
---|
185 | //[(#ENV{ajaxload}|!={non}|oui)onAjaxLoad(init_map[(#GET{id})]);] |
---|
186 | }); |
---|
187 | |
---|
188 | })(jQuery); |
---|
189 | /*\]\]>*/ |
---|
190 | </script> |
---|