Rev 1664 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
var map = null,
optionsCoucheOSM = {
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors,'
+ ' <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
maxZoom: 18
},
optionsCoucheGoogle = {
attribution: 'Map data ©'+new Date().getFullYear()+' <a href="http://maps.google.com">Google</a>',
maxZoom: 18
},
coucheOSM = new L.TileLayer("http://a.tile.openstreetmap.org/{z}/{x}/{y}.png",
optionsCoucheOSM),
coucheSatellite = new L.TileLayer("http://mt1.google.com/vt/lyrs=y@218131653&hl=fr&src=app&x={x}&y={y}&z={z}",
optionsCoucheGoogle),
optionsCarte = {
center : new L.LatLng(46, 2),
zoom : 6,
layers : [coucheSatellite]
};
var xmlHttpRequest = null,
nombreCollections = 0,
collections = new Array(),
structures = new Array(),
coucheStructures = new L.FeatureGroup(),
infoBulle = null,
chargementEnCours = false;
$(document).ready(function() {
initialiserWidget();
});
$(window).resize(function() {
dimensionnerCarte();
});
function initialiserWidget() {
dimensionnerCarte();
initialiserCarte();
initialiserPanneauControle();
obtenirNombreCollections();
chargerStructures();
}
function dimensionnerCarte() {
$("#map").width($(window).width());
$("#map").height($(window).height());
}
function initialiserCarte() {
map = L.map('map', optionsCarte);
coucheSatellite.addTo(map);
coucheStructures.addTo(map);
map.on('zoomend', function() {
// controle sur le niveau de zoom uniquement a la fin du placement des structures sur la carte
if (chargementEnCours) {
chargementEnCours = false;
verifierZoom();
}
});
}
function initialiserPanneauControle() {
var baseMaps = {
"Plan" : coucheOSM,
"Satellite" : coucheSatellite
};
var overlayMaps = {
"Structures" : coucheStructures
};
L.control.layers(baseMaps, overlayMaps).addTo(map);
}
function obtenirNombreCollections() {
if (departement != '2A' && departement != '2B' && departement != '*' &&
(departement.match(/^\d+$/) == null || parseInt(departement) == 0)) {
alert("La valeur saisie pour le parametre departement (dept) est incorrecte. "+
"Est attendue uniquement un nombre entier positif non nul");
} else {
var url = urlWebService+"CoelRecherche/Nombre/*/*/*/*/*/*/"+departement+"/*/*/";
xmlHttpRequest = $.getJSON(url).complete(function() {
recupererValeurNombreCollections();
});
}
}
function recupererValeurNombreCollections() {
var texte = xmlHttpRequest.responseText;
if (!estStatutRequeteOK()) {
alert(texte);
} else {
nombreCollections = parseInt(eval("(function(){return " + texte + ";})()"));
}
}
function chargerStructures() {
if (requeteEnCours()) {
window.setTimeout('chargerStructures()', 400);
} else {
chargementEnCours = true;
var url = urlWebService+"CoelRecherche/ParDefaut/*/*/*/*/*/*/"+departement+"/*/*/?limit="+nombreCollections;
xmlHttpRequest = $.getJSON(url).complete(function() {
traiterLocalisationsJSON();
});
}
}
function requeteEnCours() {
return (xmlHttpRequest != null && xmlHttpRequest.readyState != 4);
}
function estStatutRequeteOK() {
return ((xmlHttpRequest.status == 200 || xmlHttpRequest.status == 304)
|| xmlHttpRequest.status == 0);
}
function traiterLocalisationsJSON() {
var texte = xmlHttpRequest.responseText;
if (!estStatutRequeteOK()) {
alert(texte);
} else {
collections = eval("(function(){return " + texte + ";})()");
ordonnerCollectionsParStructures();
chargerLocalisations();
}
}
function ordonnerCollectionsParStructures() {
for (var index = 0; index < collections.length; index ++) {
var indexStructure = 0;
while (indexStructure < structures.length && structures[indexStructure].id != collections[index].cs_id_structure) {
indexStructure ++;
}
if (indexStructure == structures.length) {
var structure = {
"id" : collections[index].cs_id_structure,
"nom" : collections[index].cs_nom,
"ville" : collections[index].cs_ville,
"code_postal" : collections[index].cs_code_postal,
"longitude" : collections[index].cs_longitude,
"latitude" : collections[index].cs_latitude,
"collections" : new Array()
};
structures.push(structure);
}
var collection = {
"id" : collections[index].cc_id_collection,
"nom" : collections[index].cc_nom
};
structures[indexStructure].collections.push(collection);
}
}
function chargerLocalisations() {
var nombreStructuresAffichees = 0;
for (var index = 0; index < structures.length; index ++) {
if ((structures[index].longitude != null && structures[index].longitude != "")
&& (structures[index].latitude != null && structures[index].latitude != "")) {
var existeMarqueur = rechercherExistenceMarqueur(structures[index].longitude, structures[index].latitude);
if (!existeMarqueur) {
creerMarqueur(structures[index]);
nombreStructuresAffichees ++;
}
}
}
if (nombreStructuresAffichees > 0) {
map.fitBounds(coucheStructures.getBounds());
}
}
function rechercherExistenceMarqueur(longitude, latitude) {
var existeMarqueur = false;
coucheStructures.eachLayer(function(layer) {
if (layer.getLatLng().lat == latitude && layer.getLatLng().lng == longitude) {
existeMarqueur = true;
}
});
return existeMarqueur;
}
function creerMarqueur(structure) {
var latlng = new L.LatLng(structure.latitude, structure.longitude);
var marqueur = new L.Marker(latlng, {
title : structure.nom
});
marqueur.on('click', surClickMarqueur);
coucheStructures.addLayer(marqueur);
}
function surClickMarqueur(event) {
var latlng = event.target.getLatLng();
var collections = new Array();
var structure = null;
for (var index = 0; index < structures.length; index ++) {
if (structures[index].latitude == latlng.lat && structures[index].longitude == latlng.lng) {
collections = collections.concat(structures[index].collections);
if (structure == null) {
structure = structures[index];
}
}
}
afficherCollections(structure, collections);
}
function afficherCollections(structure, collections) {
masquerInfoBulle();
infoBulle = new L.Popup({maxWidth : 0.25*$(window).width(), maxHeight : 0.35*$(window).height()});
var latlng = new L.LatLng(structure.latitude, structure.longitude);
infoBulle.setLatLng(latlng);
infoBulle.openOn(map);
remplirContenuPopup(structure, collections);
$("a").css("color", "#598000");
map.setView(latlng, map.getZoom());
}
function masquerInfoBulle() {
if (infoBulle != null && map.hasLayer(infoBulle)) {
map.removeLayer(infoBulle);
}
infoBulle = null;
}
function remplirContenuPopup(structure, collections) {
$("#structure").empty();
var structureAjout = {
"id" : structure.id,
"nom" : structure.nom,
"ville" : structure.ville,
"code_postal" : structure.code_postal,
"collections" : collections
};
$("#tpl-structure").tmpl(structureAjout).appendTo($("#structure"));
infoBulle.setContent($("#structure").html());
}
function verifierZoom() {
if(map.getZoom() > 13) {
map.setZoom(13);
}
}