I’ve just started with mapping a few “Simple 3D Buildings” (S3DB) and struck a couple of more-or-less severe problems concerning the involvement of multipolygons and the
outline role, which I would like bring to discussion:
If we consider S3DB from the purely 3D-Buildings perspective of renderers which fully know how to parse them (i.e. F4Map and Streets.Gl), the set of
building:parts, grouped by a
building=* relation seems to be fully sufficient to represent a building.
Only, if we add renderers which don’t know how to interpret that construct into the equation or if we want to expressly indicate that a different 2D outline than the natural “union of all parts” should be used, we need a simple (multi-)polygon. Coincidentally, at least F4Map also requires an outline to be the union of all parts; it does not deal well with parts which protrude beyond the outline, despite that being allowed by S3DB.
Here comes the problem with adding an
Consider a S3DB which is made from a 10x10 square on level 1, centered on the top sits a 5x5 square on level 2, and on level 3 there is a 20x5 long rectangle which protrudes beyond the 10x10 square at both ends:
+-----------+ #########L3######### | | ##L2## +--------------------------+ ####L1#### +--------------------------+ | | +-----------+ z |__ y |__ x x
Note how L3 and L1 share no vertices. The 4 intersections seen in the (x,y)-plane don’t have vertices in the corner. How can I obtain an
- If I want to create an outline for consumers which are not able to automatically infer it as “the union of the footprints in the (x,y)-plane”, I would optimally – mathematically – create the outline as the explicit union of the
building:partpolygons. But OSM doesn’t have a Union relation, only a Multipolygon relation, and that won’t accept overlapping areas!
- I could break the parts down by splitting them such, that afterwards I can choose a set of split
building:parts which do not overlap, and put that into a multipolygon. But splitting the parts – which are already what they should be – will create its own bunch of difficulties.
- I could manually create a polygon for the outline, but if I place that where it is supposed to be, it will have 4 additional vertices in the convex corners where originally no vertices are! On the one hand, the separate
outlinepolygon should exactly match the outline – which suggests they should snap together on vertices – on the other hand, I musn’t introduce vertices in the
building:parts which aren’t there. Plus, if I don’t share these vertices, they will be sitting on the corners and any editor like iD will try to snap them to the lines of L3 and L1 first thing.
The only solution which is proper seems to be composing the outline from the parts through a Boolean union; but for that we currently have no tool.
But would there be anything which speaks against Multipolygons supporting overlapping areas? The current rules for validity say that they must not, but is that really necessary?