Skip to content

Instantly share code, notes, and snippets.

@kflaw
Last active July 26, 2016 15:00
Show Gist options
  • Save kflaw/eacb52e627167672cbcff16794200bf9 to your computer and use it in GitHub Desktop.
Save kflaw/eacb52e627167672cbcff16794200bf9 to your computer and use it in GitHub Desktop.
layer_filter
define([
'dojo/_base/declare',
'dijit/_WidgetBase',
'dijit/_TemplatedMixin',
'dijit/_WidgetsInTemplateMixin',
'dijit/form/Button',
'dojo/_base/lang',
'dojo/_base/array',
'dojo/dom',
'dojo/on',
'dojo/number',
'dojo/parser',
'dojo/ready',
'dojo/dom-style',
'dojo/text!./LayerFilter/templates/LayerFilter.html',
'dojo/topic',
'xstyle/css!./LayerFilter/css/LayerFilter.css',
'dojo/dom-construct',
'dojo/_base/Color',
'esri/geometry/Extent',
'esri/graphic',
'esri/IdentityManager',
'esri/symbols/SimpleFillSymbol',
'esri/symbols/SimpleLineSymbol',
'esri/Color',
'esri/layers/ArcGISDynamicMapServiceLayer',
'esri/layers/ImageParameters',
'esri/tasks/IdentifyTask',
'esri/tasks/IdentifyParameters',
'esri/InfoTemplate',
'esri/layers/GraphicsLayer',
'esri/tasks/QueryTask',
'dijit/form/MultiSelect',
'esri/symbols/TextSymbol',
'esri/geometry/Point',
'esri/symbols/Font',
'esri/renderers/SimpleRenderer',
'dijit/layout/BorderContainer',
'dijit/layout/ContentPane',
'esri/layers/FeatureLayer',
'esri/dijit/FeatureTable',
'dojo/dom-style',
'dijit/registry',
'dojo/domReady!',
], function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Button, lang, array, dom, on, dojoNum, parser, ready,
domStyle, template, topic, css, domConstruct, dojoColor, Extent, Graphic, IdentityManager, SimpleFillSymbol, SimpleLineSymbol, Color,
ArcGISDynamicMapServiceLayer, ImageParameters, IdentifyTask, IdentifyParameters, InfoTemplate, GraphicsLayer, QueryTask,
MultiSelect, TextSymbol, Point, Font, SimpleRenderer, BorderContainer, ContentPane, FeatureLayer, FeatureTable, domStyle,
registry, domReady
) {
var dynamicMapServiceLayer;
var map;
var url = 'http://sv04gis:6080/arcgis/rest/services/ROW/MapIndex/MapServer/15';
var mapsLyr = new GraphicsLayer({
id: 'mapsLayer'
});
var labelsLyr = new GraphicsLayer({
id: 'labelsLayer'
});
labelsLyr.setMinScale(9027.977411);
var filterLayerDefs = [];
var imageParameters = new ImageParameters();
imageParameters.format = "png32";
imageParameters.layerDefinitions = filterLayerDefs;
var searchResults = [];
//I want maps layer to be visible
imageParameters.layerIds = [15];
imageParameters.layerOption = ImageParameters.LAYER_OPTION_SHOW;
imageParameters.transparent = true;
var appraisalSymbol =
new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([0, 170, 255]), 2), new Color([255, 255, 255, 0])
);
var bridgeSymbol =
new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([170, 85, 255]), 2), new Color([255, 255, 255, 0])
);
var hardCopySymbol =
new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([255, 84, 255]), 2), new Color([255, 255, 255, 0])
);
var recordSymbol =
new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([255, 85, 0]), 2), new Color([255, 255, 255, 0])
);
var surveySymbol =
new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([115, 255, 255]), 2), new Color([255, 255, 255, 0])
);
var searchResultsSymbol =
new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new Color([115, 255, 255]), 5), new Color([115, 255, 255, 0]));
var infoWin = new InfoTemplate();
infoWin.setTitle(" ");
infoWin.setContent(
'<b>Map Sets</b><hr style="border:none; border-top:1px;margin-top:6px;margin-bottom:6px;border-bottom:1px solid black">' +
'<b>Name:</b> ${shtlabel}<br>' +
'<b>County:</b> ${county}<br>' +
'<b>Route:</b> ${rte}<br>' +
'<b>Postmile:</b> ${postmile}<br>' +
'<b>Map Type:</b> ${maptype} <br>' +
'<b>Hanging File:</b> ${hangingfilegroup}<br>' +
'<b>Revision Date:</b> ${mapdate}<br>' +
'<b>Original Draft Year:</b> ${mapdecade}<br>' +
'<b>Coordinate System:</b> ${geo_referenced_datum}<br>' +
'<div align=center>${image_web_path}</div>' +
'<div align=center>${grantor_box_path}</div>' +
'<div align=center>${imagefunctions}</div>' +
'<div align=center>${survey_index_link}</div>' +
'<div align=center>${control_pdf_link}</div>' +
'<div align=center>${controlimagefunctions}</div>' +
'<div align=center>${error_report_path}</div>'
);
var myFeatureTable;
var myFeatureLayer = new FeatureLayer(url, {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ['shtlabel', 'county', 'rte', 'postmile', 'MapType', 'HangingFileGroup',
'MapDate', 'MapDecade', 'Geo_Referenced_Datum', 'image_web_path',
'error_report_path'
],
visible: true,
id: "fLayer"
});
var mapsList;
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
name: 'LayerFilter',
map: true,
widgetsInTemplate: true,
templateString: template,
mapClickMode: null,
postCreate: function() {
this.inherited(arguments);
map = this.map;
dynamicMapServiceLayer = map.getLayer('mapSets');
// this.initTrace();
},
createFeatureTable: function() {
if (myFeatureTable) {
console.log('destroying table');
myFeatureTable.destroy();
registry.byId("sidebarBottom").domNode.innerHTML = '<div id="resultsGrid"></div>';
}
myFeatureTable = new FeatureTable({
featureLayer: myFeatureLayer,
map: map,
showGridMenu: false,
gridOptions: {
allowSelectAll: true,
allowTextSelection: true,
},
editable: false,
dateOptions: {
//set date options at the feature table level
//all date fields will adhere this
datePattern: "MMMM d, y"
},
//define order and visibility of fields. If the fields are not listed in 'outFIelds'
// then they will be hidden when the table starts.
outFields: ['shtlabel', 'county', 'rte', 'postmile', 'MapType', 'HangingFileGroup', 'MapDate',
'MapDecade', 'Geo_Referenced_Datum', 'image_web_path', 'error_report_path'
],
fieldInfos: [{
name: 'shtlabel',
alias: 'Map Name'
}, {
name: 'county',
alias: 'County'
}, {
name: 'rte',
alias: 'Route'
}, {
name: 'postmile',
alias: 'Postmile'
}, {
name: 'MapType',
alias: 'Map Type'
}, {
name: 'HangingFileGroup',
alias: 'Hanging File'
}, {
name: 'MapDate',
alias: 'Revision Date'
}, {
name: 'MapDecade',
alias: 'Original Draft Year'
}, {
name: 'Geo_Referenced_Datum',
alias: 'Coordinate System'
}, {
name: 'image_web_path',
alias: 'PDF Link'
}, {
name: 'error_report_path',
alias: 'Report Error'
}],
}, "resultsGrid");
myFeatureTable.startup();
this.resizeGrid();
topic.publish('viewer/togglePane', {
pane: 'bottom',
show: 'block'
});
myFeatureTable.on('load', function() {
myFeatureTable.grid.refresh();
});
myFeatureTable.on("row-select", function(evt) {
var shtlabel = evt[0].data.shtlabel;
queryTaskSelect = new esri.tasks.QueryTask(url);
querySelect = new esri.tasks.Query();
querySelect.returnGeometry = true;
querySelect.outFields = ["*"];
querySelect.where = 'shtlabel = ' + "'" + shtlabel + "'";
queryTaskSelect.execute(querySelect, function(fset) {
map.setExtent(esri.graphicsExtent(fset.features));
});
});
},
resizeGrid: function() {
domStyle.set("resultsGrid", "width", "100%");
},
onSearchByName: function() {
this.SearchByName();
},
SearchByName: function() {
var searchTxt = this.searchTextDijit.value;
if (searchTxt != '') {
myFeatureLayer.clear();
mapsLyr.clear();
labelsLyr.clear();
//map.removeLayer(myFeatureLayer);
filterLayerDefs[15] = "shtlabel LIKE '%" + searchTxt + "%'";
dynamicMapServiceLayer.setLayerDefinitions(filterLayerDefs);
//myFeatureLayer.setSelectionSymbol(searchResultsSymbol);
myFeatureLayer.setDefinitionExpression(filterLayerDefs[15]);
//map.addLayer(myFeatureLayer);
this.createFeatureTable();
queryTaskTxt = new esri.tasks.QueryTask(url);
queryTxt = new esri.tasks.Query();
queryTxt.returnGeometry = true;
queryTxt.outFields = ["shtlabel"];
queryTxt.where = filterLayerDefs[15];
queryTaskTxt.execute(queryTxt, function(fset) {
if (fset.features.length == 0) {
alert('Your search did not return any results, try again.');
} else {
// dynamicMapServiceLayer.setLayerDefinitions(filterLayerDefs);
//myFeatureTable.grid.refresh();
// for (var i=0; i < fset.features.length; i++) {
// searchResults.push(fset.features[i].attributes);
// // Get the current feature from the featureSet.
// // Feature is a graphic
// var graphic = fset.features[i];
// graphic.setSymbol(searchResultsSymbol);
// //graphic.setInfoTemplate(infoWin);
// map.graphics.add(graphic);
// }
map.setExtent(esri.graphicsExtent(fset.features));
}
});
} else {
alert('You must type at least 3 characters to search by name.');
}
},
AddLayers: function() {
console.log(map.getScale());
// if (this.ROWpane.get('selected')) {
//alert(this.map.extent.xmin);
var maptype = this.mapType.value;
var dec = this.decade.value;
var mtQuery;
var decQuery;
var mtString = '';
var mtStringCombo = '';
var decString = '';
var decStringCombo = '';
var decStringComboPre = '';
for (var i = 0; i < maptype.length; i++) {
if (maptype.length == 1) {
mtString += "'" + maptype[i] + "'";
} else {
mtStringCombo += "'" + maptype[i] + "',"
mtString = mtStringCombo.slice(",", -1);
}
}
mtQuery = "maptype IN (" + mtString + ")";
for (var i = 0; i < dec.length; i++) {
if (dec.length == 1 && dec != 'Pre-1950s') {
decString += "'" + dec[i].slice(0, 3) + "%'";
} else if (dec.length == 1 && dec == 'Pre-1950s') {
decString = "'190%' OR mapdecade LIKE '191%' OR mapdecade LIKE '192%' OR mapdecade LIKE '193%' OR mapdecade LIKE '194%'"
} else if (dec.length > 1 && dec.indexOf("Pre-1950s") > -1) {
decStringCombo += "'" + dec[i].slice(0, 3) + "%'OR mapdecade LIKE "
decStringComboPre = decStringCombo.replace("OR mapdecade LIKE 'Pre%'", "OR mapdecade LIKE '190%' OR mapdecade LIKE '191%' OR mapdecade LIKE '192%' or mapdecade LIKE '193%' OR mapdecade LIKE '194%'");
decString = decStringComboPre.slice('OR mapdecade LIKE ', -18)
} else {
decStringCombo += "'" + dec[i].slice(0, 3) + "%'OR mapdecade LIKE "
decString = decStringCombo.slice('OR mapdecade LIKE ', -18)
}
}
decQuery = '(mapdecade LIKE ' + decString + ')';
filterLayerDefs[15] = mtQuery + " and " + decQuery;
queryTask = new esri.tasks.QueryTask(url);
queryGeom = new esri.tasks.Query();
queryGeom.returnGeometry = true;
queryGeom.geometry = map.extent;
queryGeom.where = filterLayerDefs[15];
queryGeom.outFields = ["*"];
queryTask.execute(queryGeom, function(fset) {
myFeatureLayer.clear();
mapsLyr.clear();
labelsLyr.clear();
if (fset.features.length > 1000) {
alert('Your query returned more than 1,000 maps. Please refine your search.')
filterLayerDefs[15] = "maptype in ('Record','Appraisal','Bridge','Survey') and mapdecade LIKE '20%'";
dynamicMapServiceLayer.setLayerDefinitions(filterLayerDefs);
} else if (fset.features.length > 0 && fset.features.length < 1001) {
dynamicMapServiceLayer.setLayerDefinitions(filterLayerDefs);
console.log(filterLayerDefs);
//queryTask.on("complete", function(fset) {
map.removeLayer(mapsLyr);
map.removeLayer(labelsLyr);
mapsList = [];
// Loop through features in the featureSet and add them to the map.
for (var i = 0, il = fset.features.length; i < il; i++) {
// Get the current feature from the featureSet.
// Feature is a graphic
//if fset.
var graphic = fset.features[i];
var labelX = graphic.attributes.longitude;
var labelY = graphic.attributes.latitude;
//var graphicCntrd = graphic.geometry.getCentroid()
var labelPt = new Point([labelX, labelY]);
var labelGraphic = new Graphic(labelPt);
var label = graphic.attributes.shtlabel;
mapsList.push("'" + label + "'");
if (graphic.attributes.maptype == 'Appraisal') {
var appraisalLabel = new TextSymbol(label).setColor(new Color([0, 170, 255]));
appraisalLabel.font.setSize("12pt");
appraisalLabel.font.setFamily("franklin gothic heavy");
appraisalLabel.setHaloColor(new Color([0, 0, 0]));
appraisalLabel.setHaloSize(2);
graphic.setSymbol(appraisalSymbol);
labelGraphic.setSymbol(appraisalLabel);
} else if (graphic.attributes.maptype == 'Bridge') {
var bridgeLabel = new TextSymbol(label).setColor(new Color([170, 85, 255]));
bridgeLabel.font.setSize("12pt");
bridgeLabel.font.setFamily("franklin gothic heavy");
bridgeLabel.setHaloColor(new Color([0, 0, 0]));
bridgeLabel.setHaloSize(2);
graphic.setSymbol(bridgeSymbol);
labelGraphic.setSymbol(bridgeLabel);
} else if (graphic.attributes.maptype == 'Hardcopy') {
var hcLabel = new TextSymbol(label).setColor(new Color([255, 84, 255]));
hcLabel.font.setSize("12pt");
hcLabel.font.setFamily("franklin gothic heavy");
hcLabel.setHaloColor(new Color([0, 0, 0]));
hcLabel.setHaloSize(2);
graphic.setSymbol(hardCopySymbol);
labelGraphic.setSymbol(hcLabel);
} else if (graphic.attributes.maptype == 'Record') {
var recordLabel = new TextSymbol(label).setColor(new Color([255, 85, 0]));
recordLabel.font.setSize("12pt");
recordLabel.font.setFamily("franklin gothic heavy");
recordLabel.setHaloColor(new Color([0, 0, 0]));
recordLabel.setHaloSize(2);
graphic.setSymbol(recordSymbol);
labelGraphic.setSymbol(recordLabel);
} else if (graphic.attributes.maptype == 'Survey') {
var surveyLabel = new TextSymbol(label).setColor(new Color([0, 255, 0]));
surveyLabel.font.setSize("12pt");
surveyLabel.font.setFamily("franklin gothic heavy");
surveyLabel.setHaloColor(new Color([0, 0, 0]));
surveyLabel.setHaloSize(2);
graphic.setSymbol(surveySymbol);
labelGraphic.setSymbol(surveyLabel);
}
//Add graphic to the map graphics layer.
mapsLyr.add(graphic);
labelsLyr.add(labelGraphic);
filterLayerDefs[15] = 'objectId < 0';
dynamicMapServiceLayer.setLayerDefinitions(filterLayerDefs);
mapsLyr.setInfoTemplate(infoWin);
map.addLayer(mapsLyr);
map.addLayer(labelsLyr);
mapsLyr.on('click', function(evt) {
map.infoWindow.setContent(graphic.getInfoTemplate());
map.infoWindow.show(evt.screenPoint, map.getInfoWindowAnchor(evt.screenPoint));
});
}
var maps = mapsList.toString();
//var mapExtentExp = filterLayerDefs[15] + 'AND shtlabel IN (' + maps + ')'
var mapExtentExp = mtQuery + " AND " + decQuery + 'AND shtlabel IN (' + maps + ')'
console.log(mapExtentExp);
myFeatureLayer.setDefinitionExpression(mapExtentExp);
this.createFeatureTable();
map.setExtent(esri.graphicsExtent(fset.features));
} else {
alert('Your search did not return any maps, try again.')
filterLayerDefs[15] = 'objectId < 0';
dynamicMapServiceLayer.setLayerDefinitions(filterLayerDefs);
myFeatureTable.destroy();
topic.publish('viewer/togglePane', {
pane: 'bottom',
show: 'none'
});
}
});
// }
// }
// else if (this.agrmntPane.get('selected')){
// var filterLayerDefs = [];
// var agrmnt = this.agrmntTyp.value;
// var dec = this.decadeAgrmnt.value;
// var co = this.countyAgrmnt.value;
// var coQuery;
// var mtQuery;
// var decQuery;
// var coString = '';
// var coStringCombo = '';
// var agrmntString = '';
// var agrmntStringCombo = '';
// var decString = '';
// var decStringCombo = '';
// var decStringComboPre = '';
// for (var i = 0; i < co.length; i++){
// if (co.length == 1 && co != "Current map extent"){
// coString += "'"+co[i]+"'";
// coQuery = "county IN ("+coString+")";
// }
// else if (co.length > 1 && co != "Current map extent" ){
// coStringCombo += "'"+co[i]+"',"
// coString = coStringCombo.slice(",",-1);
// coQuery = "county IN ("+coString+")";
// }
// else{
// coQuery = '';
// }
// }
// for (var i = 0; i < agrmnt.length; i++){
// if (agrmnt.length == 1){
// agrmntString+= "'"+agrmnt[i]+"'";
// }
// else{
// agrmntStringCombo += "'"+agrmnt[i]+"',"
// agrmntString = agrmntStringCombo.slice(",",-1);
// }
// }
// agrmentQuery = "agrmnt_typ IN ("+agrmntString+")";
// for (var i = 0; i < dec.length; i++){
// if (dec.length == 1 && dec != 'Pre-1950s'){
// decString+= "'"+dec[i].slice(0,3) +"%' OR effdate LIKE '%/"+dec[i].slice(1,2)+"%'";
// }
// else if (dec.length == 1 && dec == 'Pre-1950s'){
// decString = "'190%' OR effdate LIKE '191%' OR effdate LIKE '192%' OR effdate LIKE '193%' OR effdate LIKE '194%'";
// }
// else if (dec.length >1 && dec.indexOf("Pre-1950s") > -1){
// decStringCombo += "'"+ dec[i].slice(0,3) + "%'OR effdate LIKE '%/"+ dec[i].slice(1,2) +"%' OR effdate LIKE "
// decStringComboPre = decStringCombo.replace("OR effdate LIKE 'Pre%'", "OR effdate LIKE '190%' OR effdate LIKE '191%' OR effdate LIKE '192%' or effdate LIKE '193%' OR effdate LIKE '194%'");
// decString = decStringComboPre.slice('OR effdate LIKE ',-16)
// }
// else {
// decStringCombo += "'"+ dec[i].slice(0,3) + "%'OR effdate LIKE OR effdate LIKE '%/"+dec[i].slice(1,2)+"%' OR effdate LIKE "
// decString = decStringCombo.slice('OR effdate LIKE ',-16)
// }
// }
// decQuery = '(effdate LIKE '+ decString+')';
// // if (dec == 'Pre-1950s') {
// // decQuery = "CAST( mapdecade AS INT) <1950";
// // }
// // else if (dec == 'All') {
// // decQuery = "CAST( mapdecade AS INT) > 0";
// // }
// // else {
// // decQuery = "mapdecade LIKE '"+ dec.substring(0,3) +"%'";
// // }
// if (coQuery != ''){
// filterLayerDefs[0] = coQuery+" and "+ agrmentQuery+" and "+decQuery;
// }
// else{
// filterLayerDefs[0] = agrmentQuery+" and "+decQuery;
// }
// console.log(filterLayerDefs[0])
// imageParameters.layerDefinitions = filterLayerDefs;
// }
},
onAddLayers: function() {
this.AddLayers();
},
onClear: function() {
myFeatureTable.destroy();
topic.publish('viewer/togglePane', {
pane: 'bottom',
show: 'none'
});
map.removeLayer(mapsLyr);
map.removeLayer(labelsLyr);
map.graphics.clear();
map.centerAndZoom([-122.39, 37.852], 9);
filterLayerDefs[15] = "maptype in ('Record','Appraisal','Bridge','Survey') and mapdecade LIKE '20%'";
dynamicMapServiceLayer.setLayerDefinitions(filterLayerDefs);
queryTaskOrig = new esri.tasks.QueryTask(url);
queryOrig = new esri.tasks.Query();
queryOrig.returnGeometry = true;
queryOrig.outFields = ["*"];
queryOrig.where = filterLayerDefs[15];
queryTaskOrig.execute(queryOrig, function() {
});
console.log(dynamicMapServiceLayer.layerDefinitions);
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment