C#和SqlServer计算地理位置之间的距离
来源:互联网 发布:淘宝店什产品最好卖 编辑:程序博客网 时间:2024/06/07 13:39
C#根据坐标,计算指定范围内的最大最小经纬度、根据两点间经纬度坐标(double值),计算两点间距离(注意:这里的单位是米):
#region 根据坐标,计算指定范围内的最大最小经纬度、根据两点间经纬度坐标(double值),计算两点间距离,单位为米 private static double PI = Math.PI; //3.14159265; //π private static double EARTH_RADIUS = 6378137; //地球半径 private static double RAD = Math.PI / 180.0; // π/180 #region 根据坐标,计算指定范围内的最大最小经纬度 /// <summary> /// 根据坐标,计算指定范围内的最大最小经纬度 /// </summary> /// <param name="lng">经度</param> /// <param name="lat">纬度</param> /// <param name="raidus">范围(米)</param> /// <returns>返回最大、最小经纬度minLng, minLat, maxLng, maxLat</returns> public double[] getAround(double lng, double lat, int raidus) { //The circumference of the earth is 24,901 miles. //24,901/360 = 69.17 miles / degree Double latitude = lat; Double longitude = lng; Double degree = (24901 * 1609) / 360.0; //地球的周长是24901英里 double raidusMile = raidus; //先计算纬度 Double dpmLat = 1 / degree; Double radiusLat = dpmLat * raidusMile; Double minLat = latitude - radiusLat; Double maxLat = latitude + radiusLat; //计算经度 Double mpdLng = degree * Math.Cos(latitude * (PI / 180)); //纬度的余弦 Double dpmLng = 1 / mpdLng; Double radiusLng = dpmLng * raidusMile; Double minLng = longitude - radiusLng; Double maxLng = longitude + radiusLng; //System.out.println("["+minLat+","+minLng+","+maxLat+","+maxLng+"]"); //最小经度,最小纬度,最大经度,最大纬度 return new double[] { minLng, minLat, maxLng, maxLat }; } #endregion #region 根据两点间经纬度坐标(double值),计算两点间距离,单位为米 /// <summary> /// 根据两点间经纬度坐标(double值),计算两点间距离,单位为米 /// </summary> /// <param name="lng1">经度1</param> /// <param name="lat1">纬度1</param> /// <param name="lng2">经度2</param> /// <param name="lat2">纬度2</param> /// <returns>返回距离(米)</returns> public double getDistance(double lng1, double lat1, double lng2, double lat2) { double radLat1 = lat1 * RAD; // // RAD=π/180 double radLat2 = lat2 * RAD; double a = radLat1 - radLat2; double b = (lng1 - lng2) * RAD; double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))); s = s * EARTH_RADIUS; s = Math.Round(s * 10000) / 10000; return s; } #endregion #endregionSqlServer:计算地球上两个坐标点(经度,纬度)之间距离sql函数(注意:这里的单位是千米):
--计算地球上两个坐标点(经度,纬度)之间距离sql函数 CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EARTH_RADIUS REAL SET @EARTH_RADIUS = 6378.137 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 END
百度地图获取两点间的距离在线测试:http://developer.baidu.com/map/jsdemo.htm#a6_1
0 0
- C#和SqlServer计算地理位置之间的距离
- sqlserver 根据经纬度计算两点之间距离
- 获取地理位置及计算距离
- 计算两点之间的距离
- 计算两点之间的距离
- 计算两点之间的距离
- 计算坐标之间的距离
- 计算两点之间的距离
- 计算两点之间的距离
- 计算经纬度之间的距离
- 云计算:拉进应用和操作之间的距离
- iOS-计算两个经纬度之间的距离和方位
- Android GPS获取地理位置并计算距离
- 用经纬度计算两地之间的距离
- 根据经纬度计算两点之间的距离
- 计算两个地理坐标之间的距离
- 计算两个经纬度之间的距离
- 两经纬度之间的距离计算
- Garbage Collection
- Centos 7 开启端口
- SQLlite如何使用?
- 疯狂食材项目总结
- An iOS Developer on React Native一个资深iOS开发者对于React Native具体使用体验
- C#和SqlServer计算地理位置之间的距离
- Oracle死锁查询及处理方法
- iOS项目管理
- MSMQ消息广播
- Leetcode Subsets II
- cocos2dx 2.0版本在android下的安装配置问题
- Esri与开源
- 监听键盘高度变化,以及键盘自定义
- iOS代码实践总结