精华内容
下载资源
问答
  • 高德地图坐标转换

    千次阅读 2016-03-01 10:58:21
    我们还提供,如何将基站cell_id转换为GPS坐标? ----------------------------------------------------------------------------------------- 第一部分 各种坐标系详解 1、大地坐标系统 WGS-84 用来表述地球上...

    m

    摘要:如何从GPS转到谷歌?如何从百度转到高德?这些都是小case。我们还提供,如何将基站cell_id转换为GPS坐标?

    -----------------------------------------------------------------------------------------

    第一部分 各种坐标系详解

    1、大地坐标系统 WGS-84

    用来表述地球上点的位置的一种地区坐标系统。它采用一个十分近似于地球自然形状的参考椭球作为描述和推算地面点位置和相互关系的基准面。一个大地坐标系统必须明确定义其三个坐标轴的方向和其中心的位置。通常人们用旋转椭球的短轴与某一规定的起始子午面分别平行干地球某时刻的平均自转轴和相应的真起始子午面来确定坐标轴的方向。若使参考椭球中心与地球平均质心重合,则定义和建立了地心大地坐标系。它是航天与远程武器和空间科学中各种定位测控测轨的依据。若椭球表面与一个或几个国家的局部大地水准面吻合最好,则建立了一个国家或区域的局部大地坐标系。大地坐标系中点的位置是以其大地坐标表示的,大地坐标均以椭球面的法线来定义。其中,过某点的椭球面法线与椭球赤道面的交角为大地纬度;包含该法线和大地子午面与起始大地子午面的二面角为该点的大地经度;沿法线至椭球面的距离为该点的大地高。大地纬度、大地经度和大地高分别用大写英文字母B、L、H表示。

    国内的互联网公司,都不会使用GPS坐标,因为这不符合国家政策。所以大家都会使用GCJ-02坐标系。

     

    2、火星坐标系统 GCJ-02

    国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照几行代码的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统。

    目前使用火星坐标系的地图商:

    • 腾讯搜搜地图
    • 搜狐搜狗地图
    • 阿里云地图
    • 高德MapABC地图
    • 灵图51ditu地图

    所有的电子地图所有的导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送 到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只要需要汽车导航的,需要用到导航电子地图的,统统需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标,这样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作。

    国内互联网公司,都必须使用GCJ-02坐标系。

     

     

    3、百度坐标系统 BD-09

    百度坐标对火星坐标系进行了一次加密,形成了百度坐标系.

    目前使用百度坐标系的地图商:

    • 百度Baidu地图

    少部分公司会在GCJ-02的基础上再进行一次加密,但这样的坐标不通用,只适于特定公司的地图。

     

    4、图吧

    图吧是百度坐标乘以10000的结果。

    目前使用图吧坐标系的地图商:

    • 图吧MapBar地图

    少部分公司会在GCJ-02的基础上再进行一次加密,但这样的坐标不通用,只适于特定公司的地图。

     

    5、移动联通基站

    移动基站采用小区制,覆盖范围几KM;而联通基站采用大区制,可以覆盖几十KM;辐射的频率大小和能量决定覆盖范围。从另一角度来看,从能量守恒的角度来分析:手机辐射大的其基站辐射小(GSM),反之手机辐射小的其基站辐射大(CDMA) 。

    联通联通基站格式 MNC MCC LAC CELLID

    MNC(Mobile Network Code,移动网络号码),用于识别移动客户所属的移动网络。

    MCC(Mobile Country Code,移动国家号码),用于唯一地标识移动客户属于的国家。它由三位十进制数组成(000-999),例如我国的MCC为460。

    LAC(Location Area Code, 移动位置区码),是为寻呼而设置的一个区域,覆盖一片地理区域,初期一般按行政区域划分(一个县或一个区),现在很灵活了,按寻呼量划分。当一个LAC下的寻呼量达到一个预警门限,就必须拆分。 为了确定移动台的位置,每个GSMPLMN的覆盖区都被划分成许多位置区,位置区码(LAC)则用于标识不同的位置区。 位置区码(LAC)包含于LAI中,由两个字节组成,采用16进制编码。可用范围为0x0000-0xFFFF,码组0x0000和0xFFFE不可以使用(参见GSM规范03.03、04.08和11.11)。一个位置区可以包含一个或多个小区。

    CELLID(Cell Tower ID,移动基站号),单元是指一个DVB-T信号覆盖的地理区域,这个信号是由一个或者多个发射机使用单一频率传输的,每个发射机可以发射特定的传输流。单元也可以包括中继器所覆盖的区域。两个相邻的单元之间可以有重叠的区域。在一个用原始网络标识符(original_network_id)标识的网络里面,标识一个单元的单元标识符(cell_id)是唯一的。

     

    6、电信基站格式

    SID NID BID

    SID和NID确定你现在使用的那里的网络,看你是否漫游,BID主要是确定你是用的哪个基站。

     

    二、坐标如何转换

    • GPS转谷歌地图 http://ditujiupian.com/service/api.ashx?key=您的KEY& 功能手机
        type=wgs2gcj&lng=116.420817&lat=39.906987
    • GPS转到高德地图:同上
    • GPS转百度地图 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=wgs2bd&lng=116.420817&lat=39.906987
    • GPS转图吧地图 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=wgs2mb&lng=116.420817&lat=39.906987
    • 谷歌地图转GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=gcj2wgs&lng=116.420817&lat=39.906987
    • 谷歌地图转百度地图 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=gcj2bd&lng=116.420817&lat=39.906987
    • 百度地图转GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=bd2wgs&lng=116.420817&lat=39.906987
    • 百度地图转谷歌地图 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=bd2gcj&lng=116.420817&lat=39.906987
    • 百度地图转高德地图:同上
    • 图吧地图转GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=mb2wgs&lng=116.420817&lat=39.906987
    • 基站转GPS http://ditujiupian.com/service/api.ashx?key=您的KEY&type=cellid2wgs&lac=4340&cellid=13178
    • 基站转谷歌地图 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=cellid2gcj&lac=4340&cellid=13178
    • 基站转到高德地图:同上
    • 基站转百度地图 http://ditujiupian.com/service/api.ashx?key=您的KEY&type=cellid2bd&lac=4340&cellid=13178
    • 经纬度转地址(大地:lnglat2address-wgs,火星:lnglat2address-gcj,百度:lnglat2address-bd) http://ditujiupian.com/service/api.ashx?key=您的KEY&type=lnglat2address-wgs&lng=116.420817&lat=39.906987

    以上服务由坐标纠偏网站提供,更多细节可以访问网站,申请key。http://ditujiupian.com/

    我申请了一个试用key:08145a5c5d2b487db7adeeac4a90f12a

     

    三、百度坐标转到高德坐标的算法

    1、线性转换

    var TO_GLNG = function(lng){return lng-0.0065;};
    var TO_GLAT = function(lat){return lat-0.0060;};

     

    2、球面坐标转换

    复制代码
    #include <math.h>    
    const double x_pi = 3.14159265358979324 * 3000.0 / 180.0;  
    void bd_decrypt(double bd_lat, double bd_lon, double &gg_lat, double &gg_lon)  
    {  
        double x = bd_lon - 0.0065, y = bd_lat - 0.006;  
        double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);  
        double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);  
        gg_lon = z * cos(theta);  
        gg_lat = z * sin(theta);  
    }  
    复制代码

     

    3、网络接口

    http://ditujiupian.com/service/api.ashx?key=您的KEY&type=bd2gcj&lng=116.420817&lat=39.906987

     


    展开全文
  • 最近做项目需要百度地图坐标转换高德地图坐标,高德官方也给出了转换接口(百度地图也给出了转换接口)http://lbs.amap.com/api/javascript-api/reference/lnglat-to-address#t1但是还想想直接通过后台一次性处理好...

    最近做项目需要百度地图坐标转换到高德地图坐标,高德官方也给出了转换接口(百度地图也给出了转换接口)

    http://lbs.amap.com/api/javascript-api/reference/lnglat-to-address#t1

    但是还想想直接通过后台一次性处理好坐标,因此需要找到坐标转换算法,封装起来调用。

    1 百度官方对百度坐标为何有偏移的解释

    国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。

    2 火星坐标系(GCJ-02)与百度坐标系(BD-09)的转换算法

    GCJ-02(火星坐标) 和 BD-09 (百度坐标)

    算法代码如下,其中bd_encrypt将 GCJ-02 坐标转换成 BD-09 坐标,bd_decrypt反之。

    封装经纬度:

    /** 经纬度点封装

    * Created by 明明如月 on 2017-03-22.

    */

    public class LngLat {

    private double longitude;//经度

    private double lantitude;//维度

    public LngLat() {

    }

    public LngLat(double longitude, double lantitude) {

    this.longitude = longitude;

    this.lantitude = lantitude;

    }

    public double getLongitude() {

    return longitude;

    }

    public void setLongitude(double longitude) {

    this.longitude = longitude;

    }

    public double getLantitude() {

    return lantitude;

    }

    public void setLantitude(double lantitude) {

    this.lantitude = lantitude;

    }

    @Override

    public String toString() {

    return "LngLat{" +

    "longitude=" + longitude +

    ", lantitude=" + lantitude +

    '}';

    }

    }

    /** 百度地图坐标和火星坐标转换

    * Created by 明明如月 on 2017-03-22.

    */

    public class CoodinateCovertor {

    private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

    /**

    * 对double类型数据保留小数点后多少位

    * 高德地图转码返回的就是 小数点后6位,为了统一封装一下

    * @param digit 位数

    * @param in 输入

    * @return 保留小数位后的数

    */

    static double dataDigit(int digit,double in){

    return new BigDecimal(in).setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();

    }

    /**

    * 将火星坐标转变成百度坐标

    * @param lngLat_gd 火星坐标(高德、腾讯地图坐标等)

    * @return 百度坐标

    */

    public static LngLat bd_encrypt(LngLat lngLat_gd)

    {

    double x = lngLat_gd.getLongitude(), y = lngLat_gd.getLantitude();

    double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);

    double theta = atan2(y, x) + 0.000003 * cos(x * x_pi);

    return new LngLat(dataDigit(6,z * cos(theta) + 0.0065),dataDigit(6,z * sin(theta) + 0.006));

    }

    /**

    * 将百度坐标转变成火星坐标

    * @param lngLat_bd 百度坐标(百度地图坐标)

    * @return 火星坐标(高德、腾讯地图等)

    */

    static LngLat bd_decrypt(LngLat lngLat_bd)

    {

    double x = lngLat_bd.getLongitude() - 0.0065, y = lngLat_bd.getLantitude() - 0.006;

    double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);

    double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);

    return new LngLat( dataDigit(6,z * cos(theta)),dataDigit(6,z * sin(theta)));

    }

    //测试代码

    public static void main(String[] args) {

    LngLat lngLat_bd = new LngLat(120.153192,30.25897);

    System.out.println(bd_decrypt(lngLat_bd));

    }

    }

    经验证和高德地图自带接口转换出效果一致。

    展开全文
  • java 高德地图坐标转换为具体地址 /** * 通过经纬度查询地址 查询不出来 结果返回空字符串 * * @param longitude 经度 大于180 * @param latitude 纬度 * @return */ public static String getLocation(String ...

    java 高德地图坐标转换为具体地址

    /**
    * 通过经纬度查询地址 查询不出来 结果返回空字符串
    *
    * @param longitude 经度 大于180
    * @param latitude 纬度
    * @return
    */
    public static String getLocation(String longitude, String latitude) {

    	String location = longitude + "," + latitude;
    
    	String str = "https://restapi.amap.com/v3/geocode/regeo?location=" + location + "&key=" + key;
    	String res = getResponse(str);
    
    	String formattedAddress = "";
    	JSONObject jaon = JSONObject.parseObject(res);
    	if (jaon.getInteger("status") == 1) {
    		JSONObject regeocode = jaon.getJSONObject("regeocode");
    		formattedAddress = regeocode.getString("formatted_address");
    	}
    
    	return formattedAddress;
    }
    
    public static String getResponse(String serverUrl) {
    	
    	StringBuffer result = new StringBuffer();
    	try {
    		URL url = new URL(serverUrl);
    		URLConnection conn = url.openConnection();
    		BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    		String line;
    		while ((line = in.readLine()) != null) {
    			result.append(line);
    		}
    		in.close();
    	} catch (MalformedURLException e) {
    		e.printStackTrace();
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    	return result.toString();
    }
    
    展开全文
  • 最近做项目需要百度地图坐标转换高德地图坐标,高德官方也给出了转换接口(百度地图也给出了转换接口) http://lbs.amap.com/api/javascript-api/reference/lnglat-to-address#t1 但是还想想直接通过后台一次性...

    最近做项目需要百度地图坐标转换到高德地图坐标,高德官方也给出了转换接口(百度地图也给出了转换接口)

    http://lbs.amap.com/api/javascript-api/reference/lnglat-to-address#t1

    但是还想想直接通过后台一次性处理好坐标,因此需要找到坐标转换算法,封装起来调用。



    1 百度官方对百度坐标为何有偏移的解释

      国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。


    2 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法

    GCJ-02(火星坐标 BD-09 (百度坐标)

    算法代码如下,其中 bd_encrypt 将 GCJ-02 坐标转换成 BD-09 坐标, bd_decrypt 反之。


    封装经纬度:

    /** 经纬度点封装
     * Created by 明明如月 on 2017-03-22.
     */
    public class LngLat {
        private double longitude;//经度
        private double lantitude;//维度
    
        public LngLat() {
        }
    
        public LngLat(double longitude, double lantitude) {
            this.longitude = longitude;
            this.lantitude = lantitude;
        }
    
        public double getLongitude() {
            return longitude;
        }
    
        public void setLongitude(double longitude) {
            this.longitude = longitude;
        }
    
        public double getLantitude() {
            return lantitude;
        }
    
        public void setLantitude(double lantitude) {
            this.lantitude = lantitude;
        }
    
        @Override
        public String toString() {
            return "LngLat{" +
                    "longitude=" + longitude +
                    ", lantitude=" + lantitude +
                    '}';
        }
    }


    /** 百度地图坐标和火星坐标转换
     * Created by 明明如月 on 2017-03-22.
     */
    public class CoodinateCovertor {
    
    
        private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    
        /**
         * 对double类型数据保留小数点后多少位
         *  高德地图转码返回的就是 小数点后6位,为了统一封装一下
         * @param digit 位数
         * @param in 输入
         * @return 保留小数位后的数
         */
         static double dataDigit(int digit,double in){
            return new   BigDecimal(in).setScale(6,   BigDecimal.ROUND_HALF_UP).doubleValue();
    
        }
    
        /**
         * 将火星坐标转变成百度坐标
         * @param lngLat_gd 火星坐标(高德、腾讯地图坐标等)
         * @return 百度坐标
         */
        
     public static LngLat bd_encrypt(LngLat lngLat_gd)
        {
            double x = lngLat_gd.getLongitude(), y = lngLat_gd.getLantitude();
            double z = sqrt(x * x + y * y) + 0.00002 * sin(y * x_pi);
            double theta = atan2(y, x) + 0.000003 * cos(x *  x_pi);
            return new LngLat(dataDigit(6,z * cos(theta) + 0.0065),dataDigit(6,z * sin(theta) + 0.006));
    
        }
        /**
         * 将百度坐标转变成火星坐标
         * @param lngLat_bd 百度坐标(百度地图坐标)
         * @return 火星坐标(高德、腾讯地图等)
         */
        static LngLat bd_decrypt(LngLat lngLat_bd)
        {
            double x = lngLat_bd.getLongitude() - 0.0065, y = lngLat_bd.getLantitude() - 0.006;
            double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
            double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
            return new LngLat( dataDigit(6,z * cos(theta)),dataDigit(6,z * sin(theta)));
    
        }
    
    //测试代码
        public static void main(String[] args) {
            LngLat lngLat_bd = new LngLat(120.153192,30.25897);
            System.out.println(bd_decrypt(lngLat_bd));
        }
    }
    


    经验证和高德地图自带接口转换出效果一致。


    展开全文
  • 支持GPS/Mapbar/Baidu等多种类型坐标高德地图上使用。参见类CoordinateConverter。 CoordinateConverter converter = new CoordinateConverter(); // CoordType.GPS 待转换坐标类型 converter.from(CoordType....
  • 高德地图坐标转换为百度地图坐标

    千次阅读 2016-09-24 09:15:45
    业务是用户点击APP中的导航按钮,会根据用户当前手机安装地图APP进行导航,顺序是 1高德 2百度,如果用户没有安装高德地图APP则判断是否有百度地图APP因为APP是用的高德SDK所以在导航上没有任何问题,跳转百度后 ...
  • Android笔记:百度地图与高德地图坐标转换问题 安卓项目使用了百度地图的定位SDK,web端使用的也是百度地图, 后来发现界面显示百度地图不如高德效果好,web改用高德地图,原本的百度地图坐标是可以直接使用...
  • 百度地图坐标和高德地图坐标转换

    千次阅读 2017-12-14 17:09:05
    不同坐标转换偏移
  • 高德地图坐标转换问题

    千次阅读 2015-12-08 16:45:30
    最近项目中要继承高德地图,我是根据官方的开发指南配置的,使用CocoaPods自动配置,然后使用基本地图功能时没有问题,但当做到坐标转换的时候,问题就出现了,根据开发指南,坐标转换方法如下: //将GPS转成...
  • 高德地图坐标转换接口

    千次阅读 2015-11-06 16:24:40
    苦苦纠结于如何将GPS、mapbar、baidu坐标转换高德坐标系的开发者们。 二.转换方法: 1. 首先当然还是需要人手一个的百宝key。注意:权限君升级权限系统后,调用坐标转换接口的童鞋们需要重新申请。注意:绑定...
  •  * * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * * 将 BD-09 坐标转换成GCJ-02 坐标 * * @param  * bd_lat * @param bd_lon * @return  */  public static Gps bd09_To_Gcj02(double bd_lat, ...
  • public static Map bd_encrypt(double gg_lat, double gg_lon) { double x = gg_lon, y = gg_lat; double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * Math.PI); double theta = Math.atan2(y,
  • android项目使用了百度地图的定位SDK,web端使用的也是高德地图,发现安卓的定位提交到web显示总是有误差。后发现高德使用的坐标系是“gcj02”也就是大家所说的“火星坐标”, 百度使用的是“BD09”因为是百度所用...
  • 支持GPS/Mapbar/Baidu等多种类型坐标高德地图上使用。参见类CoordinateConverter。 CoordinateConverter converter = new CoordinateConverter(); // CoordType.GPS 待转换坐标类型 converter.from(CoordType....
  • 最近因为公司需求,在做GPS定位,并且将获得的坐标显示在高德地图上,但是实际效果跟我们期望的是有偏差的。...下面这篇文章就详细介绍了Android中GPS坐标转换高德地图坐标的方法,需要的朋友可以参考下。
  • 今天项目中遇到了服务端发的是百度地图的坐标,显示在高德地图上,在地图上位置偏差太大,就要把百度地图的坐标转换成高德的地图坐标,就在高德API官网搜到了,自己写出来记录一下,各位大神勿喷,下面上代码。...
  • java版GPS坐标转换高德地图坐标

    热门讨论 2015-12-25 14:03:24
    此文件为纯java编写的GPS坐标转换高德地图坐标,直接将文件添加到工程目录,调用转换函数即可,输入是double类型,输出是double数组,注意:输入输出数据的单位都是度。
  • /** * @author lafer * 高德地图工具类 */ public class GaoDeMapUtils { ... * 将GPS坐标转换高德地图坐标 * @param longitude 经度 * @param latitude 纬度 */ public static Map<String, Objec.
  • 2.百度、高德地图坐标导入ARCGIS(WGS84坐标系、GCJ02坐标系、BD09坐标系 互转) 这里使用这个在线工具即可转换称WGS84导入arcgis了 https://tool.lu/coordinate/ #附:百度地图坐标拾取系统用于验证正确性 ...
  • 1.获取真实坐标GPS wgs84转为gcj编码方式 positiontransform(array,manual){ //定义常量 var GPS = { PI : 3.14159265358979324, x_pi : 3.141592...
  • 因为高德百度地图各自有国标转换而来标准体系不一样,百度地图坐标转换高德地图坐标
  • 之前有个问题,就是大疆的坐标系在高德地图上显示发生了偏移,但是好在高德地图提供了坐标转换的API,但是新的问题来了,大疆的坐标适应了高德的坐标系,但是选择航点位置是在高德的地图上,执行却是在大疆的坐标系...
  • 一、坐标分类地图坐标大致分为几种:1、GPS、WGS84,也就是原始坐标体系,这是国际公认的世界标准坐标体系;2、GCJ-02,又称为“火星坐标”,国家测绘局在02年发布的坐标体系,在国内,...二、坐标转换1、使用高德地...
  • 来自:https://blog.csdn.net/wang415229224ye/article/details/79207791 侵删//百度坐标高德(传入经度、纬度) function bd_decrypt(bd_lng, bd_lat) { var X_PI = Math.PI * 3000.0 / 180.0; var x = bd_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 595
精华内容 238
关键字:

高德地图坐标转换