function doIdentify(evt) { map.infoWindow.hide(); identifyParams.layerIds = [0,2]; var measureMode = dojo.query(".esriButton .dijitButtonNode").some(function(node, index, arr){ if(node.childNodes[0].checked){ //at least one of the measure tools is active so disable identify return true; } }); if(! measureMode){ map.graphics.clear(); identifyParams.geometry = evt.mapPoint; identifyParams.mapExtent = map.extent; identifyTask.execute(identifyParams,showResults); } } function showResults(results) { map.graphics.clear(); var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([98,194,204]), 2), new dojo.Color([98,94,204,0.8])); var idLayer; var highlightSymbol = new esri.symbol.SimpleMarkerSymbol().setColor(new dojo.Color([25,50,225,0.3])); //create array of attributes var items = dojo.map(results,function(result){ var graphic = result.feature; graphic.setSymbol(symbol); map.graphics.add(graphic); //Highlight selected feature graphic.setSymbol(highlightSymbol); return result.feature.attributes; }); //Create data object to be used in store if (results[0].layerName == 'Control Points') { showPointNameGrid(); searchType = "selControl"; var data = { identifier: 'POINT_NAME', //This field needs to have unique values label: 'POINT_NAME', //Name field for display. Not pertinent to a grid but may be used elsewhere. items: items }; //Create data store and bind to grid. store = new dojo.data.ItemFileReadStore({ data:data }); var grid = dijit.byId('grid4'); grid.setStore(store); } else if (results[0].layerName == 'surveys') { showSurveysNameGrid(); searchType = "selSurvey"; var data = { identifier: 'DOCUMENT_N', //This field needs to have unique values label: 'DOCUMENT_N', //Name field for display. Not pertinent to a grid but may be used elsewhere. items: items }; store = new dojo.data.ItemFileReadStore({ data:data }); var grid = dijit.byId('grid5'); grid.setStore(store); } else if (results[0].layerName == 'Cities') { showCityGrid(); var data = { identifier: 'CITY', //This field needs to have unique values label: 'CITY', //Name field for display. Not pertinent to a grid but may be used elsewhere. items: items }; store = new dojo.data.ItemFileReadStore({ data:data }); var grid = dijit.byId('grid2'); grid.setStore(store); } }
Do you know if there is a sample like this that has the ability to select multiple features by drawing a rectangle on the map?
//Selection Stuff for Points var toolbar, var toolbar2 var selectionLayer = new esri.layers.GraphicsLayer({ id: "selectionLayer" }); var outfieldsarray = []; var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 50, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([25,50,225,0.3]), 1), new dojo.Color([25,50,225,0.3])); var highlightsymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 20, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0]), 1), new dojo.Color([25,50,225,0.3])); drawToolbar = new esri.toolbars.Draw(map, { showTooltips: false }); dojo.connect(drawToolbar, "onDrawEnd", selectFeaturesAndResetMapDisplay); dojo.connect(map, "onLoad", function() { map.addLayer(selectionLayer); }); //build query task queryTask = new esri.tasks.QueryTask("http://slcarcgisdev1/SLCOGIS/rest/services/public/Surveyor/MapServer/0"); query = new esri.tasks.Query(); query.returnGeometry = true; // The Selection Method, called when Selection Mode is on and selection is done. function selectFeaturesAndResetMapDisplay(extent) { selectionLayer.clear(); //build query filter query.geometry = extent; query.returnGeometry = true; query.outFields = outfieldsarray; outfieldsarray = ["POINT_NAME", "SECTION", "TOWNSHIP_RANGE", "GRID_ADDRESS", "LONGITUDE_DD", "LATITUDE_DD", "MON_NOTES"]; //Execute task and call showResults on completion queryTask.execute(query, function(fset) { var items = []; for (var i = 0; i < fset.features.length; i++) { var attributes = fset.features.attributes; items.push(attributes); var selectiongraphic = fset.features; selectiongraphic.setSymbol(symbol); map.graphics.add(selectiongraphic); searchType = "PointName"; showPointNameGrid(); } var data = { identifier: 'POINT_NAME', //This field needs to have unique values label: 'POINT_NAME', //Name field for display. Not pertinent to a grid but may be used elsewhere. items: items }; //Create data store and bind to grid. store = new dojo.data.ItemFileReadStore({ data: data }); store.data = data; var grid = dijit.byId('grid4'); grid.setStore(store); store.close(); }); } //Selection Stuff for Surveys var selectionLayer2 = new esri.layers.GraphicsLayer({ id: "selectionLayer2" }); var outfieldsarray = []; var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 50, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([25,50,225,0.3]), 1), new dojo.Color([25,50,225,0.3])); var highlightsymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 20, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0]), 1), new dojo.Color([25,50,225,0.3])); drawToolbar2 = new esri.toolbars.Draw(map, { showTooltips: false }); dojo.connect(drawToolbar2, "onDrawEnd", selectFeaturesAndResetMapDisplaySurveys); dojo.connect(map, "onLoad", function() { map.addLayer(selectionLayer2); }); //build query task queryTask = new esri.tasks.QueryTask("http://slcarcgisdev1/SLCOGIS/rest/services/public/Surveyor/MapServer/2"); query = new esri.tasks.Query(); query.returnGeometry = true; // The Selection Method, called when Selection Mode is on and selection is done. function selectFeaturesAndResetMapDisplaySurveys(extent) { var tolerance = 5, pxWidth = map.extent.getWidth() / map.width, padding = tolerance * pxWidth; queryGeometry = extent; queryGeometry = new esri.geometry.Extent({ 'xmin': evt.mapPoint.x - padding, 'ymin': evt.mapPoint.y - padding, 'xmax': evt.mapPoint.x + padding, 'ymax': evt.mapPoint.y + padding, 'spatialReference': evt.mapPoint.spatialReference }); //build query filter query.geometry = extent; query.returnGeometry = true; query.outFields = outfieldsarray; outfieldsarray = ["DOCUMENT_N", "SECTION", "TOWNSHIP_RANGE"]; //Execute task and call showResults on completion queryTask.execute(query, function(fset) { var items = []; for (var i = 0; i < fset.features.length; i++) { var attributes = fset.features.attributes; items.push(attributes); var selectiongraphic = fset.features; selectiongraphic.setSymbol(symbol); selectionLayer2.add(selectiongraphic); map.graphics.add(selectiongraphic); searchType = "SurveysName"; showSurveysNameGrid(); } var data = { identifier: 'DOCUMENT_N', //This field needs to have unique values label: 'DOCUMENT_N', //Name field for display. Not pertinent to a grid but may be used elsewhere. items: items }; //Create data store and bind to grid. store = new dojo.data.ItemFileReadStore({ data: data }); store.data = data; var grid = dijit.byId('grid3'); grid.setStore(store); store.close(); }); } <div id="drawToolbar" dojotype="dijit.form.Button"> <div dojotype="dijit.form.Button" id="drawExtent" onclick="drawToolbar.activate(esri.toolbars.Draw.EXTENT);"> Select Control Points</div> </div> <div id="drawToolbar2" dojotype="dijit.form.Button" style="left:400 px; top:10px"> <div dojotype="dijit.form.Button" id="drawExtent2" onclick="drawToolbar2.activate(esri.toolbars.Draw.EXTENT);"> Select Surveys</div> </div> <div id="drawToolbarClear" dojotype="dijit.form.Button" style="left:400 px; top:10px"> <div dojotype="dijit.form.Button" button onClick="map.graphics.clear();"> Clear Selection </div> </div>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7" /> <!--The viewport meta tag is used to improve the presentation and behavior of the samples on iOS devices--> <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/> <title> </title> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.6/js/dojo/dijit/themes/soria/soria.css"> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.6/js/dojo/dojox/grid/resources/Grid.css"> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.6/js/dojo/dojox/grid/resources/SoriaGrid.css"> <style type="text/css"> html, body { height: 100%; width: 100%; margin: 0; } body{ background-color:white; overflow:hidden; font-family: "Trebuchet MS"; } .roundedCorners{ -moz-border-radius: 4px; } #header { border: solid 2px #7EABCD; background-color:white; color:peru; font-size:18pt; text-align:center; font-weight:bold; height:60px; } #subheader { font-size:small; color: peru; } #rightPane{ background-color:white; color:peru; border: solid 2px cornflowerblue; width:30%; overflow:hidden; } #map { background-color:white; border:solid 2px cornflowerblue; } #footer { border: solid 2px #7EABCD; background-color:white;color:peru;font-size:10pt; text-align:center; height:40px; } .soria .dojoxGridHeader .dojoxGridCell { color:peru !important; } </style> <script type="text/javascript"> var djConfig = { parseOnLoad: true }; </script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.6"> </script> <script type="text/javascript"> dojo.require("dijit.dijit"); // optimize: load dijit layer dojo.require("dijit.layout.BorderContainer"); dojo.require("dijit.layout.ContentPane"); dojo.require("esri.map"); dojo.require("esri.toolbars.draw"); dojo.require("esri.layers.FeatureLayer"); dojo.require("esri.tasks.query"); dojo.require("dojox.grid.DataGrid"); dojo.require("dojo.data.ItemFileReadStore"); dojo.require("dijit.layout.TabContainer"); var map, toolbar; var featureLayer; function init() { var initExtent = new esri.geometry.Extent({"xmin":-9270392,"ymin":5247043,"xmax":-9269914,"ymax":5247401,"spatialReference":{"wkid":102100}}); map = new esri.Map("map", { extent: initExtent }); dojo.connect(map, 'onLoad', function(map) { identifyTask = new esri.tasks.IdentifyTask("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/BloomfieldHillsMichigan/Parcels/MapServer"); identifyParams = new esri.tasks.IdentifyParameters(); identifyParams.tolerance = 3; identifyParams.returnGeometry = true; identifyParams.layerIds = [0,2]; identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL; identifyParams.width = map.width; identifyParams.height = map.height; //initialize the toolbar toolBar = new esri.toolbars.Draw(map); dojo.connect(toolBar, "onDrawEnd",onDrawEnd); //resize the map when the browser resizes dojo.connect(dijit.byId('map'), 'resize', map,map.resize); }); var basemapUrl = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"; var basemap = new esri.layers.ArcGISTiledMapServiceLayer(basemapUrl); var landBaseLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/BloomfieldHillsMichigan/Parcels/MapServer",{opacity:.55}); map.addLayer(basemap); map.addLayer(landBaseLayer); } function onDrawEnd(extent){ toolBar.deactivate(); executeIdentifyTask(extent); } function executeIdentifyTask(geom) { //clear the graphics layer map.graphics.clear(); var polygonSymbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DOT, new dojo.Color([151, 249,0,.80]), 3), new dojo.Color([151, 249, 0, 0.45])); identifyParams.geometry = geom; identifyParams.mapExtent = map.extent; identifyTask.execute(identifyParams,function(response){ var buildingItems = []; var parcelItems = []; dojo.forEach(response,function(result){ var feature = result.feature; //add selected feature to graphics layer feature.setSymbol(polygonSymbol); map.graphics.add(feature); if(result.layerName === 'Tax Parcels'){ parcelItems.push(feature.attributes); }else if(result.layerName === 'Building Footprints'){ buildingItems.push(feature.attributes); } }); //update the data grid var bldgStore = new dojo.data.ItemFileReadStore({data:{identifier:'PARCELID',items:buildingItems}}); gridBldg.setStore(bldgStore); var parcelsStore = new dojo.data.ItemFileReadStore({data:{identifier:'OBJECTID',items:parcelItems}}); gridParcels.setStore(parcelsStore); }); } //show map on load dojo.addOnLoad(init); </script> </head> <body class="soria"> <div id="mainWindow" dojotype="dijit.layout.BorderContainer" design="headline" gutters="false" style="width:100%; height:100%;"> <div id="header" dojotype="dijit.layout.ContentPane" class="roundedCorners" region="top"> This is the header section </div> <div id="map" dojotype="dijit.layout.ContentPane" class="roundedCorners" region="center"></div> <div dojotype="dijit.layout.ContentPane" id="rightPane" class="roundedCorners" region="right" splitter="true" > <button dojoType="dijit.form.Button" onClick="toolBar.activate(esri.toolbars.Draw.EXTENT);">Select</button> <div dojotype='dijit.layout.TabContainer'> <div dojotype='dijit.layout.ContentPane' title = 'Buildings' selected='true'> <table dojotype="dojox.grid.DataGrid" jsid="gridBldg" id="gridBldg" style="width:100%;height:100%;" selectionMode="none"> <thead> <tr> <th field="PARCELID">ID</th> <th field="Full Site Address" width="100%">Address</th> </tr> </thead> </table> </div> <div dojotype='dijit.layout.ContentPane' title='Parcels'> <table dojotype="dojox.grid.DataGrid" jsid="gridParcels" id="gridParcels" style="width:100%;height:100%;" selectionMode="none"> <thead> <tr> <th field="Parcel Identification Number">Parcel ID</th> <th field='School District Description'>School</th> <th field='Postal Address'>Address</th> </tr> </thead> </table> </div> </div> </div> <div id="footer" class="roundedCorners" dojotype="dijit.layout.ContentPane" region="bottom"> This is the footer section </div> </div> </body> </html>
function executeIdentifyTask(geom) { //clear the graphics layer navToolbar.deactivate(); //map.graphics.clear(); var polygonSymbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DOT, new dojo.Color([151, 249,0,.80]), 3), new dojo.Color([151, 249, 0, 0.45])); var markerSymbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 20, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 0, 0]), 1), new dojo.Color([25,50,225,0.3])); identifyParams.geometry = geom; identifyParams.mapExtent = map.extent; identifyTask.execute(identifyParams,function(response){ var controlItems = []; var surveyItems = []; dojo.forEach(response,function(result){ var feature = result.feature; //add selected feature to graphics layer feature.setSymbol(polygonSymbol); feature.setSymbol(markerSymbol); map.graphics.add(feature); if(result.layerName === 'Control Points'){ showPointNameGrid(); controlItems.push(feature.attributes); map.graphics.clear; }else if(result.layerName === 'surveys'){ showSurveysNameGrid(); surveyItems.push(feature.attributes); } }); //update the data grid var controlStore = new dojo.data.ItemFileReadStore({data:{identifier:'POINT_NAME',items:controlItems}}); var grid = dijit.byId('grid4'); grid.setStore(controlStore); var surveysStore = new dojo.data.ItemFileReadStore({data:{identifier:'DOCUMENT_NUM',items:surveyItems}}); var grid = dijit.byId('grid3'); alert("I'm a Survey"); grid.setStore(surveysStore); }); }