Hintergrund

Für die DigiBib soll eine mobile Rechercheanwendung entwickelt werden.

Use Cases

  • Eingabe: Geokoordinateninput vom Mobilgerät (oder in Geokoordinaten überführte Ortsnamen)
  • Ausgabe:
    1. Bibliotheken im Umkreis von 1, 5, 20 km des angegebenen Ortes.

Abstand zweier Punkte auf der Erdoberfläche

Zur Berechnung des Abstandes zweier Punkte auf der Erdoberfläche nähere ich diese als Kugeloberfläche an.

Koordinaten der Punkte

Punkte auf der Erdoberfläche kann man durch deren geografische Länge und geografische Breite beschreiben.

Geografische Länge λ

Die geografische Länge (lat. longitudo, engl. longitude) eines Punktes auf der Erdoberfläche ist dessen Winkelabstand zum Nullmeridian. Der Nullmeridian ist dabei per definitionem der Meridian, der durch Greenwich bei London geht.

Jedem Punkt auf der Erdoberfläche kann ein eindeutiger Längengrad oder Meridian zugeordnet werden (Ausnahmen: der Nordpol und der Südpol). Ein Meridian (dt. Mittagslinie) ist ein vom Südpol zum Nordpol verlaufender Halbkreis auf der Erdoberfläche, dessen Radius (Halbmesser) der Erdradius ist.

Die geografische Länge λ kann Werte zwischen -180° und 180° annehmen. Dabei ist der Winkel im Gradmaß anzugeben, bei dem ein Kreis in 360 abstandsgleiche Strahlen unterteilt wird. Im Winkelmaß Radiant (Bogenmaß) liegt der Wertebereich von λ zwischen -π und π.

Der Nullmeridian hat λ = 0.

positive Werte von λ = östlich v. Greenwich (E)

negative Werte von λ = westl. v. Greenwich (W)

Die geografischen Längen λ = -180° = 180° W   und   λ = 180° = 180° E    bezeichnen denselben Meridian. Dieser verläuft durch den Pazifik in der Nähe der Datumsgrenze.

Geografische Breite φ

Die geografische Breite (lat. latitudo, engl. latitude) eines Punktes auf der Erdoberfläche ist dessen Winkelabstand zum Äquator.

Jedem Punkt auf der Erdoberfläche kann ein Breitenkreis zugeordnet werden. Ein Breitenkreis ist ein parallel zum Äquator liegender Vollkreis auf der Erdoberfläche. Im Unterschied zu den Längengraden haben Breitenkreis kleinere Radien als der Erdradius (Ausnahme: der Äquator). Die Radien der Breitenkreise nehmen vom Äquator (Erdradius) zu den Polen hin ab. An den beiden Polen wird der "Breitenkreis" zu einem Punkt.

Die geografische Breite φ nimmt Werte zwischen -90° und 90° an, wenn man den Winkel im Gradmaß (360° = 1 mal ganz herum) angibt. Im Winkelmaß Radiant (Bogenmaß) liegt der Wertebereich von φ zwischen -π/2 und π/2.

Auf dem Äquator ist φ = 0.

positive Werte von φ = nördlich des Äquators (N)

negative Werte von φ = südlich des Äquators (S)

Am Nordpol ist φ = 90° = 90° N

Am Südpol ist φ = -90° = 90° S

Angabe von Winkeln

Die Werte von geografischer Länge und geografischer Breite sind Winkel. Diese kann man in verschiedenen Schreibweisen angeben. Gebräuchlich sind die sexagesimale Schreibweise und die dezimale Schreibweise.

Sexagesimale Schreibweise

In sexagesimaler Schreibweise betragen z.B. die Koordinaten eines Punktes in der Innenstadt von Köln:

λ = 6° 57' 32''   und   φ = 50° 56' 33'' .

Dabei bedeuten das Apostroph "Minuten" und das doppelte Apostroph "Sekunden". Die Angabe für die Länge spricht sich also aus "6 Grad, 57 Minuten und 32 Sekunden". Dabei sind natürlich Bogenminuten und Bogensekunden gemeint und nicht etwa Zeiteinheiten. Die Angaben in der sexagesimalen Schreibweise sind additiv zu verstehen, also Winkel = Grad plus Minuten plus Sekunden.

Eine Bogenminute ist der sechzigste Teil eines Grades.

Eine Bogensekunde ist der sechzigste Teil einer Bogenminute.

Dezimale Schreibweise

In dezimaler Schreibweise lauten die Koordinaten des o.g. Punktes in Köln:

λ = 6,9588888°  und  φ = 50,9425000°

Im englischsprachigen Raum wird ein Punkt anstelle eines Kommas als Dezimaltrenner verwendet, also λ=6.9588888 und φ=50.9425000.

Anzahl der Nachkommastellen

Bei einem Kreis vom Erdradius beträgt der zehnmillionste Teil eines Winkelgrades 1,1 cm. Es ist daher nicht sinnvoll, bei den Gradangaben mehr als 7 Stellen hinter dem Komma anzugeben. Eine Bogensekunde beträgt bei einem Großkreis 30,89 m.
Zur Ortung von Bibliotheken ist es ausreichend, 4 Stellen hinter dem Komma anzugeben. Dann beträgt die Ortsgenauigkeit 11 m.

Umrechnung auf dezimale Schreibweise

Die Angaben in sexagesimaler Schreiwbweise kann man wie folgt in dezimale Angaben umrechnen:

Grad (dezimal) = Grad (sexagesimal) + ( Minuten / 60 ) + ( Sekunden / 3600 ).

Abstand zweier Punkte

Der Abstand zweier Punkte auf der Erdoberfläche beträgt

(1)  d = R · arccos( sin( φ 1 )·sin( φ 2 ) + cos( φ 1 )·cos( φ 2 )·cos( λ 1 - λ 2 ) ).

Dabei ist

R  = der mittlere Erdradius, R = 6371 km.

arccos = die inverse Winkelfunktion Arkuskosinus. Diese bildet vom Intervall [-1,1] auf das Intervall [0,π] ab.

sin = die Sinusfunktion

cos = die Kosinusfunktion

φ 1 = die geografische Breite des ersten Punktes

λ 1 = die geografische Länge des ersten Punktes

φ 2 = die geografische Breite des zweiten Punktes

λ 2 = die geografische Länge des zweiten Punktes

Näherungsformel

Innerhalb eines Gebietes, in dem alle Entfernungen klein sind gegenüber dem Erdradius (z.B. Deutschland), erscheint es sinnvoll, die Winkelfunktionen in der Formel (1) um einen Referenzpunkt herum zu entwickeln. Dies verringert die Anzahl der erforderlichen Grundrechenoperationen und somit die Antwortzeiten für eine Umkreissuche.

Dazu schreibe ich die Geokoordinaten der Orte in der folgenden Form :

φ 1 = φ 0 + Δ φ 1
φ 2 = φ 0 + Δ φ 2
λ 1 = λ 0 + Δ λ 1
λ 2 = λ 0 + Δ λ 2,

wodurch die Größen Δ φ 1 , Δ φ 2 , Δ λ 1  und Δ λ 2  als Abweichungen der Ortskoordinaten zu einem Referenzpunkt definiert werden. Dieser Referenzpunkt habe die geografische Länge und Breite

φ 0 , λ 0 .

Für Deutschland nimmt man sinnvollerweise einen Punkt in der Mitte des Landes, um die Abweichungen möglichst gering zu halten.
Durch die Mitte Deutschland geht in etwa der 51. Längengrad. Eine gute Wahl ist daher:

φ 0 = 51° N = 0,890118 rad.
Das ist übrgens nur etwas nördlich von der Kölner Innenstadt.

Damit ergibt sich
cos( φ 0 ) = 0,629320
sin( φ 0 ) = 0,777146 .

Das Quadrat des Abstands zweier Orte bezogen auf das Quadrat des Erdradius beträgt - innerhalb des kleinen Gebietes - in guter Näherung

(2)    d 2 / R 2  =  ( φ 1 - φ 2 ) 2  +  ( λ 1 - λ 2 ) 2 · cos( φ 0 ) · [ cos( φ 0 ) - sin( φ 0 ) · ( Δ φ 1 + Δ φ 2 ) ].

Dabei habe ich auf der rechte Seite des Gleichheitszeichens Terme der Größenordnung Δ 4 φ vernachlässigt, wobei φ ein beliebiger der (kleinen) Winkel Δ φ 1 , Δ φ 2  oder  λ 1 - λ 2  sein kann. Der relative Fehler der Formel (2) ist von der Größenordnung Δ 2 φ , da die berechneten Größen selber von der Größenordnung Δ 2 φ sind.

Die Winkelangaben in der Formel (2) sind im Bogenmaß (Radiant) zu nehmen !

Innerhalb Deutschlands beträgt die maximale Winkelentfernung 9° in der Länge (Aachen - Görlitz) (die Nord-Süd-Ausdehnung beträgt ca. 7,75 Breitengrade) , d.h. es gilt für alle Entfernungen
| λ 1 - λ 2 | < 9°  und damit  Δ φ < 9° .
Drückt man Δ φ im Bogenmaß aus so findet man, dass der Fehler in der Formel (2) maximal von der Größenordnung ( π / 20 ) 2 sein sollte, das sind ca. 3%. Beispielrechnungen von mir zeigen, dass er noch wesentlich kleiner ist ( < 0,1 %).

Beispielrechnungen

Köln - Frankfurt am Main

P 1 = Köln

φ 1 = 50° 56' N = 0,888954 rad
λ 1 = 6° 57' E = 0,121300 rad

P 2 = Frankfurt am Main

φ 2 = 50° 07' N = 0,874701 rad
λ 2 = 8° 41' E = 0,151553 rad

=> φ 1 - φ 2 = 0,014253
    λ 1 - λ 2 = -0,030253
   Δ φ 1 = -0,001164
   Δ φ 2 = -0,015417
   => Δ φ 1 + Δ φ 2 = -0,016581

(2)  => d 2 / R 2 ≈ 0,000573057
           d / R  0,0239384

Die exakte Rechnung ergibt:
(1)  => cos( d / R ) = 0,999713
           d / R = 0,0239589     ( 152 km (Haken) )

Die Abweichung der Näherungsrechnung zur exakten Rechnung ist kleiner als 0,1%.

Greifswald - Konstanz

zwei Orte mit sehr großem Nord-Süd und Ost-West Abstand.

P 1 = Greifswald

φ 1 = 54° 06' N = 0,944223 rad
λ 1 = 13° 23' E = 0,233583 rad

P 2 = Konstanz

φ 2 = 47° 40' N = 0,831940 rad
λ 2 = 9° 11' E = 0,160279 rad

=> φ 1 - φ 2 = 0,112283
    λ 1 - λ 2 = 0,073304
   Δ φ 1 = 0,054105
   Δ φ 2 = -0,058178
   => Δ φ 1 + Δ φ 2 = -0,004073

(2)  => d 2 / R 2 ≈ 0,0147463
           d / R  0,121434

Die exakte Rechnung ergibt:
(1)  => cos( d / R ) = 0,992642
           d / R = 0,121380     ( 773 km (Haken) )

Die Abweichung der Näherungsrechnung zur exakten Rechnung beträgt 0,044 %.

Norden - Altwarp

Ich zeige, dass der Term Δ φ 1 + Δ φ 2 in (2) nicht generell vernachlässigt werden kann. Die größten Auswirkungen hat er bei zwei Orten, die in der Länge maximal unterschiedlich sind und in der Breite fast gleich, und die dabei möglichst weit vom Referenzpunkt entfernt liegen.

P 1 = Norden

φ 1 = 53° 36' N = 0,935496 rad
λ 1 = 7° 12' E = 0,125664 rad

P 2 = Altwarp

φ 2 = 53° 45' N = 0,938114 rad
λ 2 = 14° 16' E = 0,249000 rad

=> φ 1 - φ 2 = -0,002618
    λ 1 - λ 2 = -0,123336
   Δ φ 1 = 0,045378
   Δ φ 2 = 0,047996
   => Δ φ 1 + Δ φ 2 = 0,093374

(2)  => d 2 / R 2 ≈ 0,00533671
           d / R  0,0730528

ohne den Term  Δ φ 1 + Δ φ 2 in (2) erhalte ich:

           d 2 / R 2 ≈ 0,00603138
           d / R  0,0776620        => 6,3% Fehler !

Die exakte Rechnung ergibt:

(1)  => cos( d / R ) = 0,997331
           d / R = 0,073077     ( 466 km (Haken) )

Die Abweichung der Näherungsrechnung zur exakten Rechnung beträgt 0,033%, wenn man den Term Δ φ 1 + Δ φ 2 in (2) berücksichtigt.

Aachen - Görlitz

Ein Beispiel mit maximaler Differenz in der Länge

P 1 = Aachen

φ 1 = 50° 47' N = 0,886336 rad
λ 1 = 6° 05' E = 0,106174 rad

P 2 = Görlitz

φ 2 = 51° 09' N = 0,892736 rad
λ 2 = 14° 59' E = 0,261508 rad

=> φ 1 - φ 2 = -0,006400
    λ 1 - λ 2 = -0,155334
   Δ φ 1 = -0,003782
   Δ φ 2 = 0,002618
   => Δ φ 1 + Δ φ 2 = -0,001164

(2)  => d 2 / R 2 ≈ 0,00961070
           d / R  0,0980342

Die exakte Rechnung ergibt:
(1)  => cos( d / R ) = 0,995204
           d / R = 0,097974    ( 624 km (Haken) )

Die Abweichung der Näherungsformel (2) für d / R  beträgt für dieses Beispiel 0,00006, das sind weniger als 0,1% .

  • Keine Stichwörter

2 Kommentare

  1. Pascal Christoph sagt:

    Warum ist das unter SemanticWeb? Die Daten liegen doch auch in Elasticsearch
    (ES), und wir haben Geokoordinaten gespeichert für jede einzelne Ressource.
    Elasticsearch kommt mit einer sehr elaborierten Geosuche daher - da muss
    das Rad nicht nochmal neu erfunden werden. ES kann sogar "polygon based
    search". Es fehlt nur noch die Implementaion der Suche in der CQL-Schnittstelle.
    Zur Erklärung der Geosuche.
    Wenn nicht CQL eingesetzt werden soll kann auch auf das native ES-DSL ausgewichen werden.

    1. Ingolf Kuss sagt:

      Hallo Pascal!

      es geht bei der Aufgabenstellung nicht um eine Suche mit Elasticsearch sondern um Suchen in den lokalen OPACs, wie bei einer digibib-Suche. Um zu wissen, in welchen OPACS man suchen soll, müssen vorher die Bibliotheken in der Nähe identifiziert werden. Deren Geokoordinaten stehen unter lobid.org/organisationen.