function filterFacilityByAgency() { var e = dijit.byId("facilitySelect"); var code = e.value; map.graphics.clear(); map.infoWindow.hide(); var filterExpression = "Agency = '" + code + "'"; buildingLayer.setDefinitionExpression(filterExpression); buildingLayer.setVisibility(true); } function clearBuildingLayer () { var orgExp = map.getLayer('buildingLayer').defaultDefinitionExpression; //NOTE: returns "" buildingLayer.setDefinitionExpression(orgExp); map.getLayer('buildingLayer').clearSelection; var select = dijit.byId("facilitySelect"); select.reset(); }
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7, IE=9, IE=10"> <title>Feature Layer Filter Expression Example</title> <link rel="stylesheet" type="text/css" href="https://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" type="text/css" href="https://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" /> <link rel="stylesheet" type="text/css" href="https://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/dijit/css/Popup.css"> <link rel="stylesheet" type="text/css" href="css/style.css"> <script type="text/javascript"> var dojoConfig = { parseOnLoad: true }; </script> <script type="text/javascript" src="https://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script> <script type="text/javascript"> dojo.require("dijit.layout.BorderContainer"); dojo.require("dijit.layout.ContentPane"); dojo.require("esri.map"); dojo.require("esri.dijit.Popup"); dojo.require("esri.layers.FeatureLayer"); dojo.require("dijit.form.Select"); dojo.require("esri.IdentityManager"); var map; var startExtent; var buildingLayer; var buildingInfoTemplate; var infoTemplateContent; var pathName = "https://ogitest.oa.mo.gov"; var buildingAgencyList = []; function init(){ esri.config.defaults.io.proxyUrl = pathName + "/proxy/proxy.ashx"; var highlightFillSymbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 255, 0]), 3), new dojo.Color([255, 255, 0, 0.05])); var highlightMarkerSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 22, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 255, 0]), 2), new dojo.Color([255, 255, 0, 0.5])); var popup = new esri.dijit.Popup({ fillSymbol: highlightFillSymbol, lineSymbol: false, markerSymbol: highlightMarkerSymbol }, dojo.create("div")); var spatialReference = new esri.SpatialReference({ wkid: 102100 }); startExtent = new esri.geometry.Extent(-10583000, 4287025, -9979000, 4980462, spatialReference); map = new esri.Map("mapDiv", { extent: startExtent, fitExtent: true, infoWindow: popup, basemap: "gray" }); map.infoWindow.resize(275, 600); var countyLayer = new esri.layers.ArcGISDynamicMapServiceLayer(pathName + "/ArcGIS/rest/services/BaseMap/county_simple/MapServer", { id: "countyLayer" }); map.addLayer(countyLayer); buildingInfoTemplateContent = "<b>${Facility}</b><br>" + "Address: ${Address}<br>" + "City: ${City}<br>" + "Type: ${Type}<br>" + "Years: ${Years}" ; buildingInfoTemplate = new esri.InfoTemplate(); buildingInfoTemplate.setTitle("${Facility}"); buildingInfoTemplate.setContent(buildingInfoTemplateContent); buildingLayer = new esri.layers.FeatureLayer(pathName + "/ArcGIS/rest/services/BaseMap/Education/MapServer/2", { mode: esri.layers.FeatureLayer.MODE_ONDEMAND, id: "buildingLayer", outFields: ["*"], infoTemplate: buildingInfoTemplate }); var buildingSymbol = new esri.symbol.PictureMarkerSymbol('images/orangeDiamond.png', 24, 24); var buildingRenderer = new esri.renderer.SimpleRenderer(buildingSymbol); buildingLayer.setRenderer(buildingRenderer); map.addLayer(buildingLayer); populateBuildingDropDown(buildingLayer); } function pointToExtent(map, point, toleranceInPixel) { var pixelWidth = map.extent.getWidth() / map.width; var toleraceInMapCoords = toleranceInPixel * pixelWidth; return new esri.geometry.Extent( point.x - toleraceInMapCoords, point.y - toleraceInMapCoords, point.x + toleraceInMapCoords, point.y + toleraceInMapCoords, map.spatialReference ); } function populateBuildingDropDown(buildingLayer){ buildingAgencyList.length = 0; var queryTask = new esri.tasks.QueryTask(buildingLayer.url); var query = new esri.tasks.Query(); query.outFields = ["*"]; query.where = "1=1"; query.returnGeometry = false; //populates the pick list searching state facilities by agency dojo.connect(queryTask, "onComplete", function (featureSet){ var select = dijit.byId("facilitySelect"); dojo.forEach(featureSet.features, function (feature){ var value= feature.attributes.Type; buildingAgencyList.push(value); }); buildingAgencyList.sort(); var sortedList = sortAndRemoveDuplicates(buildingAgencyList); for (var i = 0; i < sortedList.length; i++) { var bAgencyName = sortedList; select.addOption({ label: bAgencyName, value: bAgencyName }); } }); queryTask.execute(query); } function sortAndRemoveDuplicates(arr) { var copy = arr.slice(0); arr.length = 0; for (var i = 0, len = copy.length; i < len; ++i) { if (i === 0 || copy != copy[i - 1]) { arr.push(copy); } } return arr; } function filterFacilityByType() { var e = dijit.byId("facilitySelect"); var code = e.value; map.graphics.clear(); map.infoWindow.hide(); var filterExpression = "Type = '" + code + "'"; buildingLayer.setDefinitionExpression(filterExpression); buildingLayer.setVisibility(true); } function toggleLayer (layerId) { var layer = map.getLayer(layerId); if (layer.visible){ layer.setVisibility(false); map.infoWindow.hide(); }else{ layer.setVisibility(true); } } function clearBuildingLayer () { var exp = ""; var exp = "1=1"; var dirty = (new Date()).getTime(); buildingLayer.setDefinitionExpression(dirty + "=" + dirty); //buildingLayer.setDefinitionExpression(exp); buildingLayer.refresh(); var select = dijit.byId("facilitySelect"); select.reset(); map.graphics.clear(); map.infoWindow.hide(); } dojo.addOnLoad(init); </script> </head> <body class="claro"> <div dojotype="dijit.layout.BorderContainer" design="headline" gutters="false" style="width: 100%; height: 100%; margin: 0;"> <div id="mainHeader" dojotype="dijit.layout.ContentPane" region="top" > Filter Expression Example </div> <div id="mapDiv" dojotype="dijit.layout.ContentPane" region="center" style="overflow:hidden;"splitter="true"> </div> <div id="leftPane" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'left'"splitter="true" > <button dojoType="dijit.form.Button" id="btnBuilding" class="togglebutton" iconClass="buildingIcon" onClick="toggleLayer('buildingLayer');" title="Turn State Facilities On/Off"> Facility </button> </br> Filter facilities by type: <select data-dojo-type="dijit.form.Select" id="facilitySelect" onchange="filterFacilityByType()" title="Display homes by level of care"> <option>Select type</option> </select> <button id="btnClear" dojotype="dijit.form.Button" onClick="clearBuildingLayer();" title="Clear Filter by Agency">Clear Results</button> </div> </div> </body> </html>
var dirty = (new Date()).getTime(); buildingLayer.setDefinitionExpression(dirty + "=" + dirty)
states.setDefinitionExpression("1=1");
buildingLayer.setDefinitionExpression(buildingLayer.defaultDefinitionExpression);
The fiddle doesn't work for me. It just stays on South Carolina, no matter which button I push. I changed my code to switch my filter expression to buildingLayer.setDefinitionExpression(" "); Instead of showing all features, it shows none at all.
buildingLayer.setDefinitionExpression(" ");
buildingLayer.setDefinitionExpression("");
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.