3

I am using a QueryTask to select data from a Feature Service and pass the attribute values to a dGrid. I am using a where statement (query.where) to select only certain polygons from this service and I would like to also be able to pass a point to the query to further narrow the results. The Feature Service, where statement, and xy coordinates are passed as URL parameters. I am able to query the data using the just a query.where or just the query.geometry, but I am getting no results when I use both query.where and query.geometry (I have checked the data and there is data that satisfies both criteria.

The polygon feature service I am querying has about 10,000 polygons so perhaps it is a memory issue?

Note that I have removed the code to create the grid due to character limits.

require([
"esri/layers/FeatureLayer",
"esri/tasks/QueryTask",
"esri/tasks/query",
"dojo/ready",
"dojo/number",
"dojo/dom",
"dojo/on",
"dojo/parser",
"dojo/_base/array",
"dijit/form/Select",
"dojo/dom-style",
"dojo/dom-construct",
"dojo/_base/connect",
"dojo/_base/declare",
"dojo/store/Memory",
"dojo/store/Observable",
"dojo/number",
"dstore/Trackable",
"dstore/RequestMemory",
"dijit/registry",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dgrid/Grid",
"dgrid/editor",
"dgrid/Keyboard",
"dgrid/Selection",
"dgrid/extensions/ColumnHider",
"dgrid/extensions/Pagination",
"esri/geometry/Point",
"esri/SpatialReference",
"esri/geometry/webMercatorUtils",
"dojo/domReady!"
],
function (
 FeatureLayer,
 QueryTask,
 Query,
 ready,
 number,
 dom,
 on,
 parser,
 array,
 Select,
 domStyle,
 domConstruct,
 connect,
 declare,
 Memory,
 Observable,
 dojoNum,
 Trackable,
 RequestMemory,
 registry,
 BorderContainer,
 ContentPane,
 Grid,
 Editor,
 Keyboard,
 Selection,
 ColumnHider,
 Pagination,
 Point,
 SpatialReference,
 webMercatorUtils
) {
 "use strict";
 var memStore, data, mapServ, strHref, strURLParamReturn, URLQuery, coords, newcoords, gsvc, geom, URL, Index, layer, feature, ResFields, ResCols, grid, GMap, AGOL, Street, Search, strQueryString, iParam, aQueryString, aParam, i, MyGrid, qt, query;
 mapServ = "https://gisq.in.gov/arcgis/rest/services/ISDH/PHG_Data/FeatureServ";
 function getSingleURLParameter(ParamName) {
 strURLParamReturn = "";
 strHref = window.location.href;
 if (strHref.indexOf("?") > -1) {
 strQueryString = strHref.substr(strHref.indexOf("?"));
 aQueryString = strQueryString.split("&");
 for (iParam = 0; iParam < aQueryString.length; iParam++) {
 if (aQueryString[iParam].indexOf(ParamName + "=") > -1) {
 aParam = aQueryString[iParam].split("=");
 //---start patch for equal sign in argument
 if (aParam.length > 2) {
 for (i = 2; i < aParam.length; i++) {
 aParam[1] += '=' + aParam[i];
 }
 }
 //---end patch
 strURLParamReturn = aParam[1];
 break;
 }
 }
 }
 return unescape(strURLParamReturn);
 }
 URLQuery = getSingleURLParameter("where");
 //console.log(URLQuery);
 geom = getSingleURLParameter("geom").split(",");
 if (geom[0] > 37 && geom[0] < 42 && geom[1] < -84 && geom[1] > -89) {
 //coords = new Point("geom", new SpatialReference({wkid: 4326}));
 coords = new Point(-87, 41);
 coords.setSpatialReference(new SpatialReference({"wkid":8307}));
 newcoords = webMercatorUtils.geographicToWebMercator(coords);
 }
 URL = getSingleURLParameter("url");
 if (URL !== "") {
 mapServ = URL;
 }
 Index = getSingleURLParameter("layer");
 if (Index === "") {
 Index = 0;
 }
 console.log(Index);
 layer = mapServ.concat('/', Index);
 feature = new FeatureLayer(layer);
 qt = new QueryTask(layer);
 console.log(newcoords)
 query = new Query();
 //console.log(query);
 //query.where = URLQuery;
 query.text = URLQuery;
 query.geometry = newcoords;
 query.returnGeometry = true;
 query.outFields = ResFields;
 console.log(query);
 //qt.execute();
 qt.execute(query, function (results) {
 console.log(results);
 });
});
Bourbia Brahim
9471 gold badge6 silver badges15 bronze badges
asked Apr 22, 2016 at 14:26

1 Answer 1

1

the code snippet you've provided throws an error because you're making the request to an invalid url (FeatureServ/0/ instead of FeatureServer/0/). that said, you're also passing quite a few undefined/invalid parameters.

geometry: undefined
outFields: undefined
text:""

some things to keep in mind:

  • a point will never intersect another point unless they have identical/coincident geometry (see this blog for more info)
  • its not necessary to reproject geometries to the spatial reference of the layer you're querying. you can pass in geometries in any known coordinate system and ask for geometries back from the service in any coordinate system you want using outSpatialReference.
  • both using break points in the browser developer tools and sniffing the web traffic to inspect the web requests that are being triggered are both crucial for debugging.

working sample here.

your (broken) sample here.

answered Apr 24, 2016 at 17:11
2
  • Thank you for your response. But, the FeatureService that I am querying/intersecting is a polygon layer that is being passed through a URL parameter, along with the xy coordinates of the geometry and the query text. The code works when providing only query.geometry, or only query.where. But, does not work when both are provided. Commented Apr 25, 2016 at 11:09
  • 1
    im happy to help, but you need to provide a simplified repro case that demonstrates that behavior Commented Apr 25, 2016 at 14:23

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.