Die Winkel lassen mir doch keine Ruhe…
Der Stil erkennt Fussballfelder unter anderem daran, dass der Winkel zwischen der ersten und der zweiten Linie ca. 90° beträgt. Dazu rechnet er mit st_azimuth die Winkel (a12 und a23) der beiden Linien gegen die Senkrechte aus, bildet die Differenz und nimmt dann den Betrag.
Bei einem Polygon aus (-2 -3) (-3 -2) (-2 -1) (-1 -2) geht das schief…
Die Winkel:
osm=> select degrees(st_azimuth(st_pointn(way2,1),st_pointn(way2,2))) as a12 , degrees(st_azimuth(st_pointn(way2,2),st_pointn(way2,3))) as a23
from (select ST_ExteriorRing('POLYGON((-2 -3,-3 -2,-2 -1,-1 -2,-2 -3))') as way2) as foo1;
a12 | a23
-----+-----
315 | 45
Der Betrag (die Codestücke hier sind so ziemlich das gleiche wie im deutschen Stil)
osm=> select abs(a12-a23) as angle_diff,(a12+a23+90)/2 as angle
from (select degrees(st_azimuth(st_pointn(way2,1),st_pointn(way2,2))) as a12 , degrees(st_azimuth(st_pointn(way2,2),st_pointn(way2,3))) as a23
from (select ST_ExteriorRing('POLYGON((-2 -3,-3 -2,-2 -1,-1 -2,-2 -3))') as way2) as foo1) as foo2;
angle_diff | angle
------------+-------
270 | 225
Als Bild:
Allerdings ist dieser Fehler überall drin, wenn man irgendwo anfängt, wo die beiden Linien links und rechts der Senkrechten liegen, auch auf der Nordhalbkugel. Gibt es irgendeinen Grund, warum die Linien in Südamerika häufiger so liegen als in Europa? Z.B. weil ST_ExteriorRing() immer näher bei der Nulllinie anfängt, oder weil osm2pgsql Flächen so importiert? Falls das nicht so ist, ist zwar ein potentieller Fehler, aber keine Erklärung gefunden
Grüße, Max