我正在尝试显示我从geofabrik下载的自行车关系,用osmconvert转换,用osmfilter过滤并转换为geojson。 Leaflet目前在地图上正确显示线串和节点。问题在于文件中包含的关系数据。这是我的GeoJson文件的一部分(我不会包含整个文件,因为它太大了):
var rower = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"id": "way/27149688",
"properties": {
"type": "way",
"id": "27149688",
"tags": {
"agricultural": "no",
"bicycle": "yes",
"highway": "residential",
"maxweightrating:hgv": "24",
"maxweightrating:hgv:condtitional": "none @ marked",
"name": "Mikołaja Reja",
"source:maxweightrating:hgv": "PL:sign_B-5-note"
},
"relations": [{
"role": "",
"rel": "4046118",
"reltags": {
"colour": "blue",
"description": "Leśna trasa rowerowa, preferowany rower górski / Forest track, Mountain Bike preferred",
"lcn_ref": "niebieski",
"name": "Szlak Trójmiejski",
"network": "rcn",
"route": "bicycle",
"type": "route"
}
}],
"meta": {
"timestamp": "2014-04-17T11:58:45Z",
"version": "20",
"changeset": "21747999",
"user": "wojtas82",
"uid": "729745"
},
"tainted": true
},
"geometry": {
"type": "LineString",
"coordinates": [[
18.5024141,
54.4354139
],[
18.503622,
54.4353485
],[
18.5053714,
54.4352858
]]
}
}]
};
正如您所看到的,关系在方括号中。我希望根据关系> reltags>颜色标签显示不同颜色的轨道。这是我的主要html文件(实际上是不起作用的一方):
var rower2 = L.geoJson(rower, {
style: function (feature) {
switch (feature.properties.relations) {
case 'blue':
return {color: "#ff0000"};
case 'red':
return {color: "#0000ff"};
}
}
}).addTo(map);
我尝试将此部分(feature.properties.relations)修改为(feature.properties.relations.reltags.colour),但它不起作用。有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
这不起作用,因为feature.properties.relations
是一个包含对象的数组(因此是周围的括号)。要访问存储在该数组中的对象,可以使用如下数组表示法:feature.properties.relations[0]
表示数组中的第一个对象,feature.properties.relations[1]
表示数组中的第二个对象,依此类推。因此,如果要访问数组中第一个关系对象中reltags对象的color属性,则应使用feature.properties.relations[0].reltags.colour
var rower2 = L.geoJson(rower, {
style: function (feature) {
switch (feature.properties.relations[0].reltags.colour) {
case 'blue':
return {color: "#ff0000"};
case 'red':
return {color: "#0000ff"};
}
}
}).addTo(map);
但我的猜测是,你会遇到麻烦,因为OSM确实使用数组来实现某种目的的关系。我的猜测是,一个特征可以有多个关系,因此它可以有多种颜色。
这是关于Plunker的一个工作示例:http://plnkr.co/edit/EjCCsb?p=preview
PS。我想知道为什么你在blue
的情况下返回'#FF0000',因为那是红色的代码,同样的情况是red
,你要返回'#0000FF'这是蓝色的代码。除此之外,当您使用feature.properties.relations[0].reltags.colour
时,代码工作正常,如我提供的示例中所示。