利用SQL计算两个地理坐标(经纬度)之间的地表距离

两个地理坐标(经纬度)地表距离计算公式:

公式解释如下:

  1. Long1,Lat1表示A点经纬度,Long2,Lat2表示B点经纬度;
  2. a=Lat1–Lat2 为两点纬度之差,b=Long1-Long2为两点经度之差;
  3. 6378.137为地球半径,单位为千米;
  4. 计算出来的结果单位为千米,若将半径改为米为单位则计算的结果单位为米;
  5. 计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。

引用自https://segmentfault.com/a/1190000013922206

SQL语句实现如下:

-- A点坐标(#{longitude},#{latitude}),B点坐标(longitude,latitude),若有一个坐标值为空则距离默认为100万公里(一个不合理的值)
SELECT
    IF((ISNULL(#{latitude}) || LENGTH(trim(#{latitude})) < 1 || ISNULL(latitude) || LENGTH(trim(latitude)) < 1), 1000000,
        ROUND(
            6378.137 * 2
            * ASIN(
                SQRT(
                    POW(SIN((#{latitude} * PI() / 180 - latitude * PI() / 180) / 2), 2)
                    + COS(#{latitude} * PI() / 180)
                        * COS(latitude * PI() / 180)
                        * POW(SIN((#{longitude} * PI() / 180 - longitude * PI() / 180) / 2),2)
                )
            ),
        2)
    ) AS distance,
    name,
    photo_url photoUrl,
    address,
    telephone,
    latitude latitude,
    longitude longitude
FROM
    store
WHERE
    void_flag = 1
ORDER BY
    distance,code ASC

:)

原文地址:https://www.cnblogs.com/gotodsp/p/11057938.html

时间: 2024-10-02 07:43:52

利用SQL计算两个地理坐标(经纬度)之间的地表距离的相关文章

根据两点的经纬度坐标计算两个坐标点之间的直线距离

贴代码如下: package com.qcsd.xulin.util; import java.awt.*; /** * @author xulin * @date create in 9:06 2018/11/1 * Description 根据提供的两个国标经纬度,计算两个点之间的距离 */ public class DistanceConsider { // 地球半径 private static double EARTH_RADIUS = 6378.137; private static

java通过经纬度计算两个点的之间的距离的算法

通过两个点的经纬度计算距离 从google maps的脚本里扒了段代码,没准啥时会用上.大家一块看看是怎么算的.private const double EARTH_RADIUS = 6378.137;private static double rad(double d){   return d * Math.PI / 180.0;} public static double GetDistance(double lat1, double lng1, double lat2, double ln

sql 计算两经纬度间的距离

DECLARE @g geography;SET @g = geography::STPointFromText('POINT(113.216273 23.236333)', 4326);SELECT @g.ToString();DECLARE @gg geography;SET @gg = geography::STPointFromText('POINT(115.567368 37.341209)', 4326);SELECT @gg.ToString(); SELECT @g.STDist

sql 计算两时间或日期 的相差的 年、 月、 日、时、分、秒,年、月、日分别的提取

--年.月.日.时.分.秒 datediff(yy,date1,date2) datediff(m,date1,date2) datediff(d,date1,date2) datediff(hh,date1,date2) datediff(n,date1,date2) datediff(s,date1,date2) datediff(ms,date1,date2) --YEAR('2008-11-2 00:00:00')  --年--MONTH('2008-11-2 00:00:00')  -

计算两个坐标点之间的点的坐标

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>计算两个坐标点之间的点的坐标</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> &l

比较字符串总结:如果计算两个字符串的相似度或者距离

有关字符串相关比较问题,一般处理方法都选择动态规划处理方法.或者是单个循环,或者是多个循环:dp 遇到这种两个串的问题,很容易想到DP.但是这道题的递推关系不明显.可以先尝试做一个二维的表int[][] dp,用来记录匹配子序列的个数(以S="rabbbit",T = "rabbit"为例): r a b b b i t 1 1 1 1 1 1 1 1 r 0 1 1 1 1 1 1 1 a 0 0 1 1 1 1 1 1 b 0 0 0 1 2 3 3 3 b 0

让上下两个DIV块之间有一定距离或没有距离

1.若想上下DIV块之间距离,只需设定:在CSS里设置DIV标签各属性参数为0div{margin:0;border:0;padding:0;}这里就设置了DIV标签CSS属性相当于初始化了DIV标签CSS属性,这里设置margin外边距为0:边框border属性为0和内补白也为0:这样相当于就初始化了DIV之间距各属性距离为0,这样就不会造成DIV直接有一定的距离. 2.如果想上下两个DIV间有距离的话,只需设定div中的margin属性即可,本例中div属性对全局DIV块都适用,代码如下:

计算两个GPS经纬度坐标之间的距离 PHP

不多说了,自己代码就行,你可以直接拿来用. /** * 计算两个坐标之间的距离(米) * @param float $fP1Lat 起点(纬度) * @param float $fP1Lon 起点(经度) * @param float $fP2Lat 终点(纬度) * @param float $fP2Lon 终点(经度) * @return int */ function distanceBetween($fP1Lat, $fP1Lon, $fP2Lat, $fP2Lon){ $fEARTH_

计算两个经纬地之间的距离

/** * 计算两个经纬度之间的距离 (lon1,lat1),(lon2,lat2) * @param lan1 * @param lat1 * @param lan2 * @param lat2 * @return */ public static double GetDistance(double lng1, double lat1, double lng2, double lat2) { double EARTH_RADIUS = 6371.393; double radLat1 = (l