function ajaxPost(url, data, cb_success, cb_failed) { var ar = new XMLHttpRequest(); ar.cb_success = cb_success; ar.cb_failed = cb_failed; ar.addEventListener("readystatechange", ajaxPostProgress); ar.open("POST", url, true); ar.setRequestHeader("Content-Type", "application/json"); //ar.setRequestHeader("Content-Type", "application/json; charset=utf-8"); ar.send(data); } function ajaxPostProgress(e) { var request = e.target; var cb_success = request.cb_success; var cb_failed = request.cb_failed; switch (request.readyState) { case 4: switch (request.status) { case 200: cb_success(request.responseText); break; default: if (cb_failed) cb_failed(request); break; } break; default: break; } } function FormSendFailed(response_obj) { console.log("FormSendFailed"); console.log(response_obj); putNotify(response_obj.status + " Form Send Failed", tryDecodeException(response_obj.responseText)); } // ---- GeoPoint for picker and viewer ---- function GeoPoint() { var lat_divider_32 = 23860929.41111; // -90...+90 (2147483648 - 1) / 90 ~= 23860929,41111111 var lon_divider_32 = 11930464.70555; // -180...+180 (2147483648 - 1) / 180 ~= 11930464,70555556 // lon: 1 step = 0,00000008381903 8,38e-8 var lat = 0; var lon = 0; this.fromFrac = function(lat_frac, lon_frac) { lat = lat_frac; lon = lon_frac; } this.fromInt = function(lat_int, lon_int) { lat = lat_int / lat_divider_32; lon = lon_int / lon_divider_32; } this.getLatFrac = function() { return lat; } this.getLonFrac = function() { return lon; } this.getLatInt = function() { //return (int)Math.round(m_lat * lat_divider_32); return Math.round(lat * lat_divider_32); } this.getLonInt = function() { //return (int)Math.round(m_lon * lon_divider_32); return Math.round(lon * lon_divider_32); } this.getLatDeg = function() { return Math.floor(lat); } this.getLatMin = function() { var minutes = (lat - this.getLatDeg()) * 60; return Math.floor(minutes); } this.getLatSec = function() { var minutes = (lat - this.getLatDeg()) * 60; var int_minutes = Math.floor(minutes); var seconds = (minutes - int_minutes) * 60; return Math.floor(seconds); } this.getLonDeg = function() { return Math.floor(lon); } this.getLonMin = function() { var minutes = (lon - this.getLonDeg()) * 60; return Math.floor(minutes); } this.getLonSec = function() { var minutes = (lon - this.getLonDeg()) * 60; var int_minutes = Math.floor(minutes); var seconds = (minutes - int_minutes) * 60; return Math.floor(seconds); } } // ---- Geo picker ---- function GeoPicker(container_id, lat_name, default_lat, lon_name, default_lon) { //console.log("create GeoPicker()"); var geo_point = new GeoPoint(); geo_point.fromInt(default_lat, default_lon); var div_container = document.getElementById(container_id); var map_container; // ---- lat ---- // var div_container_lat = document.createElement('DIV'); div_container.appendChild(div_container_lat); var input_lat = document.createElement('INPUT'); div_container_lat.appendChild(input_lat); input_lat.type = 'hidden'; input_lat.name = lat_name; input_lat.value = geo_point.getLatInt(); //input.style.marginRight = '6px'; var input_lat_frac = document.createElement('INPUT'); div_container.appendChild(input_lat_frac); input_lat_frac.style.width = '130px'; input_lat_frac.addEventListener('change', updateFromFrac); input_lat_frac.value = geo_point.getLatFrac(); div_container.append(' = '); var input_lat_deg = document.createElement('INPUT'); div_container.appendChild(input_lat_deg); input_lat_deg.style.width = '20px'; input_lat_deg.addEventListener('change', updateFromDeg); input_lat_deg.value = geo_point.getLatDeg(); div_container.append('° '); //div_container.append(' '); var input_lat_min = document.createElement('INPUT'); div_container.appendChild(input_lat_min); input_lat_min.style.width = '20px'; input_lat_min.addEventListener('change', updateFromDeg); input_lat_min.value = geo_point.getLatMin(); div_container.append('\' '); var input_lat_sec = document.createElement('INPUT'); div_container.appendChild(input_lat_sec); input_lat_sec.style.width = '20px'; input_lat_sec.addEventListener('change', updateFromDeg); input_lat_sec.value = geo_point.getLatSec(); div_container.append('" '); // ---- lon ---- // var div_container_lon = document.createElement('DIV'); div_container.appendChild(div_container_lon); var input_lon = document.createElement('INPUT'); div_container.appendChild(input_lon); input_lon.type = 'hidden'; input_lon.name = lon_name; input_lon.value = geo_point.getLonInt(); var input_lon_frac = document.createElement('INPUT'); div_container.appendChild(input_lon_frac); input_lon_frac.style.width = '130px'; input_lon_frac.addEventListener('change', updateFromFrac); input_lon_frac.value = geo_point.getLonFrac(); div_container.append(' = '); var input_lon_deg = document.createElement('INPUT'); div_container.appendChild(input_lon_deg); input_lon_deg.style.width = '20px'; input_lon_deg.addEventListener('change', updateFromDeg); input_lon_deg.value = geo_point.getLonDeg(); div_container.append('° '); var input_lon_min = document.createElement('INPUT'); div_container.appendChild(input_lon_min); input_lon_min.style.width = '20px'; input_lon_min.addEventListener('change', updateFromDeg); input_lon_min.value = geo_point.getLonMin(); div_container.append('\' '); var input_lon_sec = document.createElement('INPUT'); div_container.appendChild(input_lon_sec); input_lon_sec.style.width = '20px'; input_lon_sec.addEventListener('change', updateFromDeg); input_lon_sec.value = geo_point.getLonSec(); div_container.append('" '); // ---- pick button ---- // var div_container_button = document.createElement('DIV'); div_container.appendChild(div_container_button); var input_pick = document.createElement('INPUT'); div_container_button.appendChild(input_pick); input_pick.type = 'button'; input_pick.value = 'Карта'; input_pick.addEventListener('click', openPicker); //todo updateFromHidden(); // ---------------- Methods ---------------- // function updateFromHidden() { ////unpack to var lat //convert to FRAC //set var ////set values of inputs //convert to DEG //set deg } function updateFromFrac() { geo_point.fromFrac(input_lat_frac.value, input_lon_frac.value); //convert to INT //set hidden input_lat.value = geo_point.getLatInt(); input_lon.value = geo_point.getLonInt(); //convert to DEG //set deg input_lat_deg.value = geo_point.getLatDeg(); input_lat_min.value = geo_point.getLatMin(); input_lat_sec.value = geo_point.getLatSec(); input_lon_deg.value = geo_point.getLonDeg(); input_lon_min.value = geo_point.getLonMin(); input_lon_sec.value = geo_point.getLonSec(); } function updateFromDeg() { //convert to FRAC //set var //convert to INT //set hidden } function openPicker() { var leaflet_css = document.createElement('LINK'); leaflet_css.rel = 'StyleSheet'; leaflet_css.href = '/leaflet/leaflet.css'; document.head.appendChild(leaflet_css); var leaflet_script = document.createElement('SCRIPT'); leaflet_script.src = '/leaflet/leaflet.js'; document.head.appendChild(leaflet_script); leaflet_script.onload = function() { //x //console.log("leaflet script loaded."); openPickerB(); } //x //console.log("leaflet script load started."); } function openPickerB() { map_container = document.createElement('DIV'); map_container.id = 'map'; // 1 map_container.style.width = window.innerWidth + 'px'; map_container.style.height = window.innerHeight + 'px'; map_container.style.position = 'fixed'; //2 map_container.style.left = '0'; //2 map_container.style.top = '0'; //2 map_container.style.padding = '160px'; map_container.style.left = '16px'; // 1 map_container.style.top = '16px'; // 1 map_container.style.width = (window.innerWidth - 32) + 'px'; // 1 map_container.style.height = (window.innerHeight - 32) + 'px'; // 1 map_container.style.border = '1px solid #000'; // 1 div_container.appendChild(map_container); //2 map_container_2 = document.createElement('DIV'); //2 map_container_2.id = 'map'; //2 //2 map_container_2.style.height = '100%'; //2 //2 map_container_2.style.margin = '16px'; //2 //2 map_container_2.style.border = '1px solid #000'; //2 //2 map_container.appendChild(map_container_2); // ---- close button ---- var close_container = document.createElement('DIV'); close_container.style.position = 'relative'; close_container.style.cssFloat = 'right'; close_container.style.marginRight = '8px'; close_container.style.marginTop = '8px'; close_container.style.zIndex = 10000; close_container.style.background = '#fff'; close_container.style.cursor = 'default'; close_container.style.width = '32px'; close_container.style.height = '32px'; close_container.style.border = '1px solid #000'; close_container.style.fontSize = '16pt'; close_container.style.textAlign = 'center'; close_container.append('X'); close_container.addEventListener('click', closePicker); map_container.appendChild(close_container); // ---- override 0 ---- if (geo_point.getLatInt() == 0 && geo_point.getLonInt() == 0) { var lat; var lon; if (localStorage["geo_picker_lat"] != undefined) { // && localStorage["geo_picker_lon"] != undefined lat = parseInt(localStorage["geo_picker_lat"]); lon = parseInt(localStorage["geo_picker_lon"]); } else { lat = 1224320876; lon = 452135509; } geo_point.fromInt(lat, lon); //updateFromHidden(); } var map = L.map('map', {center: [geo_point.getLatFrac(), geo_point.getLonFrac()], zoom: 17}); // var map = L.map('map', {center: [geo_point.getLatFrac(), geo_point.getLonFrac()], zoom: 19}); //r map.addLayer(L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png')); map.addLayer(L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', { maxZoom: 19 })); //map.addLayer(L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png')); //var marker = L.marker([51.30167, 37.85086], {title: 'hi'}).addTo(map); var center_marker = L.marker([default_lat, default_lon]).addTo(map); //marker.bindPopup("Hello world!
I am a popup."); function moveCenterMarker() { var point = map.getCenter(); center_marker.setLatLng(point); var geo1 = new GeoPoint(); geo1.fromFrac(point.lat, point.lng); console.log("lat: " + geo1.getLatInt()); console.log("lon: " + geo1.getLonInt()); localStorage["geo_picker_lat"] = geo1.getLatInt(); localStorage["geo_picker_lon"] = geo1.getLonInt(); } map.on('drag', moveCenterMarker); moveCenterMarker(); function updatePoint() { var point = map.getCenter(); var lat_frac = Math.round(point.lat * 10000000) / 10000000; var lon_frac = Math.round(point.lng * 10000000) / 10000000; setGeoPointFrac(lat_frac, lon_frac); }; map.on('dragend', updatePoint); //updatePoint(); } function closePicker() { //console.log('closePicker()'); div_container.removeChild(map_container); } //x function getLatFrac() { //x return lat; //x } //x function getLonFrac() { //x return lon; //x } function setGeoPointFrac(lat_frac, lon_frac) { input_lat_frac.value = lat_frac; input_lon_frac.value = lon_frac; updateFromFrac(); } } // ---- Geo view holder ---- function GeoViewHolder(reloadMarkers1, geo_view_list_id_1) { var holder = this; this.h_point_id; this.geo_view_map; this.geo_view_markers; this.geo_view_list_id = geo_view_list_id_1; this.reloadMarkers = function() { //console.log("this.reloadMarkers()"); //console.log("this.h_point_id: " + holder.h_point_id); //console.log("this.geo_view_map: " + holder.geo_view_map); //console.log("this.geo_view_markers: " + holder.geo_view_markers); //console.log("this.geo_view_list_id: " + holder.geo_view_list_id); reloadMarkers1(holder); } this.show = function(lat_view, lon_view, point_id = undefined) { this.h_point_id = point_id; GeoView(lat_view, lon_view, this); } this.hide = function() {} } // ---- Geo view ---- function GeoView(lat_view, lon_view, holder = undefined) { //console.log("GeoView()"); //x geo_view_point_id = point_id; var map_container; var geo_point = new GeoPoint(); geo_point.fromInt(lat_view, lon_view); //x var div_container = document.createElement('DIV'); //x document.body.appendChild(div_container); openView(); function openView() { var leaflet_css = document.createElement('LINK'); leaflet_css.rel = 'StyleSheet'; leaflet_css.href = '/leaflet/leaflet.css'; document.head.appendChild(leaflet_css); var leaflet_script = document.createElement('SCRIPT'); leaflet_script.src = '/leaflet/leaflet.js'; document.head.appendChild(leaflet_script); leaflet_script.onload = openViewB; } function openViewB() { map_container = document.createElement('DIV'); map_container.id = 'map'; map_container.style.position = 'fixed'; map_container.style.left = '16px'; map_container.style.top = '16px'; map_container.style.width = (window.innerWidth - 32) + 'px'; map_container.style.height = (window.innerHeight - 32) + 'px'; map_container.style.border = '1px solid #000'; document.body.appendChild(map_container); var close_container = document.createElement('DIV'); close_container.style.position = 'relative'; close_container.style.cssFloat = 'right'; close_container.style.marginRight = '8px'; close_container.style.marginTop = '8px'; close_container.style.zIndex = 10000; close_container.style.background = '#fff'; close_container.style.cursor = 'default'; close_container.style.width = '32px'; close_container.style.height = '32px'; close_container.style.border = '1px solid #000'; close_container.style.fontSize = '16pt'; close_container.style.textAlign = 'center'; close_container.append('X'); close_container.addEventListener('click', closeView); map_container.appendChild(close_container); var map = L.map('map', {center: [geo_point.getLatFrac(), geo_point.getLonFrac()], zoom: 17}); //x geo_view_map = map; // ad-hoc map.addLayer(L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png')); var myIcon = L.icon({ iconUrl: '/leaflet/images/marker-iconr.png', iconRetinaUrl: '/leaflet/images/marker-iconr-2x.png', iconSize: [25, 41], iconAnchor: [12, 41], popupAnchor: [1, -34], shadowUrl: '/leaflet/images/marker-shadow.png', shadowRetinaUrl: '/leaflet/images/marker-shadow.png', shadowSize: [41, 41], shadowAnchor: [12, 41] }); var center_marker = L.marker([lat_view, lon_view], {icon: myIcon, zIndexOffset: 1000}).addTo(map); var point = map.getCenter(); center_marker.setLatLng(point); // ---- reload markers ---- if (holder != undefined) { //console.log("put map to holder"); holder.geo_view_map = map; holder.reloadMarkers(); map.on('dragend', holder.reloadMarkers); map.on('zoomend', holder.reloadMarkers); } } function closeView() { document.body.removeChild(map_container); } } // ---- reloadMarkers example //var geo_view_markers; //var geo_view_map; function reloadMarkersExample(holder) { //console.log("reloadMarkersExample();"); //console.log(holder); var geo_view_map = holder.geo_view_map; // var geo_view_markers = holder.geo_view_markers; var geo_view_list_id = holder.geo_view_list_id; var geo_view_point_id = holder.h_point_id; //console.log("geo_view_point_id: " + geo_view_point_id); //console.log("geo_view_markers: " + geo_view_markers); //console.log("geo_view_map: " + geo_view_map); if (holder.geo_view_markers) geo_view_map.removeLayer(holder.geo_view_markers); holder.geo_view_markers = new L.FeatureGroup(); var putMarkers = function(r, b) { //console.log('putMarkers()'); //console.log(r); r = JSON.parse(r); if (r['points'] == undefined) return; //console.log(r['points'].length); if (r['points'].length == 0) return; var gp = new GeoPoint(); for (var i in r['points']) { //console.log("i: " + i); //console.log(r['points'][i]); var pt = r['points'][i]; if (pt[0] == geo_view_point_id) { //console.log("skipped"); continue; } //console.log(r[i]); gp.fromInt(pt[1], pt[2]); var marker = L.marker([gp.getLatFrac(), gp.getLonFrac()], {title: pt[3]}); holder.geo_view_markers.addLayer(marker); } //console.log("geo_view_map: " + geo_view_map); geo_view_map.addLayer(holder.geo_view_markers); } var bound = geo_view_map.getBounds(); var point_tl = new GeoPoint(); point_tl.fromFrac(bound._northEast.lat, bound._northEast.lng); var point_br = new GeoPoint(); point_br.fromFrac(bound._southWest.lat, bound._southWest.lng); //console.log("bound._northEast.lng: " + bound._northEast.lng + ", bound._southWest.lng: " + bound._southWest.lng); var send_data = { list: geo_view_list_id, nlat: point_tl.getLatInt(), elon: point_tl.getLonInt(), slat: point_br.getLatInt(), wlon: point_br.getLonInt() }; ajaxPost('/a/poi/mp/', JSON.stringify(send_data), putMarkers, FormSendFailed); // cachedLoadFailed } function PanoMap(map_id, params) { const deg_to_rad = Math.PI / 180; const _this = this; var div_map; var map; var layer_grave; var layer_pano; var init_lat = 51.3119; var init_lon = 37.8967; var init_zoom = 15; var grave_hl = 0; window.addEventListener("DOMContentLoaded", initPanoMap); function initPanoMap(e) { //console.log("initGraveMap()"); div_map = document.getElementById(map_id); if (module == "") { var nav_bar_height = 0; } else { var nav_bar_height = 56; } //div_map.style.left = "16px"; // 1 //div_map.style.top = "16px"; // 1 div_map.style.width = (window.innerWidth - 18) + "px"; div_map.style.height = (window.innerHeight - nav_bar_height - 18) + "px"; div_map.style.border = "1px solid #888"; loadLeaflet(); } function loadLeaflet() { var leaflet_css = document.createElement("LINK"); leaflet_css.rel = "StyleSheet"; leaflet_css.href = "/leaflet/leaflet.css"; document.head.appendChild(leaflet_css); var leaflet_script = document.createElement("SCRIPT"); leaflet_script.src = "/leaflet/leaflet.js"; document.head.appendChild(leaflet_script); leaflet_script.onload = function() { //console.log("leaflet loaded"); openMap(); } } function openMap() { if (params["lat"] != undefined) { init_lat = params["lat"]; } if (params["lon"] != undefined) { init_lon = params["lon"]; } if (params["zoom"] != undefined) { init_zoom = params["zoom"]; } //r map = L.map(div_map, { center: [init_lat, init_lon], zoom: init_zoom, maxZoom: 21, scrollWheelZoom: "center" } ); // , zoomDelta: 0.1, zoomSnap: 0.1 map = L.map(div_map, { center: [init_lat, init_lon], zoom: init_zoom, maxZoom: 21 } ); // , zoomDelta: 0.1, zoomSnap: 0.1 map.addLayer(L.tileLayer("https://{s}.tile.osm.org/{z}/{x}/{y}.png", { maxNativeZoom:19, maxZoom: 21 } )); //"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" //2 map.addLayer(L.tileLayer("https://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}", { maxNativeZoom:20, maxZoom: 21, subdomains:["mt0","mt1","mt2","mt3"] } )); //var marker = L.marker([51.30167, 37.85086], {title: "hi"}).addTo(map); //var center_marker = L.marker([default_lat, default_lon]).addTo(map); //console.log("params:" + params); //if (params == undefined) return; //x if (params["sectors"] != undefined) { //x appendSectors(); //x } //x if (params["graves"] != undefined) { //x if (params["grave"] != undefined) { //x grave_hl = params["grave"]; //x } //x //x//1 appendGraves(); //x appendGraves(params["graves"]); //x } //console.log("par upd: " + params["update"]); if (params["update"] != undefined) { // map.on("dragend", params["update"](_this)); params["update"].setMap(_this); // map.on("dragend", params["update"].reload); // map.on("move", function(){console.log("move")}); map.on("moveend", params["update"].reload); // map.on("zoom", params["update"].reload); params["update"].reload(); // initial reaload } } // ---- append sectors' markers ---------------- //x function appendSectors() { //x var array_sectors = params["sectors"]; //x //x for (var i = 0; i < array_sectors.length; i++) { //x //console.log("i: " + i); //x var sector = array_sectors[i]; //x //x appendSector(sector); //x } //x } //x function appendSector(sector) { //x var sector_id = sector[0]; //x var int_lat = sector[1]; //x var int_lon = sector[2]; //x //var desc = sector[3]; //x //var note = sector[...]; //x //x //x var gp = new GeoPoint(); //x gp.fromInt(int_lat, int_lon); //x //x var lat = gp.getLatFrac(); //x var lon = gp.getLonFrac(); //x //x //x var marker = L.marker([lat, lon]).addTo(map); //x marker.sector_id = sector_id; //x //x //x marker.on("click", function(e) { //x //console.log(e); //x //console.log(e.target.custom_var); //x window.location = "/grave/vs/?id=" + e.target.sector_id; //x } ); //x } // ---- append graves ---------------- this.updateGraves1 = function(aw) { if (aw["pano"] != undefined) { appendPanos(aw["pano"]); } }; /* function appendGraves(array_grave, is_sector = false) { //if (array_grave == undefined) return; console.log("graves count: " + array_grave.length); if (layer_grave != undefined) { layer_grave.clearLayers(); } else { layer_grave = L.layerGroup().addTo(map); } //for (var i in array_grave) { for (var i = 0; i < array_grave.length; i++) { //console.log("i: " + i); var grave = array_grave[i]; appendGrave(grave, is_sector); //break; } } function appendGrave(grave, is_sector) { var grave_id = 0; var sector_id = 0; var int_lat = 0; var int_lon = 0; var width = 0; var height = 0; var angle = 0; var fence = 0; //var care = 0; //var note = 0; var array_deceased = []; if (!is_sector) { grave_id = grave[0]; int_lat = grave[1]; int_lon = grave[2]; width = grave[3]; height = grave[4]; angle = grave[5]; fence = grave[6]; //var care = grave[7]; //var note = grave[7]; array_deceased = grave[7]; } else { grave_id = grave[0]; sector_id = grave[1]; int_lat = grave[2]; int_lon = grave[3]; width = grave[4]; height = grave[5]; angle = grave[6]; fence = grave[7]; array_deceased = grave[8]; } // lame offset int_lat += 400; int_lon += 200; var gp = new GeoPoint(); gp.fromInt(int_lat, int_lon); var lat = gp.getLatFrac(); var lon = gp.getLonFrac(); var offsets = transformRotate(width, height, angle); //var latlngs = [[lat - 0.00002, lon - 0.00002], [lat + 0.00002, lon - 0.00002], [lat + 0.00002, lon + 0.00002], [lat - 0.00002, lon + 0.00002]]; //lat - y, lon - x var latlngs = [ [lat + offsets[0][1], lon + offsets[0][0]], [lat + offsets[1][1], lon + offsets[1][0]], [lat + offsets[2][1], lon + offsets[2][0]], [lat + offsets[3][1], lon + offsets[3][0]]]; var attrs = { //stroke: true, color: "#000", weight: 1, opacity: 0.8, //lineCap: "round", //lineJoin: "round", //dashArray: "" //dashOffset: "" //fill: true, //fillColor: "", //fillOpacity: 0.2, //fillRule: "evenodd", //bubblingMouseEvents: true //renderer: Renderer, //className: svg // alt: "popup", }; if (grave_hl == grave_id) { attrs.color = "#f00"; //attrs.color = "#ff0"; //attrs.fillColor = ""; attrs.fillOpacity = 0.4; } if (array_deceased == undefined) { attrs.color = "#808"; } if (fence == 0) { attrs.stroke = false; } if (map.getZoom() < 18) { attrs.stroke = false; } else if (map.getZoom() < 19) { // 18 //console.log("zoom: 18"); attrs.weight = 0.5; } //1 var polygon = L.polygon(latlngs, attrs).addTo(map); var polygon = L.polygon(latlngs, attrs); //todo if (holder.geo_view_markers) geo_view_map.removeLayer(holder.geo_view_markers); //todo holder.geo_view_markers = new L.FeatureGroup(); // var marker = L.marker([gp.getLatFrac(), gp.getLonFrac()], {title: pt[3]}); // holder.geo_view_markers.addLayer(marker); layer_grave.addLayer(polygon); //v1 polygon.bindTooltip("id: " + grave_id + ", " + note); if (array_deceased != undefined && array_deceased.length > 0) { var stra = ""; for (var i = 0; i < array_deceased.length; i++) { var deceased = array_deceased[i]; var str = deceased[0] + ", " + deceased[1] + " – " + deceased[2]; if (i > 0) stra += "
"; stra += str; } polygon.bindTooltip(stra); } if (map.getZoom() >= 19) { polygon.grave_id = grave_id; polygon.on("click", function(e) { window.location = "/grave/v/?id=" + e.target.grave_id; } ); } else if (map.getZoom() >= 16) { polygon.sector_id = sector_id; polygon.on("click", function(e) { window.location = "/grave/vs/?id=" + e.target.sector_id; // window.location = "/grave/vs/?gid=" + e.target.grave_id; } ); } } // append grave function transformRotate(width, height, angle) { // defaults if (width == 0 || height == 0) { width = 3000; height = 2500; } var Q; if (angle == 0) { //Q = 0; //Q = 0.89; // кв46 // 51 * PI / 180 //Q = 0.99; // кв58 Q = 0.93; // кв47 } else { var deg = angle / 65536 * 360; Q = deg * deg_to_rad; } var half_width = width / 2; var half_height = height / 2; var src = [ [-half_width, +half_height], [+half_width, +half_height], [+half_width, -half_height], [-half_width, -half_height], ]; var matrix = [ [[+Math.cos(Q)], [-Math.sin(Q)]], [[+Math.sin(Q)], [+Math.cos(Q)]], ]; var dst = []; for (var i = 0; i < src.length; i++) { var src_p = src[i]; var dst_x = src_p[0] * matrix[0][0] + src_p[1] * matrix[0][1]; var dst_y = src_p[0] * matrix[1][0] + src_p[1] * matrix[1][1]; dst.push([dst_x, dst_y]); } var scl = []; for (var i = 0; i < dst.length; i++) { var dst_p = dst[i]; //1 var scl_x = dst_p[0] * 0.0000000160; // x //1 var scl_y = dst_p[1] * 0.0000000099; // y // var scl_y = dst_p[1] * 0.0000000096; // y var scl_x = dst_p[0] * 0.0000000152; // x var scl_y = dst_p[1] * 0.0000000094; // y scl.push([scl_x, scl_y]); } return scl; } // transform rotate */ this.getMap = function() { return map; }; function appendPanos(array_pano) { //console.log("pano count: " + array_pano.length); if (layer_pano != undefined) { layer_pano.clearLayers(); } else { layer_pano = L.layerGroup().addTo(map); } for (var i = 0; i < array_pano.length; i++) { //console.log("i: " + i); var pano = array_pano[i]; appendPano(pano); //break; } } function appendPano(pano) { var pano_id = 0; var pano_desc = 0; // var pano_path = 0; var int_lat = 0; var int_lon = 0; pano_id = pano[0]; // pano_path = pano[2]; int_lat = pano[1]; int_lon = pano[2]; pano_desc = pano[3]; var gp = new GeoPoint(); gp.fromInt(int_lat, int_lon); var lat = gp.getLatFrac(); var lon = gp.getLonFrac(); var icon_360 = L.icon({ iconUrl: '/leaflet/images/360.png', // iconRetinaUrl: '/leaflet/images/marker-iconr-2x.png', //r iconSize: [16, 16], iconSize: [24, 24], // iconAnchor: [12, 16], // popupAnchor: [1, -34], // shadowUrl: '/leaflet/images/marker-shadow.png', // shadowRetinaUrl: '/leaflet/images/marker-shadow.png', // shadowSize: [41, 41], // shadowAnchor: [12, 41] }); //todo if (holder.geo_view_markers) geo_view_map.removeLayer(holder.geo_view_markers); //todo holder.geo_view_markers = new L.FeatureGroup(); var marker = L.marker([lat, lon], { icon: icon_360 }); // title: "some title" // holder.geo_view_markers.addLayer(marker); layer_pano.addLayer(marker); // var marker_test = L.marker([lat, lon], {}); // title: "some title" // layer_pano.addLayer(marker_test); // marker.bindTooltip("some tooltip"); marker.pano_id = pano_id; marker.on("click", function(e) { if (module == "") { window.location = "/p/?id=" + e.target.pano_id; } else { window.location = "/" + module + "/vp/?id=" + e.target.pano_id; } } ); } // append pano } function PanoUpdate() { //console.log("GraveUpdate()"); var grave_map; var map; this.setMap = function(grave_map1) { //console.log("GraveUpdate(). grave_map: " + grave_map1); //console.log(grave_map1); grave_map = grave_map1; map = grave_map1.getMap(); //console.log("GraveUpdate(). map: " + map); } this.reload = function() { //console.log("GraveUpdate(). reload"); //console.log("map: " + map); if (map == undefined) return; var bound = map.getBounds(); var point_tl = new GeoPoint(); point_tl.fromFrac(bound._northEast.lat, bound._northEast.lng); var point_br = new GeoPoint(); point_br.fromFrac(bound._southWest.lat, bound._southWest.lng); //console.log("bound._northEast.lng: " + bound._northEast.lng + ", bound._southWest.lng: " + bound._southWest.lng); var send_data = { // list: geo_view_list_id, z: map.getZoom(), n: point_tl.getLatInt(), e: point_tl.getLonInt(), s: point_br.getLatInt(), w: point_br.getLonInt() }; ajaxPost("/a/" + module + "/p/", JSON.stringify(send_data), putOnMap, FormSendFailed); // cachedLoadFailed //function putOnMap(r, b) { function putOnMap(r) { //console.log("putOnMap()"); //console.log(r); var aw = JSON.parse(r); //1 if (aw["graves"] == undefined) return; // //console.log(r['points'].length); // if (aw['points'].length == 0) return; // var gp = new GeoPoint(); // // for (var i in aw['points']) { // //console.log("i: " + i); // //console.log(r['points'][i]); // var pt = aw['points'][i]; // if (pt[0] == geo_view_point_id) { // //console.log("skipped"); // continue; // } // //console.log(r[i]); // // gp.fromInt(pt[1], pt[2]); // // var marker = L.marker([gp.getLatFrac(), gp.getLonFrac()], {title: pt[3]}); // holder.geo_view_markers.addLayer(marker); // } // // //console.log("geo_view_map: " + geo_view_map); // geo_view_map.addLayer(holder.geo_view_markers); // } //1 grave_map.updateGraves1(aw["graves"]); grave_map.updateGraves1(aw); } } }