memoryn von benutzerdefinierten Koordinaten in SQL server

Ich habe eine Tabelle in SQL server-database, die ein 2 Felder X, Y hat. Diese Felder repräsentieren Koordinaten auf einem Feld (American Football Field). 0,0 (X, Y) ist der Ausgangspunkt mit dem größten Wert und am weitesting entfernten Punkt 145,90 (X, Y).

Jede Zeile in der Tabelle ist eine Koordinate aus der Tonhöhe.

Ich möchte in der Lage sein, den Abstand zwischen verschiedenen Koordinaten auf dem Feld zu messen (verschiedene Zeilen in der database) zB. 3,9 bis 15,20 Ich möchte auch den angular zwischen den Koordinaten messen können.

Ich sah die räumlichen Typen usw. in SQL server aber es scheint mir, dass bezieht sich auf Latitude, Longitude.

Gibt es irgendeine Möglichkeit in SQL server, die ich so in SQL mit einer benutzerdefinierten Karte, um zwischen benutzerdefinierten Punkte, angular usw. zu messen?

Sie können den Geometrie-Typ verwenden. https://msdn.microsoft.com/en-us/library/bb895270.aspx

Hier sind einige kurze Beispiele.

Verwenden Sie eine abgeleitete Spalte, um einen Punkt zu erstellen:

CREATE TABLE #Test ( X INT, Y INT, POINT AS GEOMETRY::STGeomFromText('POINT('+CONVERT(VARCHAR(20),X)+' '+CONVERT(VARCHAR(20),Y)+')',0 ) ) INSERT INTO #Test( X, Y) VALUES (3, 9),(15,20) 

Wenn du deine Punkte in SSMS ansehen möchtest, kannst du einen Puffer hinzufügen, der einfacher zu sehen ist:

 SELECT *,POINT.STBuffer(5) Pt FROM #Test 

Entfernung ist einfach (sagen aus dem Ursprung):

 SELECT X, Y, POINT.STDistance(GEOMETRY::STGeomFromText('POINT(0 0)',0)) DistFromOrigin FROM #Test XY DistFromOrigin ----------- ----------- ---------------------- 3 9 9.48683298050514 15 20 25 

Zwischen zwei Punkten ist nur eine Frage der Auswahl der Punkte und tun

 Point1.STDistance(Point2) 

Und für angular, diese function sollte gut funktionieren, wenn in den Geometry Typ geändert

Bestimmung der Kardinal- (Kompass-) Richtung zwischen den Punkten

Erinnerst du dich an den pythagoreischen Theorem aus der Algebra-class? http://betterexplained.com/articles/measure-any-distance-with-the-pythagorean-theorem/ Das ist, was verwendet wird die Maßnahme die "lange" Seite eines Dreiecks, was ist, was Sie hier messen Du brauchst hier nichts Besonderes. Sie wissen, dass der Abstand von (3, 9) bis (15, 50) 12 ist. Dies ist der Abstand von Seite zu Seite oder X. Dann wissen Sie auch, dass das Distanzfeld 41 (50 – 9) ist. Um den Abstand zwischen diesen Punkten zu bestimmen, ist einfach X (2) + y (2) = c (2). Also in diesem Beispiel wäre es 12 (2) + 41 (2) = x (2).

Vereinfacht wird dies 144 + 574 = x (2)

Um zu lösen, nehmen Sie die Quadratwurzel von 718. Dies würde auf 26.795 zu lösen

Wenn du diesen Wert speichern wolltest, kannst du einfach eine berechnete Spalte machen, die das für dich berechnen könnte.

–BEARBEITEN–

Ich erinnere mich nicht an die Formel für die Berechnung der angular der Hypotenuse aus der Oberseite meines Kopfes, aber es sollte einfach sein, im Internet zu finden.

Gerade als Ergänzung zu Sean Langes Antwort über die Distanz ist der angularteil ein wenig mehrdeutig. Wenn p1 am Ursprung war, dann findest du den angular einfach durch das Schreiben von arctan(p2.y/p2.x) . Aber wenn die beiden Punkte nicht verankert sind, kann es ein bisschen zweideutig sein.

Um den angular relativ zur x-Achse zu definieren, soll man arctan(abs(p2.y-p1.y)/abs(p2.x-p1.x)) , wenn p2.x > p1.x und p2.y > p1.y Das ist p2 ist eher rechts als p1 und p2 liegt oberhalb von p1 . Dies ist in Fall 1 unten dargestellt.

Allerdings konnten wir einfach den angular definieren, um das Ergebnis aus dem arctan aus dem vorherigen Absatz PLUS 180 Grad zu sein, wie in Fall 2 unten! So ist der Begriff des angulars nicht so klar, es sei denn, Sie haben eine bestimmte Spalte von Punkten, die Sie als Ihren Anker verwenden möchten.

Bildbeschreibung hier eingeben

Okay, aber nehmen wir an, wir haben eine Anker-Spalte von Punkten, die von p1 beschriftet sind, dann können wir die arctan Formel mit einigen Fandangling verwenden. Wie in den vier Fällen unten, für Fall 1 verwenden wir einfach die arctan Formel von oben. Für Fall 2 müssen wir auf 270 Grad hinzufügen (denken Einheit Kreis). Für Fall 3 fügen wir auf 180 Grad hinzu, und im Fall 4 fügen wir auf 90 Grad hinzu.

Nur um eine andere Möglichkeit zu finden, den angular zu definieren, wenn wir eine Spalte haben, sehen wir uns so wichtig. Bildbeschreibung hier eingeben