国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

計算地理位置之間的距離

2019-11-17 02:01:50
字體:
來源:轉載
供稿:網友

計算地理位置之間的距離

.net 根據坐標,計算指定范圍內的最大最小經緯度、根據兩點間經緯度坐標(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        #endregion

sql:計算地球上兩個坐標點(經度,緯度)之間距離sql函數(注意:這里的單位是千米)

go   --計算地球上兩個坐標點(經度,緯度)之間距離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 

sql轉自:http://www.aspbc.com/tech/showtech.asp?id=1136百度地圖獲取兩點間的距離在線測試:http://developer.baidu.com/map/jsdemo.htm#a6_1


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁都县| 昌黎县| 喀喇沁旗| 和田县| 普定县| 南木林县| 文登市| 内丘县| 石门县| 乌鲁木齐县| 迭部县| 昔阳县| 定远县| 库伦旗| 平乡县| 兴宁市| 青岛市| 六枝特区| 五莲县| 乾安县| 巧家县| 张北县| 桐庐县| 封丘县| 循化| 鄂托克前旗| 丁青县| 罗甸县| 玉树县| 荃湾区| 长寿区| 社旗县| 锡林郭勒盟| 绥化市| 五峰| 牟定县| 清原| 陕西省| 惠水县| 威远县| 治县。|