mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-20 15:34:49 +02:00
Handle incomplete relations
This commit is contained in:
@@ -4,11 +4,13 @@ iD.Relation = iD.Entity.extend({
|
||||
|
||||
extent: function(resolver) {
|
||||
return resolver.transient(this, 'extent', function() {
|
||||
var extent = iD.geo.Extent();
|
||||
for (var i = 0, l = this.members.length; i < l; i++) {
|
||||
extent = extent.extend(resolver.entity(this.members[i].id).extent(resolver));
|
||||
}
|
||||
return extent;
|
||||
return this.members.reduce(function (extent, member) {
|
||||
if (member = resolver.entity(member.id)) {
|
||||
return extent.extend(member.extent(resolver))
|
||||
} else {
|
||||
return extent;
|
||||
}
|
||||
}, iD.geo.Extent());
|
||||
});
|
||||
},
|
||||
|
||||
@@ -28,7 +30,7 @@ iD.Relation = iD.Entity.extend({
|
||||
//
|
||||
multipolygon: function(resolver) {
|
||||
var members = this.members
|
||||
.filter(function (m) { return m.type === 'way'; })
|
||||
.filter(function (m) { return m.type === 'way' && resolver.entity(m.id); })
|
||||
.map(function (m) { return { role: m.role || 'outer', id: m.id, nodes: resolver.fetch(m.id).nodes }; });
|
||||
|
||||
function join(ways) {
|
||||
|
||||
@@ -44,6 +44,15 @@ describe('iD.Relation', function () {
|
||||
|
||||
expect(r.extent(graph)).to.eql([[0, 0], [5, 10]])
|
||||
});
|
||||
|
||||
it("returns the known extent of incomplete relations", function () {
|
||||
var a = iD.Node({loc: [0, 0]}),
|
||||
b = iD.Node({loc: [5, 10]}),
|
||||
r = iD.Relation({members: [{id: a.id}, {id: b.id}]}),
|
||||
graph = iD.Graph([a, r]);
|
||||
|
||||
expect(r.extent(graph)).to.eql([[0, 0], [0, 0]])
|
||||
});
|
||||
});
|
||||
|
||||
describe("#multipolygon", function () {
|
||||
@@ -239,5 +248,17 @@ describe('iD.Relation', function () {
|
||||
|
||||
expect(r.multipolygon(graph)).to.eql([[[a, b, c, a], [d, e, f, d]], [[g, h, i, g]]]);
|
||||
});
|
||||
|
||||
specify("incomplete relation", function () {
|
||||
var a = iD.Node(),
|
||||
b = iD.Node(),
|
||||
c = iD.Node(),
|
||||
w1 = iD.Way({nodes: [a.id, b.id, c.id]}),
|
||||
w2 = iD.Way(),
|
||||
r = iD.Relation({members: [{id: w2.id, type: 'way'}, {id: w1.id, type: 'way'}]}),
|
||||
g = iD.Graph([a, b, c, w1, r]);
|
||||
|
||||
expect(r.multipolygon(g)).to.eql([[[a, b, c]]]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user