Koordinaten von Quadrat x Meilen vom Mittelpunkt berechnen?


11

Ich versuche, ein Axt-Meilen-Quadrat (oder einen Kreis) um einen zentralen Punkt zu erstellen, an dem alle Seiten des Quadrats x Meilen vom Zentrum entfernt sind. Ich brauche die 4 Eckkoordinaten.

Es verwirrt mein Gehirn und versucht, meinen Kopf darum zu bekommen? Ich kann den Abstand zwischen zwei Punkten mithilfe der Haversine-Formel berechnen, aber Mathematik ist nicht meine Stärke und ich verstehe Sünde, Cos usw. nicht. Der Versuch, dies zu klären, hat mich verloren!

Ich bin auf Berechnung von Breite / Länge X Meilen vom Punkt gestoßen? aber ich verstehe es einfach nicht!

Wäre jemand so freundlich zu erklären, wie ich das mit Äpfeln und Birnen mache?

Um genau zu erklären, was ich versuche zu tun;

Ich habe eine Website, auf der Benutzer nach Gebäuden in einem bestimmten Bereich suchen können. Sie betreten eine Stadt oder einen Ort (dessen Länge ich kenne) und suchen in einem bestimmten Radius von etwa 10 Meilen um den Ort.

Ich muss die minimalen / maximalen Lat- und Long-Werte des Radius von 10 Meilen ermitteln, damit ich meine Datenbank mit einer where-Klausel abfragen kann, die der folgenden ähnelt:

Where buildingLat <= maxLat 
  and buildingLat <= minLat 
  and buildingLong >= minLong 
   or buildingLong >= maxLong

Ich brauche eine Formel!

Meine Koordinaten sind in Dezimalgraden

Antworten:


10

Zu diesem Zweck sind einfache Annäherungen mehr als gut genug. Nord oder Süd, ein Grad ist ungefähr 69 Meilen, aber Ost oder West sind es nur 69 * cos (Breitengrad) Meilen. Da sich die Breiten über einen Zeitraum von zehn Meilen nicht wesentlich ändern, können Sie den Kosinus des zentralen Breitengrads des "Quadrats" sicher verwenden. Daher werden die gewünschten Koordinaten für quadratische Eckpunkte in einer Entfernung von r Meilen von einem zentralen Ort (f, l), angegeben als lat-lon, berechnet als

df = r/69        // North-south distance in degrees
dl = df / cos(f) // East-west distance in degrees
{(f-df,l-dl), (f+df,l-dl), (f+df,l+dl), (f-df,l+dl)} // List of vertices

Angenommen, r = 10 Meilen und der zentrale Ort liegt bei 50 Grad nördlicher Breite und 1 Grad westlicher Länge, so dass (f, l) = (50, -1) Grad. Dann

df = 10/69 = 0.145
dl = 0.145 / cos(50 degrees) = 0.145 / 0.6428 = 0.225
f - df = 50 - 0.145 = 49.855 (southernmost latitude)
f + df = 50 + 0.145 = 50.145 (northernmost latitude)
l - dl = -1 - 0.225 = -1.225 (western longitude)
l + dl = -1 + 0.225 = -0.775 (eastern longitude)

und die Koordinaten sind (49,855, -1,225), (50,145, -1,225), (50,145, -0,775) und (49,855, -0,775), wenn Sie im Uhrzeigersinn um den Platz marschieren, beginnend an seiner südwestlichen Ecke.

Verwenden Sie diese Annäherung nicht in der Nähe der Pole oder für Quadrate, die auf einer Seite größer als ein paar Grad sind. Abhängig von den Einschränkungen des GIS kann auch eine gewisse Sorgfalt in Bezug auf den globalen Längengradschnitt erforderlich sein, der normalerweise bei + -180 Grad erfolgt.


4

Nehmen Sie die X-Koordinate des Zentrums und subtrahieren Sie x Meilen davon. Dies ist die linke Seite Ihres Quadrats. Nehmen Sie dann die Y-Koordinate des Zentrums und subtrahieren Sie X Meilen davon. Dies ist der untere Rand Ihres Quadrats. Wiederholen Sie diese Schritte, aber addieren statt subtrahieren, um die rechte Hand und die oberen Kanten zu erhalten. Sie können jetzt die vier Ecken Ihres Quadrats konstruieren.

Beachten Sie, dass oben davon ausgegangen wird, dass Ihr Mittelpunkt in Meilen liegt. Wenn es nicht zuerst ist, projizieren Sie es neu. Andernfalls sind alle Wetten ungültig und Ihr Quadrat wird nicht quadratisch sein.


Beziehen Sie sich auf die Beispielseite? Wie subtrahiere ich Meilen von einer Koordinate und muss ich die Erdkrümmung nicht berücksichtigen?
Bex

Nein, es ist so einfach, dass es kein wirkliches Beispiel gibt. Möglicherweise müssen Sie angeben, welche Software Sie verwenden? Wie gesagt, meine Lösung geht davon aus, dass Sie Ihre Koordinate auf einen lokalen SRS projiziert haben (wenn Sie dies nicht getan haben, sollte dies Ihre erste Frage sein)
Ian Turton

Ich bin jetzt wirklich verwirrt! Ich habe meine Frage aktualisiert, um genau zu sagen, was ich versuche zu tun. Ich muss eine Art Begrenzungsrahmen erstellen, damit ich die minimalen und maximalen Lat und Long finden kann.
Bex

3
proj4js ( proj4js.org ) sollte dann helfen
Ian Turton

1
Meine Koordinaten sehen so aus: 51.498485, -0.129089 das sind Grad, nicht wahr?
Bex

4

Schließlich lautet meine Antwort: (in c #)

Ich brauche die 4 Koordinaten wahrscheinlich nicht, aber ich denke, sie sind ziemlich genau.

 public static void GetBoundingCoords(double centerLat, double centerLong,  double distance)
    {
     Coordinate top=   MaxLatLongOnBearing(centerLat, centerLong,45,10);
     Coordinate right = MaxLatLongOnBearing(centerLat, centerLong, 135, 10);
     Coordinate bottom = MaxLatLongOnBearing(centerLat, centerLong, 225, 10);
     Coordinate left = MaxLatLongOnBearing(centerLat, centerLong, 315, 10);
    }

    public static Coordinate MaxLatLongOnBearing(double centerLat, double centerLong, double bearing, double distance)
    {

        var lonRads = ToRadian(centerLong);
        var latRads = ToRadian(centerLat);
        var bearingRads = ToRadian(bearing);
        var maxLatRads = Math.Asin(Math.Sin(latRads) * Math.Cos(distance / 6371) + Math.Cos(latRads) * Math.Sin(distance / 6371) * Math.Cos(bearingRads));
        var maxLonRads = lonRads + Math.Atan2((Math.Sin(bearingRads) * Math.Sin(distance / 6371) * Math.Cos(latRads)), (Math.Cos(distance / 6371) - Math.Sin(latRads) * Math.Sin(maxLatRads)));

        var maxLat = RadiansToDegrees(maxLatRads);
        var maxLong = RadiansToDegrees(maxLonRads);

        return new Coordinate(){Latitude=maxLat, Longitude=maxLong};
    }

BEARBEITEN

Nachdem ich gerade festgestellt habe, dass die Ecken meines Quadrats x Meilen vom Mittelpunkt entfernt sind, sind die Kanten meines Quadrats nicht mehr die gleichen x Meilen. (Mathe war nicht meine Stärke) Um den Abstand der Eckpunkte vom Mittelpunkt zu ermitteln, wenn ich möchte, dass meine Quadratkanten x Meilen betragen, habe ich den Satz von Pythagoras verwendet, um den Abstand der Diagonale zu berechnen. (Bei einem rechtwinkligen Dreieck entspricht das Quadrat auf der Hypotenuse (die Diagonale) dem Quadrat der beiden anderen Seiten.)


das wird kein Quadrat sein.
Ian Turton

Ich habe meine Lager geändert, es war ein Diamant. Es ist jetzt quadratisch
Bex

In Bezug auf die Bearbeitung ist der Satz von Pythagoras für kleine Quadrate in Ordnung, gilt jedoch im Allgemeinen nicht für sphärische rechtwinklige Dreiecke. Es ist daher seltsam, dass Ihr Code zusammen mit dieser auf der Ebenengeometrie basierenden Näherung sphärische Trigonometrie verwendet.
whuber

Meine Entfernung wird niemals mehr als 100 Meilen betragen, daher denke ich nicht, dass es wichtig ist. Da die Ungenauigkeiten mit diesem kleineren Abstand gering sind.
Bex

1
Ich denke, der Punkt, den @whuber macht, ist, dass die Verwendung einer komplexen Berechnung der Entfernung entlang Lat und Long keinen Vorteil hat, da Sie diese dann mit dem pythagoreischen Theorem kombinieren. Sie könnten stattdessen eine viel einfachere Berechnung verwenden, wie es Whuber oder Ewan Todd getan hat. Verwenden Sie einfache lineare Formeln, um Längengrad in Meilen und Breitengrad in Meilen umzuwandeln oder umgekehrt. Der einzige "knifflige" Teil besteht darin, zu wissen, dass die Längengradformel angepasst werden muss, * cos(lat)wenn Grad in Meilen / cos(lat)konvertiert wird und wenn Meilen in Grad konvertiert werden.
ToolmakerSteve

0

Wenn Sie eine räumlich bewusste Datenbank verwenden, können Sie Ihren Interessenbereich in dasselbe Koordinatensystem konvertieren, in dem Ihre Daten gespeichert sind, und dann einen Vergleich von Äpfeln zu Äpfeln durchführen.

Beispielsweise:

  1. Der Benutzer wählt einen Ort aus, was zu lat / lon führt.
  2. Bitten Sie die räumliche Datenbank, diesen Punkt in ein projiziertes Koordinatensystem umzuwandeln, das dem Gebiet entspricht (Einheiten von Fuß oder Metern usw.).
  3. Bauen Sie Ihren Interessenbereich um den projizierten Punkt herum auf.
  4. Bitten Sie die räumliche Datenbank, diesen Interessensbereich wieder in lat / lon zu konvertieren.
  5. Machen Sie alle Vergleiche, die Sie machen müssen.

0

Ich habe verwendet, was auf dieser Seite steht

Zielpunkt bei gegebener Entfernung und Peilung vom Startpunkt

Formel:
lat2 = asin (sin (lat1) * cos (d / R) + cos (lat1) * sin (d / R) * cos (θ))
lon2 = lon1 + atan2 (sin (θ) * sin (d / R) * cos (lat1), cos (d / R) - sin (lat1) * sin (lat2))

θ ist die Peilung (im Bogenmaß von Norden im Uhrzeigersinn); d / R ist die Winkelentfernung (im Bogenmaß), wobei d die zurückgelegte Entfernung und R der Erdradius ist

Für θ habe ich -45 Grad (im Bogenmaß) für den "oberen linken Punkt" und 135 Grad für den "unteren rechten" Punkt verwendet

(Ich habe kürzlich die gleiche Frage auf der Mathe-Website gestellt. )


Das Problem bei dieser Lösung ist, dass Sie zuerst den Abstand für die Diagonalen des Quadrats ermitteln müssen. Es ist einfacher, sich entlang der Geodäten von der Mitte zu den Mittelpunkten der Seiten zu bewegen und sich dann um 90 Grad entlang der Seiten des Quadrats zu bewegen.
whuber

@whuber, Wenn der Abstand klein genug ist, kannst du keine einfache Trigonometrie dafür verwenden? (d = Gegenseite / Sünde (benachbarte Seite). Ich mache das, weil ich diesen Abstand nicht brauche, um genau zu sein. Andernfalls könnten Sie diese Formel zweimal anwenden, um genau das zu tun, was Sie sagen (zuerst mit θ = 0, dann mit θ = -90 für oben links zum Beispiel)
Juan

Das ist richtig, Juan. Man fragt sich jedoch, warum Sie die komplizierteren Formeln der sphärischen Geometrie verwenden, wenn Sie mit einer Näherung beginnen, die davon ausgeht, dass euklidische Formeln überhaupt funktionieren. Es ist nichts Falsches daran, die sphärischen Formeln zu verwenden, aber es ist unnötig und rechnerisch ineffizient.
whuber

@whuber, für den zweiten Fall ist es nicht ungefähr (die Formel zweimal für jede Seite anwenden). Sie haben Recht, dass es keinen Sinn macht, sie zu mischen. Ich habe dies tatsächlich implementiert, aber ich werde es ändern (oh, und der Grund ist, dass ich nicht so gut in Mathe bin :))
Juan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.