Punkt auf Kreis (Länge / Breite) in .NET / SQL
-
20-09-2019 - |
Frage
Ich habe folgendes Problem bekommen: Ich habe eine Tabelle mit Long / lat Werte und eine andere Tabelle mit einem Projekt-ID und long / lat / Radius (Kreis).
Jetzt muß ich herausfinden, welches Projekt entspricht die lang / lat Werte aus der ersten Tabelle.
Gibt es eine einfache Möglichkeit, das zu tun?
Lösung
Es gibt mehrere Algorithmen zu berechnen Abstand auf Kugel, aber wir verwenden folgende:
create function GetDistance(
@latitudeFrom decimal(30,10),
@longitudeFrom decimal(30,10),
@latitudeTo decimal(30,10),
@longitudeTo decimal(30,10)
)
RETURNS float
AS
BEGIN
DECLARE @distance float
SET @distance = ROUND(6378.137 * ACOS(
convert(decimal(30,10),
(SIN(RADIANS(@latitudeFrom)) * SIN(RADIANS(@latitudeTo))) +
(COS(RADIANS(@latitudeFrom)) * COS(RADIANS(@latitudeTo)) *
COS(RADIANS(@longitudeTo) - RADIANS(@longitudeFrom))))), 15)
RETURN @distance
END
go
(wo 6378,137 - ist Erdradius)
So, jetzt, wenn Sie Abstand zwischen zwei Punkten auf der Erde berechnen können, können Sie Abfrage erstellen
select *
from Table1, Project
where dbo.GetDistance(
Table1.lat, Table1.lon,
Project.lat, Project.lon) < @YouRadius
Dabei gilt @YouRadius - parametrisierte Radius des Kreises
Andere Tipps
Relativ einfach: Berechnen der Großkreisentfernung zwischen dem Punkt und dem Mittelpunkt des Kreises. Ist der Abstand kleiner ist als der Radius ist, ist der Punkt, in dem Kreis, wenn nicht nicht. Wenn es auf dem Umfang des Kreises ist, entscheiden Sie. Es haben sich auf die Berechnung der Großkreisentfernungen mehrere SO Diskussionen, einen Blick auf sie.
Um die Dinge beschleunigen Sie könnten prüfen, mit der Definition jeden Kreis, sein minimalen Begrenzungsrahmen in lat / long ‚Quadrate‘ Speicher. Dies würde Sie mit den Informationen, die notwendig sind eine schnelle Überprüfung von zu tun, ob ein Punkt ist möglicherweise innerhalb eines Kreises, nur Entfernungen Berechnung, wenn der Punkt innerhalb der mbb.