angular.module('MobileWebLogistics') .service('layerEvent', function () { var layerEventServ = this; this.parcelClick = function ($scope, evt) { if ($("#openSelectByGraphic").hasClass("active") || $("#GSButton").hasClass("selected") || $("#pictoButton").hasClass("selected") || $("#textTool").hasClass("selected") || $("#pointTool").hasClass("selected") || $("#lineTool").hasClass("selected") || $("#polygonTool").hasClass("selected") || $("#identifyButton").hasClass("selected")) { return false; } else { $scope.searchTarget = 'parcels'; $scope.selObject = 'pl'; if (window.innerWidth < 651) { $scope.map.infoWindow.resize(100, 30); $scope.map.infoWindow.hide(); } $scope.selectedParcel = evt.graphic.attributes; $scope.selectedParcel['geometry'] = evt.graphic.geometry; $scope.adjoinerList = []; for (var key in $scope.selectedParcel) { thisKey = $scope.selectedParcel[key.toString()]; $scope.selectedParcel[key.toString()] = $scope.formatParcelData(key, thisKey, $scope.selectedParcel[key.toString()]); } if (window.innerWidth < 651) { //in case if user enlarges windows more than 651 $scope.queryObjectId($scope.selectedParcel[$scope.parcelUid], $scope.selectedParcel[$scope.parcelOID], 'detail', 'pl'); } $scope.$apply(); $scope.bufferLayer.clear(); $scope.selectedLayer.clear(); $scope.bmLayer.clear(); $scope.immediateAdjoiners = true; // The data source is a MapServer and has an identify endpoint if (!$scope.isFeatureService) { $("#identifyPreloaderContainer").addClass("active"); $scope.identifyTask = new $scope.IdentifyTask($scope.featureServUrl); $scope.identifyParams = new $scope.IdentifyParameters(); $scope.identifyParams.tolerance = 0; $scope.identifyParams.returnGeometry = true; $scope.identifyParams.layerIds = [$scope.searchParcelLyrId]; $scope.identifyParams.layerOption = $scope.IdentifyParameters.LAYER_OPTION_ALL; $scope.identifyParams.width = $scope.map.width; $scope.identifyParams.height = $scope.map.height; $scope.identifyParams.geometry = event.mapPoint; $scope.identifyParams.mapExtent = $scope.map.extent; } layerEventServ.executeIdentifyTask($scope, evt); } } this.executeIdentifyTask = function ($scope, event) { // 4 different identify functions need to be setup // MapServer against a parcel or against the identify others // FeatureServer against a parcel or against the identify others $scope.identifyResultArray = []; if ($("#identifyButton").hasClass("selected")) { $scope.identifyParams.geometry = event.mapPoint; $scope.identifyParams.mapExtent = $scope.map.extent; $scope.identifyParams.tolerance = 3; $scope.identifyParams.layerIds = []; //create layerlist to identify for (var i = 0; i < $scope.checkboxList.length; i++) { //[i][0]=lname; [i][1]=lid; [i][2]=minS; [i][3]=maxS; if (($scope.checkboxList[i][2] != 0 && $scope.currentScale > $scope.checkboxList[i][2]) || ($scope.checkboxList[i][3] != 0 && $scope.currentScale < $scope.checkboxList[i][3])) { //if scale is out of layer scale } else { //visible scale if (!($scope.noIdentifyLayers.contains($scope.checkboxList[i][0]))) { if (document.getElementById($scope.checkboxList[i][0] + "Check").checked) { //checked $scope.identifyParams.layerIds.push($scope.checkboxList[i][1]); } } } } //in case if scope.identifyParams.layerIds is empty even if there are scope.noIdentifyLayers if ($scope.noIdentifyLayers.length > 0 && $scope.identifyParams.layerIds.length < 1) { $scope.identifyParams.layerIds.push($scope.gisServNumLayers + 10); //last layer id +10 and then add to scope.identifyParams.layerIds, so make identify result empty } } $scope.showPanel2 = false; $scope.stackedFeature = false; $scope.map.infoWindow.hide(); var deferred, multiDeferred; if ($scope.isFeatureService) { if ($("#identifyButton").hasClass("selected")) { var multiDeferred = []; for (var i = 0; i < $scope.identifyParams.layerIds.length; i++) { var query = $scope.Query(); query.geometry = event.mapPoint; query.outFields = ["*"]; query.returnGeometry = true; query.distance = 3; $scope.queryTask = $scope.QueryTask($scope.featureServUrl + $scope.identifyParams.layerIds[i]); multiDeferred.push($scope.queryTask.execute(query)); } deferred = $scope.dojoAll(multiDeferred); } else { var query = $scope.Query(); query.geometry = event.mapPoint; query.outFields = $scope.queryParcelFields; query.returnGeometry = true; query.distance = 3; $scope.queryTask = $scope.QueryTask($scope.parcelLayer.url); deferred = $scope.queryTask.execute(query); } } else { deferred = $scope.identifyTask.execute($scope.identifyParams); } deferred.then(function (response) { // setup same object structure for IdentifyTask and QueryTask if ($scope.isFeatureService) { if ($("#identifyButton").hasClass("selected")) { response = response; } else { response = response.features; } } $scope.identifyFeatures = []; $("#identifyPreloaderContainer").removeClass("active"); if ($scope.multipleParcelIdentify == "false") { response.splice(1, response.length - 1); //remove stacked parcel and keep the first result } if (window.innerWidth < 651) { $scope.map.infoWindow.hide(); $scope.showDetail(); } else { $scope.map.infoWindow.show(event.mapPoint); } if (window.innerWidth < 651 && response.length > 1) { $scope.stackedFeature = true; //for show or hide #stackedFeatureList $scope.stackedFeatureStatus = true; //for going back to #stackedFeatureList setTimeout(function () { $scope.$apply(); $scope.refreshIscroll(); }, 100); } else if (window.innerWidth < 651 && response.length == 1) { $scope.showPanel2 = false; $scope.stackedFeatureStatus = false; setTimeout(function () { $scope.$apply(); $scope.refreshIscroll(); }, 100); } else { $scope.stackedFeatureStatus = false; $scope.map.infoWindow.resize(300, 200); } response.map(function (result, index) { // setup same object structure for IdentifyTask (MapServer) and QueryTask (FeatureServer) // handle response and identify box creation for parcel or other identifies var feature, layerName, identifyOthers; var identifySet = false; if ($("#identifyButton").hasClass("selected")) { identifyOthers = true; } // response.features from a feature service returns the field names // create a lookup to set the field aliases to display in the info template var aliasLookup = {} if ($scope.isFeatureService) { if (identifyOthers) { if (result.features.length == 1) { feature = result.features[0]; } else if (result.features.length > 1) { feature = result.features; } if (feature) { for (i = 0; i < result.fields.length; i++) { aliasLookup[result.fields[i].name] = result.fields[i].alias; } } var layerId = $scope.identifyParams.layerIds[index]; for (var i = 0; i < $scope.mapLayers.length; i++) { if ($scope.mapLayers[i].id == layerId) { layerName = $scope.mapLayers[i].name; break; } } } else { feature = result; layerName = $scope.parcelLyrName; } } else { feature = result.feature; layerName = result.layerName; } if (!feature) { return; } if (identifyOthers) { if ($scope.isFeatureService && Array.isArray(feature)) { for (var i = 0; i < feature.length; i++) { t = layerEventServ.createIdentifyOtherHTML($scope, feature[i], aliasLookup); var taxParcelTemplate = new $scope.InfoTemplate(layerName, t); feature[i].setInfoTemplate(taxParcelTemplate); feature[i].setSymbol($scope.selParcelSymbol); for (var key in feature.attributes) { thisKey = feature.attributes[key.toString()]; feature.attributes[key.toString()] = $scope.formatParcelData(key, thisKey, feature.attributes[key.toString()]); } $scope.identifyFeatures.push(feature[i]); } identifySet = true; } else if ($scope.isFeatureService) { for (var key in feature.attributes) { thisKey = feature.attributes[key.toString()]; feature.attributes[key.toString()] = $scope.formatParcelData(key, thisKey, feature.attributes[key.toString()]); } t = layerEventServ.createIdentifyOtherHTML($scope, feature, aliasLookup); } else { for (var key in feature.attributes) { thisKey = feature.attributes[key.toString()]; feature.attributes[key.toString()] = $scope.formatParcelData(key, thisKey, feature.attributes[key.toString()]); } t = layerEventServ.createIdentifyOtherHTML($scope, feature); } } else { for (var key in feature.attributes) { thisKey = feature.attributes[key.toString()]; feature.attributes[key.toString()] = $scope.formatParcelData(key, thisKey, feature.attributes[key.toString()]); } feature.attributes['geometry'] = feature.geometry; $scope.identifyResultArray.push(feature.attributes); //bubble contentPane var t = '${' + $scope.bubbleInfoField[0][2] + '}
' + aliasName + ': | ' + "Open Link" + ' |
' + aliasName + ': | ' + fieldValue + ' |