//(function () { angular.module('MobileWebLogistics') .service('mapFunction', function () { var mapFunctionServ = this; function decodeUrlForSearch(url, searchField) { var searchParam = url.split(searchField + "=")[1]; if (searchParam.includes("&zoom")) { searchParam = searchParam.split("&zoom")[0]; } else if (searchParam.includes("&location")) { searchParam = searchParam.split("&location")[0]; } return decodeURIComponent(searchParam); } this.mapOnLoad = function ($scope, $location, event) { //if ($("#HomeButton").length==0) { alert("0");} //alert($("#HomeButton").length); //console.log("mapOnLoad"); var home = new $scope.HomeButton({ map: $scope.map, visible: true }, "HomeButton"); home.startup(); $('.home').on("click touchend", function () { $('#mapView').trigger('click touchend'); $(this).trigger('mouseleave'); $(this).css({ backgroundColor: 'rgba(102,102,102,0.80)' }); }); $scope.map.graphics.enableMouseEvents(); $scope.map.enableScrollWheelZoom(); //$scope.toolbar = new $scope.Draw($scope.map, {showTooltips: true}); //console.log("setFillSymbol"); $scope.toolbar.setFillSymbol($scope.highlightSymbol); //console.log($scope.toolbar); $scope.toolbar.on("draw-end", $scope.addGraphic); $scope.map.on("mouse-up", $scope.showCoordinates); $scope.map.on("extent-change", $scope.showCoordinates); $scope.map.on("zoom-end", $scope.updateExtent); //$scope.map.on("mouse-move", $scope.showCursorCoordinates); if ((window.sessionStorage.getItem('rawCoords') !== null && window.sessionStorage.getItem('rawCoords') !== "undefined") && (window.sessionStorage.getItem('zoomLevel') !== null && window.sessionStorage.getItem('zoomLevel') !== "undefined")) { var rawCoords = window.sessionStorage.getItem('rawCoords'); var zoomLevel = window.sessionStorage.getItem('zoomLevel'); } else if ((window.sessionStorage.getItem('rawCoords') !== null && window.sessionStorage.getItem('rawCoords') !== "undefined") && (window.sessionStorage.getItem('zoomLevel') == null && window.sessionStorage.getItem('zoomLevel') == "undefined")) { var rawCoords = window.sessionStorage.getItem('rawCoords'); } else if (window.sessionStorage.getItem('parcelID') !== null && window.sessionStorage.getItem('parcelID') !== "undefined") { var parcelID = window.sessionStorage.getItem('parcelID'); } else { var rawCoords = $location.search().location; var zoomLevel = $location.search().zoom; } //==========this is for the calls from the county's assessment system // if redirectToDisclaimer is true, this variable may already be caught in the sessionStorage // don't reassign it again to undefined if (!parcelID) { var parcelID = $location.search().parcelID; } var parcelOwner = $location.search().ownername; var parcelAddr = $location.search().address; if (parcelID || parcelOwner || parcelAddr) { $scope.callFromAS = 'yes'; var fullUrl = $location.absUrl(); } if (parcelID) { let decodedSearch = decodeUrlForSearch(fullUrl, 'parcelID'); $scope.searchFromAS('parcelID=' + decodedSearch); } else if (parcelOwner) { let decodedSearch = decodeUrlForSearch(fullUrl, 'ownername'); $scope.searchFromAS('ownername=' + decodedSearch); } else if (parcelAddr) { let decodedSearch = decodeUrlForSearch(fullUrl, 'address'); $scope.searchFromAS('address=' + decodedSearch); } //========== else if (rawCoords) { var coords = rawCoords.split("_"); if (coords) { var point = new esri.geometry.Point({ latitude: coords[1], longitude: coords[0] }); if (zoomLevel) { $scope.map.centerAndZoom(point, zoomLevel); } else { $scope.map.centerAt(point); } } } $scope.basemapGallery = new $scope.BasemapGallery({ showArcGISBasemaps: true, map: $scope.map }, "basemapGallery"); var vgin = new esri.dijit.BasemapLayer({ url: "https://vginmaps.vdem.virginia.gov/arcgis/rest/services/VBMP_Imagery/MostRecentImagery_WGS/MapServer" }); var vginImage = new esri.dijit.Basemap({ layers: [vgin], title: "VGIN Imagery", thumbnailUrl: "img/vgin.jpg" }); $scope.basemapGallery.add(vginImage); if ($scope.customBasemap == 'true') { $scope.addCustomBasemap(); } $scope.basemapGallery.startup(); var overviewMapDijit = new $scope.OverviewMap({ map: $scope.map }); overviewMapDijit.startup(); $scope.basemapGallery.on("load", function () {//console.log($scope.baseMapOrder[0].length); //remove basemaps if any requests if ($scope.removeBaseMaps[0].length > 0) { for (var j = 0; j < $scope.removeBaseMaps.length; j++) { //basemapGallery.remove("basemap_1"); $scope.basemapGallery.remove($scope.removeBaseMaps[j]); } } //re-order basemap gallery if any requests if ($scope.baseMapOrder[0].length > 0) { for (var j = $scope.baseMapOrder.length - 1; j > -1; j--) {//alert("a"); var nd = document.getElementById("galleryNode_" + $scope.baseMapOrder[j]); //console.log(nd); nd.parentElement.insertBefore(nd, nd.parentElement.childNodes[0]); } } //change basemap title if any requests if ($scope.baseMapTitles.length > 0) { for (var j = 0; j < $scope.baseMapTitles.length; j++) { document.getElementById("galleryNode_" + $scope.baseMapTitles[j][0]).childNodes[1].childNodes[0].innerHTML = $scope.baseMapTitles[j][1]; document.getElementById("galleryNode_" + $scope.baseMapTitles[j][0]).childNodes[1].childNodes[0].setAttribute("alt", $scope.baseMapTitles[j][1]); //text document.getElementById("galleryNode_" + $scope.baseMapTitles[j][0]).childNodes[1].childNodes[0].setAttribute("title", $scope.baseMapTitles[j][1]); document.getElementById("galleryNode_" + $scope.baseMapTitles[j][0]).childNodes[0].childNodes[0].setAttribute("alt", $scope.baseMapTitles[j][1]); //thumb image document.getElementById("galleryNode_" + $scope.baseMapTitles[j][0]).childNodes[0].childNodes[0].setAttribute("title", $scope.baseMapTitles[j][1]); } } //set default basemap $scope.basemapGallery.select($scope.defaultBasemap); //populate the swipe basemaps if ($scope.swipeTool == "true") { let supportedBasemaps = getSupportedBasemaps($scope); $scope.swipeBasemaps = []; for (var i = 0; i < supportedBasemaps.length; i++) { let currentBasemap = supportedBasemaps[i]; let updatedTitle = false; $scope.swipeBasemaps[i] = {}; for (var j = 0; j < $scope.baseMapTitles.length; j++) { if ($scope.baseMapTitles[j][0] == currentBasemap.id) { $scope.swipeBasemaps[i].title = $scope.baseMapTitles[j][1]; currentBasemap.title = $scope.baseMapTitles[j][1]; updatedTitle = true; break; } } if (!updatedTitle) { $scope.swipeBasemaps[i].title = currentBasemap.title; } if (currentBasemap.itemId !== undefined) { $scope.swipeBasemaps[i].itemId = currentBasemap.itemId; $scope.swipeBasemaps[i].urls = []; // get the services for each AGOL map var jsonUrl = "https://www.arcgis.com/sharing/rest/content/items/" + $scope.swipeBasemaps[i].itemId + "/data" $.ajax({ async: false, url: jsonUrl, dataType: "json", success: function (data) { for (var k = 0; k < data.baseMap.baseMapLayers.length; k++) { if (data.baseMap.baseMapLayers[k].layerType == "VectorTileLayer") { $scope.swipeBasemaps[i].urls.push([data.baseMap.baseMapLayers[k].layerType, data.baseMap.baseMapLayers[k].styleUrl]); } else { $scope.swipeBasemaps[i].urls.push([data.baseMap.baseMapLayers[k].layerType, data.baseMap.baseMapLayers[k].url]); } } } }) } else { $scope.swipeBasemaps[i].urls = [] $scope.swipeBasemaps[i].urls.push(["ArcGISTiledMapServiceLayer", currentBasemap.layers[0].url]); } } } }); function getSupportedBasemaps($scope) { let supportedBasemaps = []; for (let i = 0; i < $scope.basemapGallery.basemaps.length; i++) { let currentBasemap = $scope.basemapGallery.basemaps[i] if (isSupportedBasemap(currentBasemap)) { supportedBasemaps.push(currentBasemap); } } return supportedBasemaps; } function isSupportedBasemap(basemap) { try { if (!basemap.layers) { // AGOL basemap return true; } for (let i = 0; i < basemap.layers.length; i++) { if (basemap.layers[i].type === "WebTiledLayer") { return false; } } return true; } catch (e) { return false; } } $scope.basemapGallery.on("selection-change", function () { document.getElementById("baseMapCheck").checked = true; var lname = $("#map_layers :first-child").attr('id'); $("#" + lname).css("opacity", $("#baseMapTransparency").val() / 100); }); $("#basemapGallery").append('<img src="img/close.png" id="closeBasemapGallery" />'); $("#closeBasemapGallery").click(function () { $("#basemapGallery").removeClass("active"); $("#basemapGalleryButton").css("opacity", 0.8); }); $scope.basemapGallery.on("error", function (msg) { console.log("basemap gallery error: ", msg); }); $("#map_root").click(function () { $("#basemapGallery").removeClass("active"); $("#basemapGalleryButton").css("opacity", 0.8); }); $scope.esriConfig.defaults.io.alwaysUseProxy = false; var buildLegend = setInterval(function () { clearInterval(buildLegend); function buildZoomToggles(layer) { $scope.zoomToggles.push({ id: layer.id, min: layer.minScale, max: layer.maxScale }); } for (var k in $scope.layersArray) { if ($scope.layersArray.hasOwnProperty(k)) { buildZoomToggles($scope.layersArray[k]); } } $scope.currentScale = $scope.scaleUtils.getScale($scope.map); if ($scope.draggableParcelIdentify == 'true') { $(".title").addClass('draggablePopup'); } }, 1000); } this.updateVisEye = function ($scope) { if ($scope.map) { $scope.currentScale = $scope.scaleUtils.getScale($scope.map).toFixed(6); if ($scope.currentScale == 0) { var scales = { 8: 2311162.217155, 9: 1155581.108577, 10: 577790.554289, 11: 288895.277144, 12: 144447.638572, 13: 72223.819286, 14: 36111.909643, 15: 18055.954822, 16: 9027.977411, 17: 4513.988705 } $scope.currentScale = scales[$scope.initZoom] } } $scope.visbleLayers = []; for (var i = 0; i < $scope.checkboxList.length; i++) { //[i][0]=lname; [i][1]=lid; [i][2]=minS; [i][3]=maxS; if ($scope.currentScale && ($scope.checkboxList[i][2] != 0 && $scope.currentScale > $scope.checkboxList[i][2]) || ($scope.checkboxList[i][3] != 0 && $scope.currentScale < $scope.checkboxList[i][3])) { //alert($scope.checkboxList[i][0]) ; $("#" + $scope.checkboxList[i][0] + "Check").parent().parent().css("opacity", "0.4").css("pointer-events", "none"); $("#" + $scope.checkboxList[i][0] + "Check").attr("disabled", "disabled"); $("#" + $scope.checkboxList[i][0] + "Check").parent().children("label").addClass("inactive"); } else { //enable $("#" + $scope.checkboxList[i][0] + "Check").parent().parent().css("opacity", "1").css("pointer-events", "auto"); $("#" + $scope.checkboxList[i][0] + "Check").removeAttr("disabled"); $("#" + $scope.checkboxList[i][0] + "Check").parent().children("label").removeClass("inactive"); } } } this.initToggle = function ($scope) { if ($scope.initLayers[0].length > 0) { $scope.initLayerList = $scope.initLayers; //initial layer names defined in config.json } else { //initial layer names detected from layersUI.createList() $scope.initLayerList = $scope.initLayerNamesArray } try { for (var i = 0; i < $scope.initLayerList.length; i++) { var lname = $scope.initLayerList[i]; $("#" + lname + "Check").parent().parent().css("opacity", "1").css("pointer-events", "auto"); $("#" + lname + "_layer").css("visibility", "visible"); // $("#"+lname+"_layer").css("opacity", 0.5); //**************** $("#" + lname + "Check").checked = true; //console.log(lname); document.getElementById(lname + "Check").checked = true; } // $scope.dmsLayer.setOpacity(0.6); $("#map_layer1").css("opacity", $scope.initOpacity / 100); $("#overlayTransparency").val($scope.initOpacity); //for ipad search bar $("#ndefaultSearch").css("display", "none"); setTimeout(function () { $scope.showMapScale(); $("#search2").prop('disabled', false); $("#ndefaultSearch").css("display", "block"); }, 20); } catch (err) { //alert(err.message); window.location.reload(); } } }); //})();