Eu tenho um mapa Leaflet no qual estou exibindo uma camada Esri ArcGIS REST, usando L.esri.dynamicMapLayer(). O código que inicializa essa camada recebe a URL do serviço e uma lista separada por vírgulas das camadas a serem exibidas - qual serviço e quais camadas são configurados pelo usuário.<\/P>
Minha tarefa é fornecer um meio pelo qual o usuário possa clicar no mapa e obter informações de feição para as instalações próximas. Eu estava olhando para L.esri.query(), que era simplesmente inadequado.<\/P>
Olhando para L.esri.DynamicMapLayer, vejo que ele tem uma função identify(), que deveria retornar um objeto IdentifyFeatures. Mas não estou tendo sucesso ao usá-lo.<\/P>
Tudo que tento resulta em um erro "bbox deve ser especificado".<\/P>
A documentação para dynamicMapLayer está aqui: dynamic-map-layer.html<\/A><\/P> Inclui:<\/P> Retorna um novo objeto L.esri.services.IdentifyFeatures que pode ser usado para identificar feições nesta camada. Sua função de callback receberá uma FeatureCollection GeoJSON com os resultados ou um erro.<\/P><\/BLOCKQUOTE>dynamicMapLayer.identify() .at(latlng, latlngbounds, 5) .run(function(error, featureCollection) { console.log(featureCollection); }); <\/CODE><\/PRE> Note que .at() é chamado com um objeto latlong, um objeto latlngbounds e "5".<\/P> Mas a documentação para o objeto IdentifyFeatures está aqui: identify-features.html<\/A><\/P> E sua documentação para at() é:<\/P> at( latlng) isso identifica feições em um dado ponto<\/P><\/BLOCKQUOTE>Apenas um argumento. Nenhum segundo argumento bounds ou terceiro argumento numérico, simplesmente um LatLng. O LatLng está vinculado ao código Leaflet, indicando que é um objeto L.latLng, contendo uma propriedade lat e uma propriedade lng.<\/P>O código de exemplo para IdentifyFeatures é ainda mais confuso:<\/P>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("Deslocamento UTC: " + featureCollection.features[0].properties.ZONE); }); <\/CODE><\/PRE> Aqui, não estamos passando um objeto L.latLng, estamos passando um array.<\/P> O que acontece? Como eu devo usar isso?<\/P>
Inclui:<\/P>
Retorna um novo objeto L.esri.services.IdentifyFeatures que pode ser usado para identificar feições nesta camada. Sua função de callback receberá uma FeatureCollection GeoJSON com os resultados ou um erro.<\/P><\/BLOCKQUOTE>dynamicMapLayer.identify() .at(latlng, latlngbounds, 5) .run(function(error, featureCollection) { console.log(featureCollection); }); <\/CODE><\/PRE> Note que .at() é chamado com um objeto latlong, um objeto latlngbounds e "5".<\/P> Mas a documentação para o objeto IdentifyFeatures está aqui:
Retorna um novo objeto L.esri.services.IdentifyFeatures que pode ser usado para identificar feições nesta camada. Sua função de callback receberá uma FeatureCollection GeoJSON com os resultados ou um erro.<\/P><\/BLOCKQUOTE>
dynamicMapLayer.identify() .at(latlng, latlngbounds, 5) .run(function(error, featureCollection) { console.log(featureCollection); }); <\/CODE><\/PRE> Note que .at() é chamado com um objeto latlong, um objeto latlngbounds e "5".<\/P> Mas a documentação para o objeto IdentifyFeatures está aqui:
E sua documentação para at() é:<\/P>
at( latlng) isso identifica feições em um dado ponto<\/P><\/BLOCKQUOTE>Apenas um argumento. Nenhum segundo argumento bounds ou terceiro argumento numérico, simplesmente um LatLng. O LatLng está vinculado ao código Leaflet, indicando que é um objeto L.latLng, contendo uma propriedade lat e uma propriedade lng.<\/P>O código de exemplo para IdentifyFeatures é ainda mais confuso:<\/P>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("Deslocamento UTC: " + featureCollection.features[0].properties.ZONE); }); <\/CODE><\/PRE> Aqui, não estamos passando um objeto L.latLng, estamos passando um array.<\/P> O que acontece? Como eu devo usar isso?<\/P>
at( latlng) isso identifica feições em um dado ponto<\/P><\/BLOCKQUOTE>
Apenas um argumento. Nenhum segundo argumento bounds ou terceiro argumento numérico, simplesmente um LatLng. O LatLng está vinculado ao código Leaflet, indicando que é um objeto L.latLng, contendo uma propriedade lat e uma propriedade lng.<\/P>
O código de exemplo para IdentifyFeatures é ainda mais confuso:<\/P>
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("Deslocamento UTC: " + featureCollection.features[0].properties.ZONE); }); <\/CODE><\/PRE> Aqui, não estamos passando um objeto L.latLng, estamos passando um array.<\/P> O que acontece? Como eu devo usar isso?<\/P>
i answered this question on gis.se.
leaflet - Querying feature info for L.esri.dynamicMapLayer "bbox must be specified" - Geographic Information Systems Sta…
if you still have questions after reviewing my response, i'd be happy to review a jsbin.
When I pass a LatLng object, I receive a "bbox must be specified" error. Any ideas as to what I should look at?
Membros conectados podem postar, seguir atualizações e mais. Novo aqui? Registre uma conta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.