【发布时间】:2014-08-07 20:43:52
【问题描述】:
我是 Leaflet 和 JavaScript 的新手。我想知道我是否可以用更简洁的方式对我的 Leaflet 地图进行编码。
我的地图包含三种不同颜色的三个 GeoJSON 图层。我通过为每一层调用单独的样式函数来设置颜色。函数“style”返回蓝色,函数“style2”返回紫色,函数“style3”返回粉色。我告诉第 1 层使用“样式”,第 2 层使用“样式2”等。
地图在这里:http://talia.droppages.com/ask/three_layers.html
我可以用 ONE 样式功能做同样的事情吗?本质上,样式功能是否可以检测图层并执行以下操作:
if the layer is layer 1, style like this______
if the layer is layer 2, style like this______
if the layer is layer 3, style like this______
如果可以,我将如何在代码中编写它?
我经常想对多个图层使用 ONE 功能,例如设置弹出内容,但我不知道如何使该功能根据单击的图层而表现不同。我只知道如何编写类似但独立的函数并分别调用。
<div id="map" style="width:800px; height: 600px"></div>
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
<script src="http://talia.droppages.com/slccommcounc.js"></script>
<script src="http://talia.droppages.com/tract158slc.js"></script>
<script src="http://talia.droppages.com/slccouncil.js"></script>
<script>
var map = L.map('map').setView([40.8, -111.928], 11);
L.tileLayer('http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 18,
minZoom: 7
}
).addTo(map);
function style(feature) {
return {
weight: 1,
opacity: 1,
color: 'blue',
fillColor: 'cornflowerblue',
fillOpacity: 0.5
};
}
function style2(feature) {
return {
weight: 1,
opacity: 1,
color: 'blueviolet',
fillColor: 'plum',
fillOpacity: 0.5
};
}
function style3(feature) {
return {
weight: 1,
opacity: 1,
color: 'fuchsia',
fillColor: 'pink',
fillOpacity: 0.5
};
}
var layer1 = new L.geoJson(slccommcounc, {
style: style,
}).addTo(map);
var layer2 = new L.geoJson(tract158slc, {
style: style2,
})
var layer3 = new L.geoJson(slccouncil, {
style: style3,
})
L.control.layers(null,{'Layer 1 Title':layer1,'Layer 3 Title':layer3,'Layer 2 Title':layer2},{collapsed:false}).addTo(map);
</script>
【问题讨论】:
-
最好指定为什么你想为此使用一个函数:你指定了三种不同的样式。即使是最简洁的函数也只能在三者之间进行选择——它会比使用三个函数更复杂,也更不直接。
-
@tmcw 我明白你的意思 - 一个功能仍然会分成几部分。我问一个函数的原因是为了在以后的场景中简洁,在地图上添加了更多的图层。例如:也许我有 10 个图层,除了“颜色”属性之外,我希望它们具有完全相同的样式属性。在颜色属性点为每个图层分配颜色而不是重复功能和所有设置 10 次似乎不太多余。我很想知道这是否可能以及如何使用 Leaflet 对其进行编码。
标签: javascript leaflet gis geojson