Hello all,
I am very new to Leaflet.
I am trying to set up a dynamicMapLayer to have a popup for every layer in the map service.
All of the examples that I have seen so far use canned examples with simple layer definitions. I am using a map service with more than two dozen layers, each of which has a distinct set of fields.
What I would like to do is make popup definitions that are distinct to each layer. Where I am getting stuck is that I do not know how to identify the layer names that are gathered into the featureCollection array.
This is the code that I am using below. It returns a popup when it identifies a feature with the Facility Identifier and LegacyID fields.
Ideally, I would have a method return the appropriate popup fields based on the layer name (i.e. Sewer Manholes, Streets, Sewer Cleanout, etc...).
Can anyone point me in the right direction? Thank you.
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Learning Leaflet</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<!-- Load Leaflet from CDN-->
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
<script src="http://cdn-geoweb.s3.amazonaws.com/esri-leaflet/0.0.1-beta.5/esri-leaflet.js"></script>
<style>
html, body, #map {
width : 100%;
height : 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
document.getElement
var map = L.map('map').setView([35.578, -82.50], 17);
<!-- L.esri.basemapLayer("Gray").addTo(map); -->
var networkInfrastructure = L.esri.dynamicMapLayer('http://gis.msdbc.org/arcgis/rest/services/InternalViewer/NetworkInfrastructureI/MapServer',{useCors: false}).addTo(map);
var networkArray = networkInfrastructure.getLayers();
networkInfrastructure.bindPopup(function(error, featureCollection) {
if (error || featureCollection.features.length === 0) {
alert("you missed.");
return false;
} else {
var obj = featureCollection.features[1].properties;
// popup info
var facilityID = obj["Facility Identifier"];
var legacyID = obj["LEGACYID"];
// return popup
return 'Facility ID: ' + facilityID + "<br>" +
'Legacy ID: ' + legacyID;
}
});
</script>
</body>
</html>
Solved! Go to Solution.
when we tagged Release Candidate 6, we enhanced identify so that individual features in the response would include a new property 'layerId' to explain which layer in the map service the individual feature came from.
after you bump the CDN version of esri-leaflet in your sample, you'll be able to access:
featureCollection.features.layerId
RC6 release notes
Release Release Candidate 6 · Esri/esri-leaflet · GitHub
the specific Pull Request that introduced the functionality
when we tagged Release Candidate 6, we enhanced identify so that individual features in the response would include a new property 'layerId' to explain which layer in the map service the individual feature came from.
after you bump the CDN version of esri-leaflet in your sample, you'll be able to access:
featureCollection.features.layerId
RC6 release notes
Release Release Candidate 6 · Esri/esri-leaflet · GitHub
the specific Pull Request that introduced the functionality
Thank you very much, John! I appreciate you for both helping me and not mocking my inexperience.
I changed the reference to the script on my local host and immediately saw the layer-id present in the featureCollection object.
no sweat.