Build and show partial geometries for relatons
This commit is contained in:
parent
ca35ac16e7
commit
77e39800d5
1 changed files with 18 additions and 11 deletions
|
@ -140,15 +140,27 @@ OSM.Query = function(map) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function featureGeometry(feature, nodes) {
|
function featureGeometry(feature, features) {
|
||||||
var geometry;
|
var geometry;
|
||||||
|
|
||||||
if (feature.type === "node") {
|
if (feature.type === "node") {
|
||||||
geometry = L.circleMarker([feature.lat, feature.lon], featureStyle);
|
geometry = L.circleMarker([feature.lat, feature.lon], featureStyle);
|
||||||
} else if (feature.type === "way") {
|
} else if (feature.type === "way") {
|
||||||
geometry = L.polyline(feature.nodes.map(function (node) {
|
geometry = L.polyline(feature.nodes.map(function (node) {
|
||||||
return nodes[node];
|
return features["node" + node].getLatLng();
|
||||||
}), featureStyle);
|
}), featureStyle);
|
||||||
|
} else if (feature.type === "relation") {
|
||||||
|
geometry = L.featureGroup();
|
||||||
|
|
||||||
|
feature.members.forEach(function (member) {
|
||||||
|
if (features[member.type + member.ref]) {
|
||||||
|
geometry.addLayer(features[member.type + member.ref]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (geometry) {
|
||||||
|
features[feature.type + feature.id] = geometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
return geometry;
|
return geometry;
|
||||||
|
@ -171,23 +183,18 @@ OSM.Query = function(map) {
|
||||||
data: "[timeout:5][out:json];" + query,
|
data: "[timeout:5][out:json];" + query,
|
||||||
},
|
},
|
||||||
success: function(results) {
|
success: function(results) {
|
||||||
var nodes = {};
|
var features = {};
|
||||||
|
|
||||||
$section.find(".loader").stopTime("loading").hide();
|
$section.find(".loader").stopTime("loading").hide();
|
||||||
|
|
||||||
results.elements.forEach(function (element) {
|
|
||||||
if (element.type === "node") {
|
|
||||||
nodes[element.id] = [element.lat, element.lon];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
for (var i = 0; i < results.elements.length; i++) {
|
for (var i = 0; i < results.elements.length; i++) {
|
||||||
var element = results.elements[i];
|
var element = results.elements[i],
|
||||||
|
geometry = featureGeometry(element, features);
|
||||||
|
|
||||||
if (interestingFeature(element, latlng, radius)) {
|
if (interestingFeature(element, latlng, radius)) {
|
||||||
var $li = $("<li>")
|
var $li = $("<li>")
|
||||||
.addClass("query-result")
|
.addClass("query-result")
|
||||||
.data("geometry", featureGeometry(element, nodes))
|
.data("geometry", geometry)
|
||||||
.appendTo($ul);
|
.appendTo($ul);
|
||||||
var $p = $("<p>")
|
var $p = $("<p>")
|
||||||
.text(featurePrefix(element) + " ")
|
.text(featurePrefix(element) + " ")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue