zoukankan      html  css  js  c++  java
  • 根据经纬度和半径计算经纬度范围

        public class LatLonUtil
        {
            private static double PI = 3.14159265;
            private static double EARTH_RADIUS = 6378137;
            private static double RAD = Math.PI / 180.0;
    
            /// <summary>
            /// 根据提供的经度和纬度、以及半径,取得此半径内的最大最小经纬度
            /// </summary>
            /// <param name="lat">纬度</param>
            /// <param name="lon">经度</param>
            /// <param name="raidus">半径(米)</param>
            /// <returns></returns>
            public static double[] GetAround(double lat, double lon, int raidus)
            {
    
                Double latitude = lat;
                Double longitude = lon;
    
                Double degree = (24901 * 1609) / 360.0;
                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;
                return new double[] { minLat, minLng, maxLat, maxLng };
            }
    
            /// <summary>
            /// 根据提供的两个经纬度计算距离(米)
            /// </summary>
            /// <param name="lng1">经度1</param>
            /// <param name="lat1">纬度1</param>
            /// <param name="lng2">经度2</param>
            /// <param name="lat2">纬度2</param>
            /// <returns></returns>
            public static double GetDistance(double lng1, double lat1, double lng2, double lat2)
            {
                double radLat1 = lat1 * RAD;
                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;
            }
        }
  • 相关阅读:
    cf D. Vessels
    cf C. Hamburgers
    zoj 3758 Singles' Day
    zoj 3777 Problem Arrangement
    zoj 3778 Talented Chef
    hdu 5087 Revenge of LIS II
    zoj 3785 What day is that day?
    zoj 3787 Access System
    判断给定图是否存在合法拓扑排序
    树-堆结构练习——合并果子之哈夫曼树
  • 原文地址:https://www.cnblogs.com/xinzheng/p/5667364.html
Copyright © 2011-2022 走看看