.net关于坐标之间一些简单操作

火星坐标系 (GCJ-02)转换为百度坐标系 (BD-09)
function GCJ02toBD09(lng, lat) {
    var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_pi);
    var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_pi);
    var bd_lng = z * Math.cos(theta) + 0.0065;
    var bd_lat = z * Math.sin(theta) + 0.006;
    return [bd_lng,bd_lat]
}

 

计算两个坐标点之间的距离
function getDistance(lat1, lng1, lat2, lng2) {
    var dis = 0;
    var radLat1 = toRadians(lat1);
    var radLat2 = toRadians(lat2);
    var deltaLat = radLat1 - radLat2;
    var deltaLng = toRadians(lng1) - toRadians(lng2);
    var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
    return dis * 6378137;
 
    function toRadians(d) { return d * Math.PI / 180; }
}

 

 

已知一点经纬度A,和与另一点B的距离和方位角,求B点的经纬度
        
/// <summary>
        /// 
        /// </summary>
        /// <param name="distance">距离</param>
        /// <param name="lng">A坐标经度</param>
        /// <param name="lati">A坐标纬度</param>
        /// <param name="angle">角度 ,以正北方向顺时针开始</param>
        /// <returns></returns>
private string ConvertDistanceToLogLat(int distance, string lng, string lati, double angle)
        {
            double juli = (float)distance / 1000;
            string logLat = null;
            double lng1 = Convert.ToDouble(lng.Trim());
            double lat1 = Convert.ToDouble(lati.Trim());
           //将距离转换成经度的计算公式 
            double lon = lng1 + (juli * Math.Sin(angle * Math.PI / 180)) / (111 * Math.Cos(lat1 * Math.PI / 180));
           //将距离转换成纬度的计算公式
            double lat = lat1 + (juli * Math.Cos(angle * Math.PI / 180)) / 111;
            logLat =  lon + "," + lat;
            return logLat;
        }

 

 

将double值转换成度分秒字符串
       
 private string ConvertLogLatToString(double lon)
        {
            string resut = null;
            string temp = lon.ToString();
            string[] du = temp.Split('.');
            resut += du[0] + "°";
            double fen = (lon - Convert.ToDouble(du[0])) * 60;
            string[] fen_Arrary = fen.ToString().Split('.');
            resut += fen_Arrary[0] + "";
            if (fen_Arrary.Length > 1)
            {
                double second = Math.Round((fen - Convert.ToDouble(fen_Arrary[0])) * 60, 0);
                resut += second.ToString() + "";
            }
            return resut;
        }

 

posted @ 2017-07-26 16:26  Puede  阅读(346)  评论(1编辑  收藏  举报