Selecting polygons intersecting with another polygon

2574
6
01-23-2011 09:56 AM
SamirGambhir
Occasional Contributor III
Hi,
I have been trying to make this code work for sometime which should have taken me less time than I have spent on it so far. My code looks up a zip code file, selects a zipcode based on user selection. Once selected, it highlights the selected zipcode (mycode works till this point very well) and runs a query on another file to select all census tracts that intersect with the selected zipcode boundary. My code stops short of selecting tracts based on zipcode selection. Any help to resolve this will be great! Here is my code:

function QueryByZip(Zip_ID){
map.graphic.clear();
     dijit.byId('progress').show();
  queryTask= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KC_zipcodes/MapServer/2");
  query = new esri.tasks.Query();
  query.where = "ZIP = '" + Zip_ID + "'";
  query.returnGeometry = true;
  query.outFields = ["ZIP"];
  queryTask.execute(query);
  dojo.connect(queryTask, "onComplete", zoomToZip);
}

function zoomToZip(featureSet){
var features = featureSet.features;
var zipGraphic;
  for (var i=0, il=features.length; i<il; i++) {
     zipGraphic = new esri.Graphic(features);
          map.graphics.add(zipGraphic.setSymbol(zipSymbol));
    }
  queryTask2= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KingCountyAllOverlaysForQueryNew/MapServer/0");
  query2 = new esri.tasks.Query();
  query2.geometry = zipGraphic.geometry;
  query2.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
  query2.returnGeometry = true;
  queryTask2.execute(query2);
  dojo.connect(queryTask2, "onComplete", selectTracts);
}

function selectTracts(featureSet) {
var featureTracts = featureSet.features;
var tractGraphic;
       for (var i=0, il=featureTracts.length; i<il; i++) {
     tractGraphic = new esri.Graphic(featureTracts);
        map.graphics.add(tractGraphic.setSymbol(highlightSymbol));
    }
    map.setExtent(tractGraphic.geometry.getExtent());
}
0 Kudos
6 Replies
nicogis
MVP Frequent Contributor
var loading = dojo.byId("progress");

function QueryByZip(Zip_ID){

map.graphic.clear();
esri.show(loading);
var queryTask= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KC_zipcodes/MapServer/2");
dojo.connect(queryTask, "onComplete", zoomToZip);
var query = new esri.tasks.Query();
query.where = esri.substitute({zip: Zip_ID},"ZIP = '${zip}'");
query.returnGeometry = true;
query.outFields = ["ZIP"];
queryTask.execute(query);

}

function zoomToZip(featureSet){
var features = featureSet.features; 
map.graphics.add(features[0].setSymbol(zipSymbol));

var queryTask2= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KingCountyAllOverlaysForQueryNew/MapServer/0");
dojo.connect(queryTask2, "onComplete", selectTracts);
var query2 = new esri.tasks.Query();
query2.geometry = zipGraphic.geometry;
query2.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
query2.returnGeometry = true;
queryTask2.execute(query2);
}

function selectTracts(featureSet) {
   var featureTracts = featureSet.features; 
   map.graphics.add(featureTracts[0].setSymbol(highlightS ymbol));
   
   //if point
   if (featureTracts[0].geometry.type === 'point')   
       var factor = 1000;
       extent = new esri.geometry.Extent(pt.x - factor, pt.y - factor, pt.x + factor, pt.y + factor,   pt.SpatialReference);
    }
    else
        extent = featureTracts[0].geometry.getExtent();

   map.setExtent(extent);
} .



remember that all task return dojo.Deferred so you can add a callback for run a task after first task and so you have more control for abort erroback ect.
0 Kudos
SamirGambhir
Occasional Contributor III
Thanks Domenico for looking at my code and for your help. I am looking up dojo campus to see how to use dojo.Deferred in this case.
I revised my code based on your suggestion but, unfortunately, it did not help solve the issue.
Thanks
Samir
0 Kudos
HemingZhu
Occasional Contributor III
Hi,
I have been trying to make this code work for sometime which should have taken me less time than I have spent on it so far. My code looks up a zip code file, selects a zipcode based on user selection. Once selected, it highlights the selected zipcode (mycode works till this point very well) and runs a query on another file to select all census tracts that intersect with the selected zipcode boundary. My code stops short of selecting tracts based on zipcode selection. Any help to resolve this will be great! Here is my code:

function QueryByZip(Zip_ID){
map.graphic.clear();
     dijit.byId('progress').show();
  queryTask= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KC_zipcodes/MapServer/2");
  query = new esri.tasks.Query();
  query.where = "ZIP = '" + Zip_ID + "'";
  query.returnGeometry = true;
  query.outFields = ["ZIP"];
  queryTask.execute(query);
  dojo.connect(queryTask, "onComplete", zoomToZip);
}

function zoomToZip(featureSet){
var features = featureSet.features;
var zipGraphic;
  for (var i=0, il=features.length; i<il; i++) {
     zipGraphic = new esri.Graphic(features);
          map.graphics.add(zipGraphic.setSymbol(zipSymbol));
    }
  queryTask2= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KingCountyAllOverlaysForQueryNew/MapServer/0");
  query2 = new esri.tasks.Query();
  query2.geometry = zipGraphic.geometry;
  query2.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
  query2.returnGeometry = true;
  queryTask2.execute(query2);
  dojo.connect(queryTask2, "onComplete", selectTracts);
}

function selectTracts(featureSet) {
var featureTracts = featureSet.features;
var tractGraphic;
       for (var i=0, il=featureTracts.length; i<il; i++) {
     tractGraphic = new esri.Graphic(featureTracts);
        map.graphics.add(tractGraphic.setSymbol(highlightSymbol));
    }
    map.setExtent(tractGraphic.geometry.getExtent());
}


change these two lines of code:
tractGraphic = new esri.Graphic(featureTracts);  ---Wrong here
map.graphics.add(tractGraphic.setSymbol(highlightS ymbol));
to:
tractGraphic =new esri.Graphic();
map.graphics.add(tractGraphic.setGeometry(featureTracts.geometry).setSymbol(highlightSymbol));
0 Kudos
SamirGambhir
Occasional Contributor III
Thanks Heming for looking into..........but still no luck. I have tried adding controls at each step of the code and realized the problem is with the second query that is supposed to select tracts based on zip code selection. Any suggestions?
Thanks
Samir
0 Kudos
JigneshKanani
New Contributor
It looks like you are executing the queryTask2 before listening for callback.

Try changing the order of lines:
queryTask2.execute(query2);
dojo.connect(queryTask2, "onComplete", selectTracts);

to:
dojo.connect(queryTask2, "onComplete", selectTracts);
queryTask2.execute(query2);

Thanks,
Jignesh
0 Kudos
HemingZhu
Occasional Contributor III
It looks like you are executing the queryTask2 before listening for callback.

Try changing the order of lines:
queryTask2.execute(query2);
dojo.connect(queryTask2, "onComplete", selectTracts);

to:
dojo.connect(queryTask2, "onComplete", selectTracts);
queryTask2.execute(query2);

Thanks,
Jignesh


Also you don't need to connect an event every time in you method. set queryTask and queryTask2 as globel variable and define handlers one time in your init() function  Like the following:

var queryTask, queryTask2;
function init()
{
...
queryTask= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KC_zipcodes/MapServer/2");
dojo.connect(queryTask, "onComplete", zoomToZip);
.....
queryTask2= new esri.tasks.QueryTask("http://128.146.162.230/arcgis/rest/services/KingCountyAllOverlaysForQueryNew/MapServer/0");
dojo.connect(queryTask2, "onComplete", selectTracts);
.....
}
.....
function QueryByZip(Zip_ID){
map.graphic.clear();
dijit.byId('progress').show();

query = new esri.tasks.Query();
query.where = "ZIP = '" + Zip_ID + "'";
query.returnGeometry = true;
query.outFields = ["ZIP"];
queryTask.execute(query);

}

function zoomToZip(featureSet){
var features = featureSet.features;
var zipGraphic;
for (var i=0, il=features.length; i<il; i++) {
zipGraphic = new esri.Graphic(features);
map.graphics.add(zipGraphic.setSymbol(zipSymbol));
}
query2 = new esri.tasks.Query();
query2.geometry = zipGraphic.geometry;
query2.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
query2.returnGeometry = true;
queryTask2.execute(query2);
}

function selectTracts(featureSet) {
var featureTracts = featureSet.features;
var tractGraphic;
for (var i=0, il=featureTracts.length; i<il; i++) {
tractGraphic = new esri.Graphic(featureTracts);
map.graphics.add(tractGraphic.setSymbol(highlightSymbol));
}
map.setExtent(tractGraphic.geometry.getExtent());
}
0 Kudos