皆さん、こんにちは。<\/P>
私はLeafletを使い始めたばかりです。<\/P>
<\/P>
マップサービス内のすべてのレイヤーに対してポップアップを設定するためにdynamicMapLayerを設定しようとしています。<\/P>
<\/P>
これまで見た例はすべて、単純なレイヤー定義を使った固定の例ばかりでした。私は20以上のレイヤーがあるマップサービスを使用しており、それぞれが異なるフィールドセットを持っています。<\/P>
<\/P>
私がやりたいのは、各レイヤーごとに異なるポップアップ定義を作成することです。問題は、featureCollection配列に集められたレイヤー名をどのように識別するか分からないことです。<\/P>
<\/P>
以下が私が使っているコードです。Facility Identifier と LegacyID フィールドを持つフィーチャーを識別するとポップアップを返します。<\/P>
理想的には、レイヤー名(例:Sewer Manholes、Streets、Sewer Cleanoutなど)に基づいて適切なポップアップフィールドを返すメソッドが欲しいです。<\/P>
<\/P>
どなたか正しい方向へ導いていただけませんか?ありがとうございます。<\/P>
<\/P>
<!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' \/>
<!-- CDNからLeafletを読み込み -->
<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("見逃しました。");
return false;
} else {
var obj = featureCollection.features[1].properties;
\/\/- ポップアップ情報
var facilityID = obj["Facility Identifier"];
var legacyID = obj["LEGACYID"];
\/\/- ポップアップを返す
return '施設ID: ' + facilityID + "<br>" +
'Legacy ID: ' + legacyID;
}
});
<\/script>
<\/body>
<\/html><\/CODE><\/PRE>