Querying feature info for L.esri.dynamicMapLayer “bbox must be specified”

5544
2
03-03-2016 03:04 PM
Labels (1)
JeffreyDege
New Contributor II

I have a Leaflet map in which I am displaying an Esri ArcGIS REST layer, using L.esri.dynamicMapLayer(). The code that initializes this layer is passed the URL to the service and a comma-separated list of layers to be displayed - which service and which layers is configured by the user.

My task is to provide a means by which the user can click on the map and obtain feature information for the nearby facilities. I had been looking at L.esri.query(), which was simply inappropriate.

Looking at L.esri.DynamicMapLayer, I see that it has a function identify(), which should return an IdentifyFeatures object. But I'm not having any luck with using it.

Everything I try results in a "bbox must be specified" error.

The documentation for dynamicMapLayer is here: dynamic-map-layer.html

It includes:

Returns a new L.esri.services.IdentifyFeatures object that can be used to identify features on this layer. Your callback function will be passed a GeoJSON FeatureCollection with the results or an error.

dynamicMapLayer.identify() 
.at(latlng, latlngbounds, 5) 
.run(function(error, featureCollection)
{ 
    console.log(featureCollection); 
}); 

Note that .at() is called with a latlong object, a latlngbounds object, and "5".

But the documentation for the IdentifyFeatures object is here: identify-features.html

And it's documentation for at() is:

at( latlng) this Identifies feautres at a given

Only one argument. No second bounds argument, or third numeric argument, simply a LatLng. The LatLng links to the Leaflet code, indicating that it's an L.latLng object, containing a lat and a lng property.

The example code for IdentifyFeatures is even more confusing:

L.esri.identifyFeatures({ 
    url: 'http://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer' 
}) 
.on(map) 
.at([45.543, -122.621]) 
.layers('visible:1') 
.run(function(error, featureCollection, response){ 
    console.log("UTC Offset: " + featureCollection.features[0].properties.ZONE); 
}); 

Here, we're not passing a L.latLng object, we're passing an array.

What gives? How am I supposed to use this?

0 Kudos
2 Replies
JohnGravois
Frequent Contributor

i answered this question on gis.se.

leaflet - Querying feature info for L.esri.dynamicMapLayer "bbox must be specified" - Geographic Inf...

if you still have questions after reviewing my response, i'd be happy to review a jsbin.

0 Kudos
JeffreyDege
New Contributor II

When I pass a LatLng object, I receive a "bbox must be specified" error. Any ideas as to what I should look at?

0 Kudos