[Talk-de] osmarender: Unechte Kreuzungen

Henry Loenwind henry at loenwind.info
Sa Mai 3 21:39:00 UTC 2008


Jochen Topf wrote:
> On Sat, May 03, 2008 at 04:57:21PM +0200, Henry Loenwind wrote:
>> Das Problem ist wohl, dass der Renderer die Seitenstriche anhand ihrer  
>> Position im Renderergebnis weglässt, nicht anhand der Position der  
>> originalen ways.
> 
> Das ist alles nur ein Seiteneffekt davon wie der Renderer diese
> "Seitenstriche" macht. Das geht so:

> Dieses Verfahren benutzen übrigens alle Renderer, die ich kenne. Auch die
> proprietären arbeiten alle so. Sie haben also alle diesen Fehler in
> diesem Fall. Wenn jemand eine Idee hat, wie man das besser machen kann,
> würde mich das interessieren. :-)

Einfach ist das nicht. Auf Anhieb fiele mir ein:

Zuerst werden alle nicht-Endnodes der ways (highway:*) untersucht. Wird 
ein node noch von mindestens einem anderen way (higway:*) im gleichen 
layer benutzt, wird der durchgehende way gesplittet. Effekt: Kreuzungen 
bestehen nur noch aus Endnodes. (Diesen Schritt kann man sich sparen, 
wenn man den folgenden davon überzeugt, mit durchgehenden ways an 
Kreuzungen zurechtzukommen.)

Dann werden die Endnodes der ways untersucht; wenn den letzten node 
entweder keine anderen ways (highway:*) im gleichen layer oder mehr als 
zwei sharen (d.h. es ist ein Ende oder eine Kreuzung), wird das letzte 
segment des ways (also das Stück vom vorletzten zum letzten node des 
ways) herausgelöst.

Als erstes werden nun die Reste der ways gerendert, darüber dann die 
herausgelösten Wegenden. Hierbei muss man darauf achten, wie man die 
Enden der Striche rendert, die Füllung muss rund überstehen, die 
Umrandung darf es nicht (außer bei echten Wegenden).

Erste Verfeinerung wäre es, zuerst die Enden, dann die Mitten und dann 
die Kreuzungen zu rendern.

Als zweite Verfeinerung kann man, statt das ganze letzten Stück 
herauszunehmen, einen neuen temporären node in den way einbauen, genau 
(maximale Straßenbreite)/2+(Breite eines Pixels nach dem Rendern) vom 
Ende entfernt.

Das sollte es dann eigentlich erschlagen...

cu
Henry

PS: Wo wir grade bei Sackgassen sind; warum verpasst osmarender 
Sackgassenenden, bei denen der node mit einer Fläche geteilt wird so 
schöne Rundungen, und sonst nicht? (z.B. 
Robinienweg/Willy-Brandt-Straße) Ok, wozu die Rundung da ist, weiß ich, 
es wundert mich nur, dass osmarender Straßen nicht von sonstigen ways 
unterscheidet dafür...




Mehr Informationen über die Mailingliste Talk-de