微信lbs---返回两个经纬度坐标点的距离

简介: 微信开发:lbs附近的商家,在数据库里记录商家的坐标,lbs设置里管理搜索半径,查询的时候,查询 客户当前坐标的半径内的所有商家列表。个人喜欢不一样,我选择了执行sql ,毕竟效果高点。微信开发必须得将就效率问题。

微信开发:lbs附近的商家,在数据库里记录商家的坐标,lbs设置里管理搜索半径,查询的时候,查询 客户当前坐标的半径内的所有商家列表。
个人喜欢不一样,我选择了执行sql ,毕竟效果高点。微信开发必须得将就效率问题。不然等半天出不来,急死人,半天出不来结果,客户直接走人。
不多说,直接上代码

\\返回两个经纬度坐标点的距离(单位:米)

\\C#  方法

///<summary>返回两个经纬度坐标点的距离(单位:米) by Alex.Y</summary>
        ///<param name="Longtiude">来源坐标经度Y</param>
        ///<param name="Latitude">来源坐标经度X</param>
        ///<param name="Longtiude2">目标坐标经度Y</param>
        ///<param name="Latitude2">目标坐标经度X</param>
        ///<returns>返回距离(米)</returns>
        public double getMapDistance(double Longtiude, double Latitude, double Longtiude2, double Latitude2)
        {

            var lat1 = Latitude;
            var lon1 = Longtiude;
            var lat2 = Latitude2;
            var lon2 = Longtiude2;
            var earthRadius = 6371; //appxoximate radius in miles  6378.137

            var factor = Math.PI / 180.0;
            var dLat = (lat2 - lat1) * factor;
            var dLon = (lon2 - lon1) * factor;
            var a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Cos(lat1 * factor)
              * Math.Cos(lat2 * factor) * Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
            var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

            double d = earthRadius * c * 1000;

            return d;

        }



--返回两个经纬度坐标点的距离(单位:千米)

-- =============================================
-- Author:		alex.Y
-- Create date: getdate()
-- Description:	返回两个经纬度坐标点的距离(单位:千米)
--        ///<param name="@LngBegin">来源坐标经度Y</param>
--        ///<param name="@LatBegin">来源坐标经度X</param>
--        ///<param name="@LngEnd">目标坐标经度Y</param>
 --       ///<param name="@LatEnd">目标坐标经度X</param>
-- =============================================

CREATE FUNCTION [dbo].[ufn_GetMapDistance]
(@LngBegin  REAL, @LatBegin REAL, @LngEnd REAL, @LatEnd REAL) 
       RETURNS FLOAT
       AS
BEGIN
       --距离(千米)   
       DECLARE @Distance      REAL
       DECLARE @EARTH_RADIUS  REAL
       --SET @EARTH_RADIUS =6378.137 
       SET @EARTH_RADIUS =6371  
       
       DECLARE @RadLatBegin  REAL,
               @RadLatEnd    REAL,
               @RadLatDiff   REAL,
               @RadLngDiff   REAL
       
       SET @RadLatBegin = @LatBegin *PI()/ 180.0 
       SET @RadLatEnd = @LatEnd *PI()/ 180.0 
       SET @RadLatDiff = @RadLatBegin - @RadLatEnd 
       SET @RadLngDiff = @LngBegin *PI()/ 180.0 - @LngEnd *PI()/ 180.0 
       
       SET @Distance = 2 *ASIN(
               SQRT(
                   POWER(SIN(@RadLatDiff / 2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd) 
                   *POWER(SIN(@RadLngDiff / 2), 2)
               )
           )
       
       SET @Distance = @Distance * @EARTH_RADIUS 
       --SET @Distance = Round(@Distance * 10000) / 10000 
       
       RETURN @Distance
       
		-- SELECT [dbo].[ufn_GetMapDistance](116.3130497932434100,39.9804086267150800,116.3731849193573000,39.9110159284269700)

END

  

相关文章
|
6月前
uniApp获取当前位置经纬度
uniApp获取当前位置经纬度
327 0
|
3月前
|
前端开发 JavaScript 定位技术
GPS坐标转百度坐标
GPS坐标转百度坐标
36 1
|
定位技术
百度地图开发:字符串经纬度转为经纬度数组的解决方案
百度地图开发:字符串经纬度转为经纬度数组的解决方案
153 0
|
前端开发 定位技术 API
百度地图API:根据起始点经纬度坐标确认最佳路线规划
百度地图API:根据起始点经纬度坐标确认最佳路线规划
121 0
|
定位技术
百度拾取经纬度坐标转化的geojson数据偏离中心的解决方案
百度拾取经纬度坐标转化的geojson数据偏离中心的解决方案
148 0
|
定位技术 API
百度地图和腾讯地图开发经纬度的位置是互换的
百度地图和腾讯地图开发经纬度的位置是互换的
473 0
在地图上--给经纬度--展示任何一个点(可以展示地名)
在地图上--给经纬度--展示任何一个点(可以展示地名)
在地图上--给经纬度--展示任何一个点(可以展示地名)
|
SQL JSON Java
GPS坐标转换成百度坐标-如何解析json返回值
GPS坐标转换成百度坐标-如何解析json返回值
286 0
|
定位技术
各大在线地图,使用的经纬度坐标为什么都精确到小数点之后第六位?
做过在线地图开发的同学,可能都会有疑问,各大在线地图,使用的经纬度坐标为什么都精确到小数点之后第六位? 以前的经纬度坐标,往往是(106.1234567342,30.8237234234),经度纬度都是很长一串,给人感觉非常精确一样。
1692 0