function HAPCexecuteQueryTask(fmc) { HAPCquery.where = "FisheryManagementCouncil = '"+ fmc +"'"; HAPCqueryTask.execute(HAPCquery,populateList); HAPCqueryTask.execute(HAPCquery,showResults); }
I want to zoom to a feature (graphic) when a user selects it from a dojo filtering select list. This list is populated using a queryTask. Is it okay to execute a second queryTask that takes the same results and does something else with it? function HAPCexecuteQueryTask(fmc) { HAPCquery.where = "FisheryManagementCouncil = '"+ fmc +"'"; HAPCqueryTask.execute(HAPCquery,populateList); HAPCqueryTask.execute(HAPCquery,showResults); }I have been looking at this example and it seems to be pretty close to what I want to do (see last entry for solution. http://forums.arcgis.com/threads/36317-Zoom-to-Graphic?highlight=graphics
Instead of two queries, why not add an onclick event to the item in the List that zooms to the geometry? (if you showed your populatelist /showresults functions, it would help)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>State Info</title> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.5/js/dojo/dijit/themes/tundra/tundra.css"> <script type="text/javascript">var dojoConfig = { parseOnLoad:true };</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.5"></script> <script type="text/javascript"> dojo.require("esri.tasks.query"); dojo.require("dijit.form.Select"); dojo.require("dijit.form.FilteringSelect"); dojo.require("dojo.data.ItemFileReadStore"); dojo.require("dojo.parser"); var query, queryTask, map, hapcLayer; function init() { //create map and add layer map = new esri.Map("mapDiv"); var layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/Ocean_Basemap/MapServer"); map.addLayer(layer); hapcLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://egisws02.nos.noaa.gov/ArcGIS/rest/services/NMFS/HAPC/MapServer", { "id": "HAPC" }); map.addLayer(hapcLayer); hapcLayer.hide(); } //initialize query task queryTask = new esri.tasks.QueryTask("http://egisws02.nos.noaa.gov/ArcGIS/rest/services/NMFS/HAPC/MapServer/0"); //initialize HAPC query query = new esri.tasks.Query(); query.returnGeometry = true; query.outFields = ["HAPC_Sitename","FisheryManagementCouncil"]; function executeQueryTask(fmc) { //alert(fmc); //set query based on what user selected in from list; query.where = "FisheryManagementCouncil = '"+ fmc +"'"; //alert(query.where); //execute query queryTask.execute(query,populateList); } function populateList(results) { //Populate the dropdown list box with unique values var zone; var values = []; //create array var testValsEncountered={}; // create JSON object (dictionary) to hold multiple name:value pairs //Add option to display all zoning types to the dropdown list //values.push({name:"ALL"}); //All is not a value in the layer which is why it is being hard coded here. var features = results.features; //features is a property of query task and has the type of 'graphic'. It is an array. dojo.forEach (features, function(feature) { //optimized way of doing a for loop, specific to dojo, patterned after HTML5. Let's you apply a function to each element of an array. Feauture is each item in the array. zone = feature.attributes.HAPC_Sitename; //feature in this context is a graphic and attribute is a property if (!testValsEncountered[zone]) { //tests to see if the testval object containing the value of zone doesn't exist testValsEncountered[zone] = true; //creates a "key" zone with a value of true values.push({name:zone});//push the JSON pair into the values array } }); //sort function by Douglas Crockford, page 81, Javascript: The Good Parts var by = function(name){ return function (o,p) { var a,b; if (typeof o === 'object' && typeof p === 'object' && o && p) { a = o[name]; b = p[name]; if (a===b){ return o; } if (typeof a === typeof b){ return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; }else { throw { name: 'Error', message: 'Expected an object when sorting by ' + name }; } }; }; values.sort(by('name')); //sorts the array of unique values values.unshift({name:"ALL"}); //ensures that an ALL option is not part of the sort and is listed first //Create a ItemFileReadStore and use it for the ComboBox's data source var dataItems = { //create JSON object to hold multiple name:value pairs identifier: 'name', //optional label: 'name', //optional items: values }; var store = new dojo.data.ItemFileReadStore({data:dataItems}); dijit.byId("mySelect").store = store; } function applyLayerDef(selItem){ map.graphics.clear(); //Filter the layer to display only the selected HAPC feature if (selItem.value !== 'ALL') { var layerDefs = []; layerDefs[0] = "HAPC_Sitename = " + "'" + selItem.value + "'"; layerDefs.visibleLayers = [0]; map.getLayer("HAPC").setLayerDefinitions(layerDefs); hapcLayer.show(); } else { map.getLayer("HAPC").setDefaultLayerDefinitions(); hapcLayer.show(); } } dojo.addOnLoad(init); </script> <body class="tundra"> <br/> Select A Region : <select name="fmc2" id="fmc2" onChange="executeQueryTask(dojo.byId('fmc2').value);"> <option value="" selected="selected">Select Region</option> <option value="Mid-Atlantic Fishery Management Council">MAFMC</option> <option value="Gulf of Mexico Fishery Management Council">GFMC</option> </select> <select id="mySelect" dojotype="dijit.form.FilteringSelect" style="width:300px;font-size:18px;" autoComplete="true" forceValidOption="false" value="Select HAPC" onChange="applyLayerDef(this)"> </select> <div id="mapDiv" style="width:600px; height:600px; border:1px solid #000;"></div> </body> </html>
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.