Вычислить расстояние между двумя координатами широты и долготы в SQL Server.
Создайте функцию SQL, которая вычисляет расстояние между координатами широты и долготы в милях или километрах.
Контекст
Вычислить расстояние между двумя местами может быть довольно сложно, есть несколько хороших статей, однако эта страница войдет только в код.
Для получения дополнительной информации о том, как рассчитываются расстояния на сфере, посмотрите Формулу Хаверсина в Википедии , это немного сложно, поэтому мы не хотим дублировать контент.
Мы нашли часть этого кода в Интернете и адаптировали его к функции SQL с возможностью запрашивать мили или километры.
Он рассчитывается только «по прямой», однако он был протестирован как часть приложения, которое мы создали для iPhone, и расстояния были точными.
SQL Server
CREATE FUNCTION CoordinateDistanceMiles(@Latitude1 float,@Longitude1 float,@Latitude2 float,@Longitude2 float,@Distance NVARCHAR(10))RETURNS FLOATAS BEGIN-- CONSTANTSDECLARE @EarthRadiusInMiles FLOAT=(CASE @Distance WHEN 'Miles' THEN 3959 WHEN 'Kilometers' THEN 6371 ELSE 0 END);DECLARE @PI FLOAT=PI();DECLARE @lat1Radians FLOAT=@Latitude1 * @PI / 180DECLARE @long1Radians FLOAT=@Longitude1 * @PI / 180;DECLARE @lat2Radians FLOAT=@Latitude2 * @PI / 180;DECLARE @long2Radians FLOAT=@Longitude2 * @PI / 180;RETURN Acos(Cos(@lat1Radians)*Cos(@long1Radians)*Cos(@lat2Radians)*Cos(@long2Radians)+Cos(@lat1Radians)*Sin(@long1Radians)*Cos(@lat2Radians)*Sin(@long2Radians)+Sin(@lat1Radians)*Sin(@lat2Radians)) * @EarthRadiusInMiles;END