Build and show partial geometries for relatons

This commit is contained in:
Tom Hughes 2014-03-13 18:54:39 +00:00
parent ca35ac16e7
commit 77e39800d5

View file

@ -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) + " ")