You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

231 lines
8.5 KiB

[(#REM)
Saisie carte
Parametres optionnels:
- lat = 48.3 latitude du centre de la carte
- lon = -4.7 longitude du centre de la carte
- zoom = 5 zoom de la carte
- sw_lat = lat - 10° latitude du sud-ouest de la bounding box
- sw_lon = lon - 10° longitude du sud-ouest de la bounding box
- ne_lat = lat + 10° latitude du nord-est de la bounding box
- ne_lon = lon + 10° longitude du nord-est de la bounding box
]
[(#SET{init_lat,#ENV{lat,#CONFIG{gis/lat,0}}})]
[(#SET{init_lon,#ENV{lon,#CONFIG{gis/lon,0}}})]
[(#SET{init_zoom,#ENV{zoom,#CONFIG{gis/zoom,0}}})]
[(#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
Les valeurs par defaut sont "centre +/- 10°", ce qui est naze, mais c'est un cas normalement impossible
]
[(#ENV{lat}|ou{#ENV{lon}}|non|et{#ENV{sw_lat}}|et{#ENV{sw_lon}}|et{#ENV{ne_lat}}|et{#ENV{ne_lon}})
#SET{utiliser_bb, oui}
#SET{init_sw_lat,#ENV{sw_lat,#GET{lat}|moins{10}}}
#SET{init_sw_lon,#ENV{sw_lon,#GET{lon}|moins{10}}}
#SET{init_ne_lat,#ENV{ne_lat,#GET{lat}|plus{10}}}
#SET{init_ne_lon,#ENV{ne_lon,#GET{lon}|plus{10}}}
]
<li class="pleine_largeur editer editer_[(#ENV{nom})][ (#ENV{li_class})][ saisie_(#ENV{type_saisie})]"[ data-id="(#ENV{id_saisie})"]>
#ENV*{inserer_debut}
<div id="map_[(#ENV{nom})]" name="formMap" class="formMap" style="width: 100%; height: 350px"></div>
<script type="text/javascript">
<!--
var form_map;
var annuler_geocoder = 0;
[(#ENV{recherche}|!={non}|oui|et{#CONFIG{gis/geocoder}|oui})
[(#SET{geocoder,oui})]
var geocoder;]
(function($){
var champ_lat = $('#champ_#ENV{champ_lat,lat}');
var champ_lon = $('#champ_#ENV{champ_lon,lon}');
var champ_zoom = $('#champ_#ENV{champ_zoom,zoom}');
var champ_adresse = $('#champ_#ENV{champ_adresse,adresse}');
var champ_code_postal = $('##ENV{champ_code_postal,code_postal}');
var champ_ville = $('#champ_#ENV{champ_ville,ville}');
var champ_region = $('#champ_#ENV{champ_region,region}');
var champ_pays = $('#champ_#ENV{champ_pays,pays}');
var marker = new L.Marker(new L.LatLng(#ENV{lat,0}, #ENV{lon,0}), {draggable: true});
var maj_inputs = function(map,data,action) {
[(#GET{geocoder}|oui)
if (action != 'geocoding') {
var f = geocoder.geocode(data);
}]
var zoom = map.getZoom();
$('#champ_#ENV{champ_zoom,zoom}').val(zoom);
if(action == 'click'){
$('#champ_#ENV{champ_lat,lat}').val(data.lat);
$('#champ_#ENV{champ_lon,lon}').val(data.lng);
annuler_geocoder = 1;
form_map.panTo(data);
marker.setLatLng(data);
}
else if(annuler_geocoder != 1){
if(data.point == 'undefined'){
$('#champ_#ENV{champ_lat,lat}').val(data.lat);
$('#champ_#ENV{champ_lon,lon}').val(data.lng);
form_map.panTo(data);
marker.setLatLng(data);
}else{
$('#champ_#ENV{champ_lat,lat}').val(data.point.lat);
$('#champ_#ENV{champ_lon,lon}').val(data.point.lng);
form_map.panTo(data.point);
marker.setLatLng(data.point);
}
}
if (!marker._map)
form_map.addLayer(marker);
}
[(#GET{geocoder}|oui)
function geocode(query) {
$('#champ_#ENV{champ_adresse,adresse}').val(query.street);
$('#champ_#ENV{champ_code_postal,code_postal}').val(query.postcode);
$('#champ_#ENV{champ_ville,ville}').val(query.locality);
$('#champ_#ENV{champ_region,region}').val(query.region);
$('#champ_#ENV{champ_pays,pays}').val(query.country);
maj_inputs(form_map,query,'geocoding');
}]
var init_map = function() {
// creer la carte
var map_container = 'map_[(#ENV{nom})]';
form_map = new L.Map(map_container);
form_map.attributionControl.setPrefix('');
//default layer
#SET{layer_defaut,#REM|gis_layer_defaut} #SET{layers,#EVAL{$GLOBALS['gis_layers']}}
var [(#GET{layer_defaut})] = [new (#GET{layers}|table_valeur{#GET{layer_defaut}/layer})];
form_map.addLayer([(#GET{layer_defaut})]);
<B_layers>
var layers_control = new L.Control.Layers();
layers_control.addBaseLayer([(#GET{layer_defaut})],["(#GET{layers}|table_valeur{#GET{layer_defaut}/nom})"]);
<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}>[
(#CLE|!={#GET{layer_defaut}}|oui|et{#CLE|in_array{#CONFIG{gis/layers,#ARRAY}}|oui}|oui)
layers_control.addBaseLayer([new (#VALEUR|table_valeur{layer})],"[(#VALEUR|table_valeur{nom})]");]
</BOUCLE_layers>
form_map.addControl(layers_control);
// classe noajax sur le layer_control pour éviter l'ajout de hidden par SPIP
$(layers_control._form).addClass('noajax');
</B_layers>
[(#GET{utiliser_bb}|non)
form_map.setView(new L.LatLng([(#GET{init_lat})], [(#GET{init_lon})]), [(#GET{init_zoom})]);
]
[(#GET{utiliser_bb}|oui)
form_map.fitBounds(
new L.LatLngBounds(
new L.LatLng([(#GET{init_sw_lat})], [(#GET{init_sw_lon})]),
new L.LatLng([(#GET{init_ne_lat})], [(#GET{init_ne_lon})])
)
);
// mettre à jour les champs de latitude et longitude quand la carte est chargée
// a voir si on le fait dans tous les cas, pas seulement pour la boundingbox, comme pour le zoom
form_map.on('load', function(e) {
$('#champ_#ENV{champ_lat,lat}').val(e.latlng.lat);
$('#champ_#ENV{champ_lon,lon}').val(e.latlng.lon);
});
]
[(#GET{geocoder}|oui)
geocoder = new L.Geocoder(geocode);]
[(#REM) Ici on utilise #ENV{lat} et #ENV{lon}, et pas les valeurs
d'initialisation #GET{init_lat} et #GET{init_lon} qui sont toujours remplies]
[(#ENV{lat}|et{#ENV{lon}}|oui)
var data = {
"type": "FeatureCollection",
"features": \[
{"type": "Feature",
"geometry": {"type": "Point", "coordinates": \[#ENV{lon}, #ENV{lat}\]},
"id":"#ENV{id_gis,oui}",
"properties": {
"title":[(#ENV{titre,''}|supprimer_numero|json_encode)],
"description":[(#ENV{descriptif,''}|json_encode)][,(#LOGO_GIS|oui)
[(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]
#SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur}
#SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur}
["icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)],
"icon_size": \[#GET{icon_w},#GET{icon_h}\],
"icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\]]
}
}\]
}
var geojson = new L.geoJson('', {
onEachFeature: function (feature, layer) {
marker = layer;
layer.options.draggable = true;
if (feature.properties && feature.properties.icon){
layer.setIcon(new L.Icon({
iconUrl: feature.properties.icon,
iconSize: new L.Point( feature.properties.icon_size\[0\], feature.properties.icon_size\[1\] ),
iconAnchor: new L.Point( feature.properties.icon_anchor\[0\], feature.properties.icon_anchor\[1\] ),
}));
}
if (feature.properties && feature.properties.title){
layer.bindPopup(feature.properties.title);
}
}
}).addTo(form_map);
geojson.addData(data);]
// mettre a jour les coordonnees quand on clique la carte
form_map.on('click', function(e) {
annuler_geocoder = 0;
maj_inputs(form_map,e.latlng,'click');
});
marker.on("dragend", function(e){
maj_inputs(form_map,e.target._latlng,'click');
});
// mettre à jour le zoom quand on le modifie
form_map.on('zoomend', function(e) {
$('#champ_#ENV{champ_zoom,zoom}').val(e.target._zoom);
});
[(#GET{geocoder}|oui)
// geocoder si clic...
$('a##ENV{nom}_rechercher_geocodage').css("cursor","pointer").click(function(){
var address = $("#champ_#ENV{nom}_geocoder").attr("value");
annuler_geocoder = 0;
geocoder.geocode(address);
});
// ne pas soumettre le formulaire si on presse Entree depuis le champ de recherche
$('#champ_#ENV{nom}_geocoder').keypress(function(e){
if (e.which == 13) {
$('a##ENV{nom}_rechercher_geocodage').trigger("click");
return false;
}
});]
[(#ENV{id_gis}|non|ou{#ENV{id_gis}|=={oui}}|et{#CONFIG{gis/geolocaliser_user_html5}|=={on}}|oui)
form_map.locate({setView: true, maxZoom: [(#GET{init_zoom})]});]
};
$(function(){
init_map();
//[(#ENV{ajaxload}|!={non}|oui)onAjaxLoad(init_map);]
});
})(jQuery);
-->
</script>
#ENV*{inserer_fin}
</li>
[(#GET{geocoder}|oui)
<li class="rechercher_adresse">
<label for="champ_#ENV{nom}_geocoder"><:gis:label_rechercher_address:></label>
<input type="text" class="text" name="champ_#ENV{nom}_geocoder" id="champ_#ENV{nom}_geocoder" value="" />
<a id="#ENV{nom}_rechercher_geocodage"><:info_rechercher:></a>
</li>]