Basic 3D tagging help - fuel station cover

Hello all! I am trying to do more 3D mapping in my area. I am starting with the basics, roof shape and color. I have hit a snag on this roof though:

It is for a fuel station and this roof is covering the fuel pumps. In reality, there is about a 1m height to this roof with the exterior being red, and a hipped roof with a different color. Without any other tags, this roof was properly placed in the air on renders, but now appears on the ground and without the 1m height and red color exterior. See here:

What tag is making this roof now be on the ground and without the red exterior? These are the current tags:

building=roof
building:colour=red
building:material=metal
height=1
layer=2
roof:colour=silver
roof:height=1
roof:material=metal
roof:shape=hipped
self_service=yes

Any help in deciphering this would be greatly appreciated! I unfortunately do not know how far it is from the ground to the bottom of the covering to hard code heights.

The tag causing the vertical placement issue is height=1 (Which can be read as: “This feature is 1m tall, as measured from ground level to its highest point”)

Also to note - self_service=yes probably applies to the POIs (typically vending=fuel aka “gas pumps”) and not the roof :slight_smile:

Yes, self_service=yes is a holdover from when this was marked as the POI, on the next edit I will delete that.

So how do I tag that the cover is 1m tall not 1m off the ground? Even if it was on the ground, and 1m tall, shouldnt the red exterior still show? Im new to all this and want to do things right.

roof:height=1 m is that tag, read as “This roof is 1 m tall, as measured from its top / highest point (at height=*) down towards ground level.”

Think of it as height = roof:height + building:height

The tag for raising it up above the ground by a specific amount is min_height=*, which is typically signed on the roof somewhere to indicate maxheight=* restrictions for vehicles.

That makes sense, thanks! Ill try that and maybe the red will show? Of course, this cover has a roof itself, that is hipped so that brings a challenge that roof:height is already in use on this element to describe that part (the part visible on the f4 map link).

Forgive the screenshot of google street view, I should’ve grabbed a photo today, but this is the roof in question:

Oh, I was picturing it differently in my mind than what it actually looks like, which is:


(from Bing Streetside - link)

Which is a little more complicated. So in this case, building=roof is actually probably causing the issues, as I believe the 3D renderers assume that tag is only used for mapping the sloped (in this case, hipped) part of the roof, not that red block underneath. So, to really represent this, you’ll need to be a bit more creative.

Here’s how I organize it mentally:


(Note: building:height=* is discouraged by the Simple 3D Buildings Wiki page and gets flagged by some QA tools, so maybe best to keep that one tagged only mentally)

Which I would probably just tag:

building=yes
height=7 m
min_height=5 m
roof:height=1 m
roof:shape=hipped

Plus the other material and color properties. This is read as "There is some building here, with a height measured from ground to highest point of 7m, which starts 5 m above ground level, and which has a hipped roof that is 1m tall from its top down.


Now, one could argue that because building=roof is correct for this entire structure as I understand it as defined on the Wiki, to instead tag it as the less specific building=yes in order for this specific 3D renderer to handle it gracefully is “(Mis)mapping for the renderer” which should be avoided.

I probably wouldn’t personally bother, but there’s another option that is technically more correct which is to use two overlapping ways, one tagged

building=roof
height=7 m
roof:height=1 m
roof:shape=hipped

and the other

building:part=yes
height=6 m
min_height=5 m

This reads as: “There is a wall-less building (so, a roof only) here, with a height measured from ground to highest point of 7m, which has a hipped roof that is 1m tall from its top down. Additionally, there is another part of this building, with a height measured from ground to highest point of 6m, and which starts 5 m above ground level.”

3 Likes

My favorite kind of correct! Thanks so much! I’ll make those changes now!

building:part doesn’t mean that there is an additional / another part to a building, it merely describes it in detail. If your building:part covers the area of your building, then the renderers will only render the building:part. Only where there are no building:parts, renderers will fall back to rendering those like the building. So if you want to go for this approach, you will need 1 building with 2 overlapping building:parts.

But this is completely overcomplicating things. I’d go with this simple approach:

building=roof
height=7 m
min_height=5 m
roof:height=1 m
roof:shape=hipped
roof:orientation=along/across
layer=1
1 Like

Think of it as height = roof:height + building:height

I think it is height=building:height
and building:height is discouraged:
https://wiki.openstreetmap.org/wiki/Key:building:height

But this is completely overcomplicating things. I’d go with this simple approach:

building=roof
height=7 m
min_height=5 m
roof:height=1 m
roof:shape=hipped
roof:orientation=along/across
layer=1

A roof

IMHO it should be roof:height=2 and we do not have a way to map this.

No, that would mean that the roof itself is 2 m high. You have to look at it from the roof:levels perspective. roof:levels is the number of building levels in the roof. Even if a building level is 50% in the roof, it counts as a roof level. This means, that a building:part=roof (and thus also a building=roof) can have non-roof parts “attached” below them. If that makes sense :wink:

This I think solves part of my original problem (it now being on the ground instead of suspended) but doesn’t address the red portion in the photos that is not hipped and is just a box suspended in the air before the hipped roof of a different color starts. Is it just not rendering because I had height and roof:height set to 1? If I had set height to 2 it would still be on the ground but have the red portion?

My take: Draw 2 equal squares top of each other, one with min_height=5 + height=6, the other with min_height=6 + height=7. What the shape is for the lowest part… don’t specify, it will be flat ignored layer 1 + 2, or overdo and tag them as building:part= and draw a 3rd outline with the min-min of 5 + max of 7 + roof:levels=2, roof:shape=hipped as a regular building=roof

For hipped no orientation is needed as it is always correct ;o).

The 2D and 3D are then catered for, I think. F4Demo gives instant render to check (a minute if new, 24 hours if revised), For StreetGL there’s an alternate render somewhere mentioned in the StreetGL thread, that does so too as the regular in a short while… else, whenever the blue moon comes up. Their’s is the superior offering, if it works. Don’t ask me about that 4D wiki :o)

Yes, JOSM if you use that, for sure will moan for identical lines top of eachother… ignore.

At any rate, I’ve concocted my own Custom simple 3D preset, sectioned it in building and roof parts and seemingly it’s most always to desired result.

Layer 1/2 etc is so you can map service ways passing below w/o conflict of way crossing building, but that y’all know already.

PS, enter the source of the heights or a few one or two get a fit and race over to put that right.

Not sure which renderer you’re using, but this is to show what it looks like in OSM2World:

If you set roof:height same as height, then it will always start on the ground. A roof:height=2 and height=5 means: a 2 m height roof that stretches up to 5m into the air (and thus starts at 3m)

No, that would mean that the roof itself is 2 m high.

the roof itself IS 2m high. The building in question is just a roof.

This confusion is why I think building=roof is poorly named.


I don’t think roof:orientation=* for roof:shape=hipped is nonsense, my understanding is that it communicates this difference:

I would consider roof:orientation=along to be the default if it’s not specified, just like for roof:shape=gabled.

1 Like

Well yes, the building=roof is 2m high, but not the “root” part of it. The one that you specify with roof:shape.

I would always be explicit in 3D modelling things and not rely on any defaults like building level height.

For some buildings, it doesn’t look as ridiculous as in your example, and for those that are nearly square, it’s sometimes hard to say:

Well yes, the building=roof is 2m high, but not the “root” part of it. The one that you specify with roof:shape.

I always thought roof is about the roof, and roof:shape describes its shape. You are saying it should only describe the roof cladding and exclude the roof structure? Is this confirmed by the wiki?
The building=roof is much higher than 2 meters because it is measured from the ground to the top

Admittedly there’s always the exceptions which confirm the rule, mostly on hipped (see quite a few side hipped though needing direction as well) and substantially on gabled the default is fine. From StreetGL, hipped, no orientation.

And gabled but somehow both end up as sidehipped, left to right, the 3rd tagged as just hipped, no direction or orientation.

There’s one vexing long apartment block with a regular hipped roof where I added roof:orientation=along after checking, but renders as across per your right side of your graphic. Looks truly weird.