summaryrefslogtreecommitdiffstats
path: root/admin/survey/script/Maps/mapInBox.js
diff options
context:
space:
mode:
Diffstat (limited to 'admin/survey/script/Maps/mapInBox.js')
-rw-r--r--admin/survey/script/Maps/mapInBox.js343
1 files changed, 343 insertions, 0 deletions
diff --git a/admin/survey/script/Maps/mapInBox.js b/admin/survey/script/Maps/mapInBox.js
new file mode 100644
index 0000000..03bb139
--- /dev/null
+++ b/admin/survey/script/Maps/mapInBox.js
@@ -0,0 +1,343 @@
+//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);
+ }
+} \ No newline at end of file