• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
jy_song
博客园    首页    新随笔    联系   管理    订阅  订阅

地图坐标服务

public class LatLonUtility
    {
        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>minLat,minLng,maxLat,maxLng </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>
        ///  根据两点间经纬度坐标(double值),计算两点间距离,单位为米 
        /// </summary>
        /// <param name="lng1">lng1</param>
        /// <param name="lat1">lat1</param>
        /// <param name="lng2">lng2</param>
        /// <param name="lat2">lat2</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;
        }

        /// <summary>
        /// 获取距离的字符串
        /// </summary>
        /// <param name="distance"></param>
        /// <returns></returns>
        public static string getDistanceString(double distance)
        {
            if (distance < 1000)
            {
                return ((int)distance).ToString() + "m";
            }
            else
            {
                return ((int)(distance / 1000)).ToString() + "km";
            }
        }

    }

 

posted @ 2017-02-15 16:12  jy_song  阅读(90)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3