sql >> Database >  >> RDS >> Sqlserver

Afstand tussen twee punten berekenen (breedtegraad, lengtegraad)

Aangezien je SQL Server 2008 gebruikt, heb je de geography gegevenstype beschikbaar, dat is ontworpen voor precies dit soort gegevens:

DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'

SELECT @source.STDistance(@target)

Geeft

----------------------
538404.100197555

(1 row(s) affected)

Om ons te vertellen dat het ongeveer 538 km is van (nabij) Londen naar (nabij) Edinburgh.

Natuurlijk zal er eerst wat moeten worden geleerd, maar als je het eenmaal weet, is het veel gemakkelijker dan je eigen Haversine-berekening te implementeren; plus je krijgt VEEL functionaliteit.

Als u uw bestaande gegevensstructuur wilt behouden, kunt u nog steeds STDistance . gebruiken , door geschikte geography . te construeren instanties met behulp van de Point methode:

DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=53.381538 set @orig_lng=-1.463526

DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);

SELECT *,
    @orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326)) 
       AS distance
--INTO #includeDistances
FROM #orig dest


  1. Overstappen van MySQL 5.7 naar MySQL 8.0 - Wat u moet weten

  2. Problemen oplossen Illegale mix van sorteringen fout in mysql

  3. Hoe verschillend is PostgreSQL van MySQL?

  4. VBA-code om gekoppelde tabel met primaire sleutel toe te voegen