343 lines
12 KiB
JavaScript
Raw Normal View History

2020-08-14 13:36:36 +02:00
//map_data_holder postane holder id-jev potrebnih za prikaz markerjev
var map_data_holder = {};
//id spremenljivke, ki bo prikazana v pojavnem oknu
var spremenljivka_box = 0;
//Procedura, ki preveri ce je gogle maps API ze includan
function googleMapsAPIProcedura(after){
//preveri, ce je google API ze includan (ce se je vedno nanovo icludal, je prislo do errorjev)
if((typeof google === 'object' && typeof google.maps === 'object')){
//API je naloadan, inicializiraj mapo
after();
}
else{
mapsAPIseNi(after);
}
}
//kreiraj colorbox (popup, kjer bo zemljevid)
$(document).ready(function () {
$(".fMap").colorbox({
scrolling:false,
width:"80%",
height:"80%",
title: "",
html:'<div id="map_canvas_all" style="width:100%;height:100%"></div>',
onComplete:function(){
if(!$(".fMap").hasClass("rawData")){
$('#colorbox').addClass("divPopUp");
getMapDataAjax();
}
else{
googleMapsAPIProcedura(initializeMapGeneralForIPs);
}
}
});
});
/**
* ob kliku na link prenesi podatke o zeljeni spremenljivki
* @param {type} sprid - int - id spremenljivke
* @param {type} usrid - int - id userja
* @param {type} loopid - int - id loopa
* @param {type} ankid - int - id ankete
* @param {type} ajaxCall - string - call to ajax function mapData or mapDataAll
* @returns {undefined}
*/
function passMapData(sprid, usrid, loopid, ankid, ajaxCall){
if(!ajaxCall)
ajaxCall = "mapData";
//map_data_holder postane holder id-jev potrebnih za prikaz markerjev kasneje
map_data_holder = {spr_id: sprid, usr_id: usrid, loop_id: loopid, ank_id: ankid, ajaxCall: ajaxCall};
spremenljivka_box = sprid;
}
/**
* Passing raw json data for google maps (originaly used for mod IP location)
* @param {type} rawData - json - [{"Modena":{"cnt":2,"lat":44.666698455810546875,"lng":10.9167003631591796875}}]
* @returns {undefined}
*/
function passMapDataRaw(rawData){
//map_data_holder postane holder id-jev potrebnih za prikaz markerjev kasneje
map_data_holder = rawData;
spremenljivka_box = 'IPloc';
}
//inicializiraj mapo / nastavi mapo v colorboxu
function initializeMapGeneral() {
var mapOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP
};
//pri vpogledu podatkov je viewMode vedno true
viewMode = true;
//infowindow iz API-ja, za prikaz markerja in informacije o markerju
infowindow = new google.maps.InfoWindow();
//deklaracija zemljevida
var mapdiv = document.getElementById("map_canvas_all");
var map = new google.maps.Map(mapdiv, mapOptions);
//to se kasneje uporabi za pridobitev mape z id-em spremenljivke
mapdiv.gMap = map;
//deklaracija mej/okvira prikaza na zemljevidu
bounds[spremenljivka_box] = new google.maps.LatLngBounds();
//to store combined bounds of all polylines or polygons
bounds['all'] = new google.maps.LatLngBounds();
//get input type (marker, polyline, polygon)
var input_type = map_data_holder.input_type;
delete map_data_holder.input_type;
//get subtype (mylocation-1, multilocation-2, chooselocation-3)
var enota = map_data_holder.enota;
delete map_data_holder.enota;
//podvprasanja v infowindow
podvprasanje[spremenljivka_box] = map_data_holder.podvprasanje;
delete map_data_holder.podvprasanje;
//naslov podvprasanja v infowindow
podvprasanje_naslov[spremenljivka_box] = map_data_holder.podvprasanje_naslov;
delete map_data_holder.podvprasanje_naslov;
max_mark[spremenljivka_box] = map_data_holder.length;
ml_sprem[spremenljivka_box] = false;
st_markerjev[spremenljivka_box] = 0;
allMarkers[spremenljivka_box] = [];
if(enota == 3){
map_data_fill(spremenljivka_box, map_data_holder.data, enota);
map_data_fill_info_shapes(spremenljivka_box, map_data_holder.info_shapes);
}
else{
if(input_type == 'marker'){
//nafilaj mapo z markerji
map_data_fill(spremenljivka_box, map_data_holder);
//var soda = spremenljivka_box % 2 == 0;
//if(soda){
// Add a marker clusterer to manage the markers.
var markerCluster = new MarkerClusterer(map, allMarkers[spremenljivka_box],
{imagePath: srv_site_url + 'admin/survey/img_0/markerclusterer/m',
maxZoom: 15});
//}
}
else if(input_type == 'polyline')
map_data_fill_shape(spremenljivka_box, map_data_holder.data, input_type);
else if(input_type == 'polygon')
map_data_fill_shape(spremenljivka_box, map_data_holder.data, input_type);
}
//hide loader
$("#cboxLoadingOverlay").hide();
};
//inicializiraj mapo / nastavi mapo v colorboxu za mod IP location
function initializeMapGeneralForIPs() {
var mapOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP,
streetViewControl: false
};
//infowindow iz API-ja, za prikaz markerja in informacije o markerju
infowindow = new google.maps.InfoWindow();
//deklaracija zemljevida
var mapdiv = document.getElementById("map_canvas_all");
if(!mapdiv)
mapdiv = document.getElementById("map_ip");
var map = new google.maps.Map(mapdiv, mapOptions);
//to se kasneje uporabi za pridobitev mape z id-em spremenljivke
mapdiv.gMap = map;
//deklaracija mej/okvira prikaza na zemljevidu
bounds[spremenljivka_box] = new google.maps.LatLngBounds();
max_mark[spremenljivka_box] = map_data_holder.length;
ml_sprem[spremenljivka_box] = false;
st_markerjev[spremenljivka_box] = 0;
allMarkers[spremenljivka_box] = [];
//close infowindow on zoom because info can change due to clustering
google.maps.event.addListener(map, 'zoom_changed', function() {
infowindow.close();
});
Object.keys(map_data_holder).forEach(function(key) {
//pomnozi markerje glede na frekvence
for(var i=0; i<map_data_holder[key].cnt; i++)
//nafilaj mapo z markerji
if(key!=='')
createMarkerForIps(key, map_data_holder[key].lat, map_data_holder[key].lng);
//ce ni podatka o imenu mesta aka neznana lokacija
else{
delete map_data_holder['']['cnt'];
Object.keys(map_data_holder['']).forEach(function(key) {
//pomnozi markerje glede na frekvence
for(var i=0; i<map_data_holder[''][key].cnt; i++)
//nafilaj mapo z markerji
createMarkerForIps('N/A', map_data_holder[''][key].lat, map_data_holder[''][key].lng);
});
}
});
// Add a marker clusterer to manage the markers.
var markerCluster = new MarkerClusterer(map, allMarkers[spremenljivka_box],
{imagePath: srv_site_url + 'admin/survey/img_0/markerclusterer/m',
maxZoom: 30,
zoomOnClick: false});
google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) {
var markers = cluster.getMarkers();
var array = [];
for (var i = 0; i < markers.length; i++) {
if(array[markers[i].getTitle()])
array[markers[i].getTitle()]++;
else
array[markers[i].getTitle()]=1;
}
//array["N/A"] = array[""];
//delete array[""];
var text = '';
Object.keys(array).forEach(function(key) {
text += '<b>'+array[key]+'</b> '+key+'<br>';
});
if (map.getZoom() <= markerCluster.getMaxZoom()) {
infowindow.setContent(text);
infowindow.setPosition(cluster.getCenter());
infowindow.open(map);
}
});
//hide loader
$("#cboxLoadingOverlay").hide();
};
function createMarkerForIps(key, lat, lng) {
//pridobi mapo spremenljivke
var map = document.getElementById("map_canvas_all");
if(!map)
map = document.getElementById("map_ip").gMap;
else
map = document.getElementById("map_canvas_all").gMap;
//var path_img_dir = srv_site_url + 'admin/survey/img_0/';
var bigIcon = 1;
/*if(map_data_holder[key].cnt > 9999)
bigIcon = 5;
else if(map_data_holder[key].cnt > 999)
bigIcon = 4;
else if(map_data_holder[key].cnt > 99)
bigIcon = 3;
else if(map_data_holder[key].cnt > 9)
bigIcon = 2;*/
var icon = {
//fillColor: '#FF5555',
//url: path_img_dir + 'marker_default.svg',
url: srv_site_url + 'admin/survey/img_0/markerclusterer/m'+bigIcon+'.png',
fillOpacity: 1,
strokeWeight: 1
};
//nastavitve markerja
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
title: key,
map: map,
icon: icon,
label: {
text: /*map_data_holder[key].cnt+''*/'1'
// Add in the custom label here
//fontFamily: 'Roboto, Arial, sans-serif, custom-label-' + map_data_holder[key].cnt
}
});
allMarkers[spremenljivka_box].push(marker);
//Create a div element for container.
var container = document.createElement("div");
//Create a label element for address.
var label = document.createElement("label");
label.innerHTML = '<b>' + 1 + '</b> '+key;
container.appendChild(label);
//listener ob kliku na marker - focus input mora biti po nastavljanju bounds ali zoom
google.maps.event.addListener(marker, 'click', function () {
infowindow.setContent(container);
infowindow.open(map, marker);
});
//nastavi label
infowindow.setContent(container);
//odpre marker - prikaze label (kot da bi ga kliknil)
//infowin.open(map, marker);
//v okvir se doda nov marker
bounds[spremenljivka_box].extend(marker.position);
//ce je samo eden marker, ga malo odzoomaj
if (st_markerjev[spremenljivka_box] == 0) {
map.setCenter(marker.position);
map.setZoom(17);
} else if (st_markerjev[spremenljivka_box] > 0) {
//zemljevid se prilagodi okviru
map.fitBounds(bounds[spremenljivka_box]);
//ce je v viewMode - v podatkih ali analizah - se odzooma za 1 samo pri zadnjem markerju
if (max_mark[spremenljivka_box] == st_markerjev[spremenljivka_box] + 1) {
//zmanjsaj zoom za 1, ker google naredi prevec oddaljeno
google.maps.event.addListenerOnce(map, "bounds_changed", function () {
map.setZoom(map.getZoom() - 1);
});
}
}
//stevilo markerjev se poveca
st_markerjev[spremenljivka_box]++;
}
//pridobi markerje iz baze
function getMapDataAjax() {
//show loader
$("#cboxLoadingOverlay").show();
$.ajax({
cache: false,
crossDomain: true,
type: 'post',
dataType: "json",
url: 'ajax.php?t='+map_data_holder.ajaxCall,
data: { map_data: map_data_holder },
error: function(response) {
console.log("Error in Ajax connection! Please try later!");
},
success: function(response) {
//holder markerjev
map_data_holder = response;
googleMapsAPIProcedura(initializeMapGeneral);
}
});
}
//for IP location navigation
function geoip_map_navigation_toggle(el, data){
var elid = $(el).attr('id');
if(!$(el).hasClass("active")){
if(elid === 'geoip_countries')
document.getElementById("geoip_cities").classList.remove("active");
else
document.getElementById("geoip_countries").classList.remove("active");
$(el).addClass('active');
passMapDataRaw(data);
googleMapsAPIProcedura(initializeMapGeneralForIPs);
}
}