Re: [Talk-de] osmarender: Unechte Kreuzungen

2008-05-03 Thread Jochen Topf
On Sat, May 03, 2008 at 02:22:50PM +0200, Henry Loenwind wrote:
> warum pinselt osmarender 2 Straße, die sich optisch im Renderergebnis 
> berühren, aber keinen gemeinsamen Node haben wie eine Kreuzung?
> 
> Beispiel:
> 
> http://www.informationfreeway.org/index.php?lat=49.334837743028665&lon=8.664168073246309&zoom=17&layers=B000F000F
> 
> Die untere von den drei Sackgassen endet laut josm 8,7m vor der 
> Umgehungsstraße (3m Fahrbahn, Lärmschutzwand, 2m Grünstreifen, 2m 
> Wendehammer ... passt).

Das liegt einfach daran, dass Strassen im Rendering eine gewisse Breite
haben, was sich ja nun nicht vermeiden läßt. Und die Breite der B535 in
diesem Rendering ist halt größer als der Abstand vom Ende der Sackgasse
zur Mitte der B535. Allgemein werden Strassen in Karten breiter
eingezeichnet, als sie wirklich sind, weil man sonst nichts mehr
erkennen kann.

Ein menschlicher Kartograph würde einen solchen Fall erkennen und die
Sackgasse etwas kürzer einzeichnen. Für einen automatischen Renderer ist
das aber sehr schwierig, alle solche und verwandte Fälle richtig zu
handhaben.

Du hast jetzt die Wahl: Entweder läßt Du es, wie es ist und hoffst
darauf, dass der Renderer sowas irgendwann mal kann oder Du machst im
JOSM die Sackgasse künstlich kürzer. Beides keine optimalen Lösungen...

> Muss ich jetzt schon ebenengleiche nebeneinanderliegende Wege nur für 
> die Renderer auf unterschiedliche Layer setzen?

Das auf keinen Fall. Würde auch nichts helfen, dann wäre nur die
Sackgasse über der B535.

Jochen
-- 
Jochen Topf  [EMAIL PROTECTED]  http://www.remote.org/jochen/  +49-721-388298


___
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-de


Re: [Talk-de] osmarender: Unechte Kreuzungen

2008-05-03 Thread Henry Loenwind
Jochen Topf wrote:
> On Sat, May 03, 2008 at 02:22:50PM +0200, Henry Loenwind wrote:
>> warum pinselt osmarender 2 Straße, die sich optisch im Renderergebnis 
>> berühren, aber keinen gemeinsamen Node haben wie eine Kreuzung?

> Ein menschlicher Kartograph würde einen solchen Fall erkennen und die
> Sackgasse etwas kürzer einzeichnen. Für einen automatischen Renderer ist
> das aber sehr schwierig, alle solche und verwandte Fälle richtig zu
> handhaben.

Mir geht es nicht, darum, dass sich die 2 Straßen überlappen (das ist 
ok), sondern, dass sie als Kreuzung dargestellt werden, d.h. dass die 
"Randlinien" beider Straßen fehlen.

IST:
#|g|##
-+g|##
wwg|##
-+g|##
#|g|##
(#=Hintergrund, -+|=Randlinie, g=gelbe Füllung, w=weisse Füllung)

SOLL:
#|g|##
-|g|##
w|g|##
-|g|##
#|g|##

KORREKT ABER UNNÖTIG:
#|g|##
+|g|##
||g|##
+|g|##
#|g|##
---+#|g|##
www|#|g|##
---+#|g|##
#|g|##

> oder Du machst im
> JOSM die Sackgasse künstlich kürzer. Beides keine optimalen Lösungen...

Bringt wenig, für die niedrigste Zoomstufe, in der die Sackgasse noch 
gerendert wird, müsste ich sie auf 10% ihrer tatsächlichen Länge 
verkürzen, oder so...

>> Muss ich jetzt schon ebenengleiche nebeneinanderliegende Wege nur für 
>> die Renderer auf unterschiedliche Layer setzen?
> 
> Das auf keinen Fall. Würde auch nichts helfen, dann wäre nur die
> Sackgasse über der B535.

Umgekehrt, die B535 höher. Ich hab sie mal probeweise auf layer:1 
gesetzt, vielleicht wird dann ihr Seitenstrich durchgängig gezeichnet, 
so wie er soll.

Das Problem ist wohl, dass der Renderer die Seitenstriche anhand ihrer 
Position im Renderergebnis weglässt, nicht anhand der Position der 
originalen ways.

cu
Henry

PS:

EBENFALLS BLÖD:
#|g|
-|g|-+##
w|g|w|##
-|g|-+##
#|g|
Diesen Fall (bei zoom <= 15) hab ich mit ner Sackgasse, die im spitzen 
Winkel (real) 30cm vor dem Leimbach endet (modelliert als 4m vor der 
Bachmitte), grademal 500m weiter nördlich. Hier hab ich übrigens schon 
per layer die Straße unter den Bach gesetzt.


___
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-de


Re: [Talk-de] osmarender: Unechte Kreuzungen

2008-05-03 Thread Jochen Topf
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:

Zuerst zeichnet der Renderer eine schwarze dicke Linie entlang der
Strasse und darüber dann eine etwas dünnere farbige Linie. Der Effekt
ist dann eine farbige Linien mit einem schwarzen Rand auf beiden Seiten.
Genauer: Der Renderer zeichnet zuerst alle schwarzen Linien und dann
alle farbigen drüber. Nur dann klappt es nämlich an den Kreuzungen
richtig. Daraus ergeben sich in der Regel ganz gut aussehende Karten,
aber es gibt jede Menge Fälle, in denen es nicht ganz so rauskommt, wie
man gerne möchte.

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. :-)

Jochen
-- 
Jochen Topf  [EMAIL PROTECTED]  http://www.remote.org/jochen/  +49-721-388298


___
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-de


Re: [Talk-de] osmarender: Unechte Kreuzungen

2008-05-03 Thread Henry Loenwind
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...

___
Talk-de mailing list
Talk-de@openstreetmap.org
http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-de