我正在制作一张交互式地图,该地图使用Leaflet和一些GeoJSON数据显示城市铁路运输的历史。我的GeoJSON数据如下所示:
var lines = [
{
"type": "FeatureCollection",
"name": "stadtmitte_gerresheim",
"startYear": "1902",
"endYear": "2019",
"lineColor": "#DD0000",
"trainID": "001",
"features": [
{
"type": "Feature",
"properties": {
"lineName": "U73",
"station1": "Universität Ost/Botanischer Garten",
"station2": "Gerresheim S",
"startYear": "2016",
"endYear": "2019",
"lineColor": "#DD0000",
},
"geometry": {
"type": "GeometryCollection",
"geometries": [
{
"type": "LineString",
"lineID": "001",
"lineDescription": "Schleife am S-Bahnhof Gerresheim",
"coordinates": [...
]
},
{
"type": "LineString",
"lineID": "002",
"lineDescription": "Gerresheim S bis Ecke Schönaustraße/Heyestraße",
"coordinates": [...
]
}
....
我正在使用几个FeatureCollection,其中包含一些Feature。如您所见,每个要素的几何由GeometryCollection定义(主要由LineString组成)。
我想使用Leaflet根据其成员为每个单个几何体(GeometryCollections中的LineStrings)设置样式。目前,我只能通过Feature设置整个GeometryCollection的样式:
L.geoJSON(route, {
filter: function(feature) {
if (checkYear(feature)) {
return true;
} else {
return false;
}
},
style: function(feature) {
switch (feature.properties.tunnel) {
case 'yes': return {color: "#ff0000", dashArray: "1,6"};
default: return {color: "#ff0000"}
}
},
pointToLayer: function (feature, latlng) {
getIconSize();
switch (feature.properties.underground) {
case 'yes': return L.marker(latlng, {icon: stadtbahnIcon});
default: return L.marker(latlng, {icon: strassenbahnIcon});
}
}
}).addTo(mymap);
}
我的问题:是否可以将单个样式函数传递给同一要素的不同几何,而不是将同一样式函数传递给该要素中的所有几何?如果是这样,怎么办?我想应该有可能,因为Leaflet为每个Geometry创建一条路径。
欢呼声
答案 0 :(得分:2)
是否可以将单个样式功能传递给同一要素的不同几何?
否。
Leaflet在GeoJSON right over here中为每个L.Layer
创建一个Feature
实例;以及style
回调函数just loops over the L.Layer
s corresponding to each feature的应用,它不会对嵌套的L.LayerGroup
(也包括创建的L.Polyline
和L.Polygon
GeometryCollection
的结果是没有对原始GeoJSON功能及其属性的引用。
我想您可能要使用TurfJS' geomEach
(或类似的东西)来预处理您的要素和几何。