CREATE FUNCTION dbo.DistanceKMFromLatLong
(
@srcLatitude decimal(9,6),
@srcLongitude decimal(9,6),
@destLatitude decimal(9,6),
@destLongitude decimal(9,6)
)
RETURNS TABLE
AS
RETURN
(
SELECT DistanceKM = ACOS(SIN(PI()*@srcLatitude/180.0)*SIN(PI()*@destLatitude/180.0)+COS(PI()*@srcLatitude/180.0)*COS(PI()*@destLatitude/180.0)*COS(PI()*@destLongitude/180.0-PI()*@srcLongitude/180.0))*6371
)
GO
Ref: Haversine formula
Вы используете это путь объединения двух таблиц, содержащих источник и назначение лат/долготы следующий:
select
p.Latitude,
p.Longitude,
s.Latitude,
s.Longitude,
DistanceFromStoreKMNew = d.DistanceKM
from
Staging.PostcodesToLatLong p
join dbo.Store s on s.StoreId = p.StoreId
cross apply dbo.DistanceKMFromLatLong(p.Latitude, p.Longitude, s.Latitude, s.Longitude) d
Можно также создать скаляр функцию из формулы гаверсинуса.
Если вы хотите это быстрее, создайте хранимую процедуру CLR.
это не сработает. широта-долгота находятся на сфере, а не на плоскости .... Сделайте поиск ... –
Я сделал поиск, что я нахожу, как эта работа, но медленная. – skynet
@shyam я не стал теперь так благодарить, так что же такое уравнение? – skynet