百度地图坐标转换API和地图API

利用百度地图的服务将经纬度转换为米单位坐标

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double[,] LonLat = new double[2, 2] { { 114.21892734521, 29.575429778924 }, { 114.21892734521, 29.575429778924 } };

            string url = string.Format("http://api.map.baidu.com/geoconv/v1/?coords={0},{1};{2},{3}&from=1&to=6&ak=你的密钥", LonLat[0,0], LonLat[0,1], LonLat[1,0], LonLat[1,1]);
            string res = SendRequest(url, Encoding.UTF8);
            Debug.WriteLine(res);
           int x =  res.IndexOf("\"x\":");
           int y = res.IndexOf("\"y\":");
           int endy = res.IndexOf("}");
           string xx = res.Substring(x+ 4, y - x - 5);
           string yy = res.Substring(y + 4, endy - y-4);
           Console.Write(xx+"");
           Console.WriteLine(yy + "");
           x = res.IndexOf("\"x\":", x+3);
           y = res.IndexOf("\"y\":",y+3);
           endy = res.IndexOf("}",endy+3);
           xx = res.Substring(x + 4, y - x - 5);
           yy = res.Substring(y + 4, endy - y - 4);
           Console.Write(xx+"");
           Console.WriteLine(yy + "");
        }
        /// <summary> 
        /// Get方式获取url地址输出内容 
        /// </summary> /// <param name="url">url</param> 
        /// <param name="encoding">返回内容编码方式,例如:Encoding.UTF8</param> 
        public static String SendRequest(String url, Encoding encoding)
        {
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
            webRequest.Method = "GET";
            HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
            StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding);
            return sr.ReadToEnd();
        }
    }
}

结果:

官方开发说明:http://developer.baidu.com/map/changeposition.htm

获取密钥:http://lbsyun.baidu.com/apiconsole/key

我自己的密钥:http://lbsyun.baidu.com/apiconsole/key

http://developer.baidu.com/map/jsdemo.htm#a1_2

利用密钥还建立了一个显示地图的网页

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
    body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密钥"></script>
    <title>地图展示</title>
</head>
<body>
    <div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
    // 百度地图API功能
    var map = new BMap.Map("allmap");    // 创建Map实例
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);  // 初始化地图,设置中心点坐标和地图级别
    map.addControl(new BMap.MapTypeControl());   //添加地图类型控件
    map.setCurrentCity("北京");          // 设置地图显示的城市 此项是必须设置的
    map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放
</script>

 

一个有关地图的开源项目:

http://greatmaps.codeplex.com/SourceControl/latest

百度地图09坐标转wgs84坐标

1.百度09坐标转火星坐标系

2.火星坐标系转wgs84坐标系

/// <summary>
    /// 地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换 帮助类 
    /// </summary>
    public static class WGSGCJLatLonHelper
    {
        /*
         *参考:
         *1.http://blog.csdn.net/yorling/article/details/9175913
         *2.http://kongxz.com/2013/10/wgs-cgj/
         *3.https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#EvilTransform.cs
         *4.https://github.com/googollee/eviltransform
         *5.https://github.com/shenqiliang/WGS2Mars
         *
         *WGS84:World Geodetic System 1984,是为GPS全球定位系统使用而建立的坐标系统。通过遍布世界的卫星观测站观测到
         *的坐标建立,其初次WGS84的精度为1-2m,在1994年1月2号,通过10个观测站在GPS测量方法上改正,得到了WGS84
         *(G730),G表示由GPS测量得到,730表示为GPS时间第730个周。1996年,National Imagery and Mapping Agency (NIMA) 
         *为美国国防部 (U.S.Departemt of Defense, DoD)做了一个新的坐标系统。这样实现了新的WGS版本:WGS(G873)。其因为
         *加入了USNO站和北京站的改正,其东部方向加入了31-39cm 的改正。所有的其他坐标都有在1分米之内的修正。
         *
         *GCJ-02:国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算
         *法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常
         *被人称为火星坐标系统。GCJ-02 意味“国测局-2002”,也就是说,这是国家测绘局于2002年弄出的标准。
         */
        #region 常量以及私有方法
        const double pi = 3.14159265358979324;//Math.PI;//;
        const double a = 6378245.0;
        const double ee = 0.00669342162296594323;
        private static double TransformLat(double lonX, double latY)
        {
            double _ret = -100.0 + 2.0 * lonX + 3.0 * latY + 0.2 * latY * latY + 0.1 * lonX * latY + 0.2 * Math.Sqrt(Math.Abs(lonX));
            _ret += (20.0 * Math.Sin(6.0 * lonX * pi) + 20.0 * Math.Sin(2.0 * lonX * pi)) * 2.0 / 3.0;
            _ret += (20.0 * Math.Sin(latY * pi) + 40.0 * Math.Sin(latY / 3.0 * pi)) * 2.0 / 3.0;
            _ret += (160.0 * Math.Sin(latY / 12.0 * pi) + 320 * Math.Sin(latY * pi / 30.0)) * 2.0 / 3.0;
            return _ret;
        }
        private static double TransformLon(double lonX, double latY)
        {
            double _ret = 300.0 + lonX + 2.0 * latY + 0.1 * lonX * lonX + 0.1 * lonX * latY + 0.1 * Math.Sqrt(Math.Abs(lonX));
            _ret += (20.0 * Math.Sin(6.0 * lonX * pi) + 20.0 * Math.Sin(2.0 * lonX * pi)) * 2.0 / 3.0;
            _ret += (20.0 * Math.Sin(lonX * pi) + 40.0 * Math.Sin(lonX / 3.0 * pi)) * 2.0 / 3.0;
            _ret += (150.0 * Math.Sin(lonX / 12.0 * pi) + 300.0 * Math.Sin(lonX / 30.0 * pi)) * 2.0 / 3.0;
            return _ret;
        }
        private static MyPoint Transform(MyPoint point)
        {
            MyPoint _transPoint = new MyPoint();
            double _lat = TransformLat(point.LonX - 105.0, point.LatY - 35.0);
            double _lon = TransformLon(point.LonX - 105.0, point.LatY - 35.0);
            double _radLat = point.LatY / 180.0 * pi;
            double _magic = Math.Sin(_radLat);
            _magic = 1 - ee * _magic * _magic;
            double _sqrtMagic = Math.Sqrt(_magic);
            _lat = (_lat * 180.0) / ((a * (1 - ee)) / (_magic * _sqrtMagic) * pi);
            _lon = (_lon * 180.0) / (a / _sqrtMagic * Math.Cos(_radLat) * pi);
            _transPoint.LatY = _lat;
            _transPoint.LonX = _lon;

            return _transPoint;
        }
        #endregion
        #region 火星坐标转 (GCJ-02)地球坐标(WGS-84)
        /// <summary>
        /// 火星坐标转 (GCJ-02)地球坐标(WGS-84)
        /// </summary>
        /// <param name="gcjPoint">火星坐标转 (GCJ-02)</param>
        /// <returns>地球坐标(WGS-84)</returns>
        public static MyPoint GCJ02ToWGS84(MyPoint gcjPoint)
        {
            if (outOfChina(gcjPoint))
            {
                return gcjPoint;
            }
            MyPoint _transPoint = Transform(gcjPoint);
            return new MyPoint(gcjPoint.LatY - _transPoint.LatY, gcjPoint.LonX - _transPoint.LonX);
        }
        #endregion
        #region 地球坐标(WGS-84)转火星坐标 (GCJ-02)
        /// <summary>
        /// 地球坐标(WGS-84)转火星坐标 (GCJ-02)
        /// </summary>
        /// <param name="wgsPoint">地球坐标(WGS-84)</param>
        /// <returns>火星坐标 (GCJ-02)</returns>
        public static MyPoint WGS84ToGCJ02(MyPoint wgsPoint)
        {
            if (outOfChina(wgsPoint))
            {
                return wgsPoint;
            }
            MyPoint _transPoint = Transform(wgsPoint);
            return new MyPoint(wgsPoint.LatY + _transPoint.LatY, wgsPoint.LonX + _transPoint.LonX);
        }
        #endregion
        #region 火星坐标系转百度坐标系
        public static MyPoint GCJ02ToBD09(MyPoint gcjpoint)
        {
            double x = gcjpoint.LonX, y = gcjpoint.LatY;
            double z =Math.Sqrt(x * x + y * y) + 0.00002 * Math.Sin(y * pi);
            double theta =Math.Atan2(y, x) + 0.000003 *Math.Cos(x * pi);
            double bd_lon = z * Math.Cos(theta) + 0.0065;
            double bd_lat = z * Math.Sin(theta) + 0.006;
            return new MyPoint(bd_lat + 0.006, bd_lon);            
        }        
        #endregion
        #region 百度坐标系转火星坐标系
        public static MyPoint BD09ToGCJ02(MyPoint bdpoint)
        {
            double x = bdpoint.LonX - 0.0065, y = bdpoint.LatY - 0.006;
            double z = Math.Sqrt(x * x + y * y) - 0.00002 * Math.Sin(y * pi);
            double theta = Math.Atan2(y, x) - 0.000003 * Math.Cos(x * pi);
            double gg_lon = z * Math.Cos(theta);
            double gg_lat = z * Math.Sin(theta);
            return new MyPoint(gg_lat, gg_lon);           
        }
        #endregion
        #region 百度坐标转GPS坐标
        public static MyPoint BD09ToWGS84(MyPoint bdpoint)
        {
            MyPoint gcj02 = BD09ToGCJ02(bdpoint);
            MyPoint wgs84 = GCJ02ToWGS84(gcj02);
            return wgs84;
        }
        #endregion
        private static bool outOfChina(MyPoint pt)
        {
            if (pt.LonX < 72.004 || pt.LonX > 137.8347)
                return true;

            if (pt.LatY < 0.8293 || pt.LatY > 55.8271)
                return true;

            return false;
        }

    }
    public class MyPoint
    {
        public double LonX
        {
            get;
            set;
        }

        public double LatY
        {
            get;
            set;
        }
        public MyPoint(double latY, double lonX)
        {
            LatY = latY;
            LonX = lonX;
        }
        public MyPoint()
        { }
    }
View Code

 

posted @ 2015-08-25 18:28  lwn6  阅读(837)  评论(0编辑  收藏  举报
什么是幸福?天天在做自己想做的事情,家人、同事、朋友、客户、网友都和和睦睦,身体健康、钱包鼓鼓、女朋友天天开心、生活无忧无虑就是最大的幸福