Android开发:WGS-84、GCJ02坐标名词解释及坐标转换

火星坐标系 (GCJ-02) 与百度坐标系 (BD-09ll) 简介及转换算法 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 阅读详情
AI摘要

本文详细解析了WGS-84与GCJ-02坐标系的概念,阐述了两者之间的转换原理与方法,提供了Android项目中实用的坐标转换代码。

                        WGS-84、GCJ02坐标名词解释及坐标转换

 

目录

一、什么是WSG-84坐标系?

二 、什么是GCJ-02坐标系?

三、GCJ-02坐标系使用场景

四、函数说明

五、工具类代码


注:本文仅包含国测局(GCJ02)坐标转换成基于WGS-84坐标系的GPS坐标的方法 

一、什么是WSG-84坐标系?

WGS-84是为GPS全球定位系统使用而建立的坐标系统,属于国际上使用的坐标系,又称为原始坐标系,也是GPS最原始的并且最能反映真实坐标点的坐标系。

 

二 、什么是GCJ-02坐标系?

GCJ-02坐标系又名“火星坐标系”,是我国国测局独创的坐标体系,由WGS-84加密而成。

 

三、GCJ-02坐标系使用场景

我国要求,任何一个地图产品至少要使用“ GCJ-02 ” 进行首次加密,不允许直接使用原始坐标体系。高德、腾讯等都是用的这个坐标系。百度地图是在使用GCJ-02 加密的基础上,又通过自己的加密算法BD-09 又对坐标进行了二次加密。谷歌地图在国外是WGS-84坐标系,但在国内是使用GCJ-02坐标系。

 

这里我总结了一下国测局(GCJ02)坐标转换成基于WGS-84坐标系的GPS坐标的方法,大家可以在Android项目中直接使用。封装的方法已经经过验证,并且在项目中一直在使用,大家可以放心使用。

 

四、函数说明

 GCJ2WGSLat函数

  • 输入:GCJ-02坐标系的经纬度
  • 输出:WGS-84坐标系的纬度

GCJ2WGSLon函数

  • 输入:GCJ-02坐标系的经纬度
  • 输出:WGS-84坐标系的经度

 

五、工具类代码


import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;


public class LocationUtils {


    public static boolean isLocationEnabled(Context context) {
        int locationMode = 0;
        String locationProviders;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            try {
                locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
            } catch (Settings.SettingNotFoundException e) {
                e.printStackTrace();
                return false;
            }
            return locationMode != Settings.Secure.LOCATION_MODE_OFF;
        } else {
            locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            return !TextUtils.isEmpty(locationProviders);
        }
    }

    /**
     * GCJ02(火星坐标系)转GPS84
     * 输入GCJ经纬度 转WGS纬度
     */

    public static double GCJ2WGSLat(double lat, double lon) {
        double PI = 3.14159265358979324;//圆周率
        double a = 6378245.0;//克拉索夫斯基椭球参数长半轴a
        double ee = 0.00669342162296594323;//克拉索夫斯基椭球参数第一偏心率平方
        double dLat = transformLat(lon - 105.0, lat - 35.0);
        double radLat = lat / 180.0 * PI;
        double magic = Math.sin(radLat);
        magic = 1 - ee * magic * magic;
        double sqrtMagic = Math.sqrt(magic);
        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI);
        return (lat - dLat);
    }

    /**
     * GCJ02(火星坐标系)转GPS84
     * 输入GCJ经纬度 转WGS经度
     */

    public static double GCJ2WGSLon(double lat, double lon) {
        double PI = 3.14159265358979324;//圆周率
        double a = 6378245.0;//克拉索夫斯基椭球参数长半轴a
        double ee = 0.00669342162296594323;//克拉索夫斯基椭球参数第一偏心率平方
        double dLon = transformLon(lon - 105.0, lat - 35.0);
        double radLat = lat / 180.0 * PI;
        double magic = Math.sin(radLat);
        magic = 1 - ee * magic * magic;
        double sqrtMagic = Math.sqrt(magic);
        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * PI);
        return (lon - dLon);
    }

    //转换经度所需
    public static double transformLon(double x, double y) {
        double PI = 3.14159265358979324;//圆周率
        double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
        ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0;
        return ret;
    }

    //转换纬度所需
    public static double transformLat(double x, double y) {
        double PI = 3.14159265358979324;//圆周率
        double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
        ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin(y / 12.0 * PI) + 320 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0;
        return ret;
    }


}

 

 

地图坐标系之间的转换(百度地图、GCJ、WGS84) 文章目录文章参考坐标系介绍常见坐标系WGS84坐标系(标准的GPS坐标)WGS84 Web墨卡托(平面地图)GCJ02经纬度投影(火星坐标系)GCJ02 Web 墨卡托投影BD09 经纬度投影常用坐标系区分?地图偏移为什么要地图偏移?偏移在哪里?地图做了偏移,为什么地图定位很精准(百度地图说明)坐标转换为什么要做坐标转换地图服务(后台地图引擎可提供的能力)TMS——Tile Map Service 即TMS,切片地图服务WMTS——Web Map Tile Service即WMTS,网络地图切片服务,WMS 阅读详情

相关推荐

Android中第三方SDK集成之高德地图集成指南(Hello GaodeMap显示高德地图简单教程)

Android中第三方SDK集成之高德地图集成指南(Hello GaodeMap显示高德地图简单教程),详细了解请移步http://blog.youkuaiyun.com/zxc514257857/article/details/69940712

GIS小知识-由对GCJ-02的疑问引出的坐标系相关概念

在介绍GCJ-02之前,我们先了解一下常见关于坐标系的术语。

孙霸天的专栏 6098

手把手教你用运放和基准源,把±10V信号变成ADC能吃的0-4V(附完整计算过程)

本文详细介绍了如何利用OP07运放和REF5040基准源设计工业级信号调理电路,将±10V传感器信号转换为0-4V ADC可接受范围。通过七步流程,包括需求分析、元器件选型、电路设计、理论计算、PCB布局、实测验证与性能优化,帮助工程师解决信号不匹配问题,提升系统精度与稳定性。

weixin_28731223的博客 467

WGS84、GCJ02、BD09和CGCS2000地理坐标系详解

在WGS84、GCJ-02、BD-09和CGCS2000坐标系之间的转换中,6度分带和3度分带的参数并不直接使用,因为这些转换主要是地理坐标系之间的转换,而不是投影坐标系之间的转换。在直接进行WGS84、GCJ-02、BD-09和CGCS2000地理坐标系之间的转换时,不涉及平面坐标系(如高斯-克吕格或UTM)的转换,因此不需要使用6度分带和3度分带的参数。BD-09(百度坐标系)是百度公司推出的一种地理坐标系统,它基于GCJ-02(火星坐标系)进行进一步的加密和偏移处理。(见文章末尾的示例)

qq_42837317的博客 7966

AES128加密算法开发(含源码)

本文详解了AES128加密算法的原理与C语言实现。AES128是当前广泛使用的对称加密标准,采用128位密钥和10轮变换,具有高安全性和高效性。文章从算法背景、核心概念(混淆与扩散)入手,详细解析了4×4状态矩阵表示、4个核心变换(字节替换、行移位、列混合、轮密钥加)以及密钥扩展过程。特别针对汽车电子应用场景,如ECU通信加密、车钥匙认证等,说明了AES128在资源受限环境中的优势。通过分步图解和原理剖析,帮助开发者深入理解这一加密标准的技术细节与实现方法。

汽车电子软件开发笔记 2917

FreeRTOS移植实战:从零开始在STM32上搭建多任务系统(含Proteus仿真配置)

本文详细介绍了如何在STM32平台上从零开始移植FreeRTOS,并搭建多任务系统,包含Proteus仿真配置。通过环境准备、源码移植、多任务设计到仿真调试的全流程实战,帮助开发者快速掌握FreeRTOS在STM32上的应用技巧,提升嵌入式开发效率。

weixin_33737134的博客 232

中国国测局地理坐标(GCJ-02)、世界标准地理坐标(WGS-84) 、百度地理坐标(BD-09)坐标系转换

YJLocationConverter中国国测局地理坐标(GCJ-02)<火星坐标>、世界标准地理坐标(WGS-84) 、百度地理坐标(BD-09)坐标系转换工具类需求一、在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84

hou_manager的博客 2万+

从零编写linux0.11 - 第二章 内核初始化

编程环境:Ubuntu Kylin 16.04 代码仓库:https://gitee.com/AprilSloan/linux0.11-project linux0.11源码下载(不能直接编译,需进行修改) 1.添加内核 进入内核后也不是马上进入main函数,上一章只是暂时设置gdt,此外还要设置idt和其他的一些初始化操作,这些内容也要使用汇编进行编写,此处采用AT&T格式的汇编。 以下为head.s的内容,为了简单起见,内容还是一个死循环。 .globl startup_32 startup_3

皓空Fly的博客 1265

[GIS] 火星坐标GCJ-02的实质 | 高德地图的实际坐标系

GCJ02的性质 【百度定义】上图所说,GCJ02的性质是地理信息系统的坐标系统 【思考】 看百度给出的,GCJ02的核心动作是:对经纬度数据进行加密。说明GCJ-02只是一种算法,把现成的经纬度进行了一个偏移,它并不是一个坐标系统 坐标系统:狭义的谈,坐标系统是有自己的一套基准和参数的,而GCJ-02并没有自己的基准面和参数 博主也没有找到任何关于所谓“GCJ02坐标系”的参数和基准面 【...

geodoer 1万+

OpenMythos深度解析

本文深入解析了kyegomez/OpenMythos项目如何从第一性原理重建Claude Mythos的核心架构。该项目并非直接复制Claude,而是基于公开论文和实验结果推测其可能的设计理念,构建了包含多模态注意力、深度推理引擎、知识检索模块等六大核心组件的模块化架构。重点剖析了分组查询注意力(GQA)的实现细节,展示了KV头扩展等关键技术。该项目已成为大模型开源社区最受关注的研究之一,为理解Claude的架构思想提供了有价值的参考。

Crown_22的博客 518

真题库系列之 CCF GESP 2025年12月认证 Python 1级真题含正确答案与解析

学生通过计算机基础知识的学习,了解计算机的构成与操作,以及计算机的发 展历程。通过编程基础知识以及语句的掌握,可以独立完成简单功能的顺序结构、 分支结构、循环结构的程序。

iCloudEnd的博客 317

坐标系:

上海路地铁站坐标—汉中路与上海路交叉口 高德:118.776225,32.042297 百度地图:118.782766,32.048434 google离线数据,gaode离线数据,可以共同使用高德离线点数据,看起来无偏差。 baidu离线数据,无论使用高德点数据还是百度点数据都有偏差,叠加openlayer,使用3857坐标系 ...

longshiyue2的博客 6124

自动驾驶系统研发系列—全智能驾驶新高度:深入解析车道保持辅助(ELK)功能

车道保持辅助系统(ELK)是一种基于先进视觉感知技术的主动安全系统,能够通过车载摄像头实时监测道路上的车道线、道路边缘以及周围车辆的位置。这一功能的核心在于为驾驶员提供智能化的安全辅助,尤其是在驾驶员可能因疲劳、分心或其他原因无意识地偏离车道时,系统能够主动干预,从而避免危险发生。ELK系统不仅仅依靠摄像头对道路进行感知,还结合其他传感器的数据(如雷达),实时评估自车与车道线、周边车辆的相对位置。当系统检测到车辆即将偏离车道,或越过道路边缘时,ELK会通过控制电子助力转向系统(EPS)

u013889591的专栏 1211

【GIS - 地理信息系统】WGS 84 坐标系和 GCJ-02 坐标加密偏移 ( 大地坐标系 和 加密坐标系 | WGS 84 坐标体系简介 | GCJ-02 坐标加密偏移 )

一、WGS 84 坐标系和 GCJ-02 坐标加密偏移 1、大地坐标系 和 加密坐标系 大地坐标系 加密坐标系 2、WGS 84 坐标体系简介 坐标加密 WGS 84 由来 经度和纬度 WGS 84 应用场景 坐标和精度转换 3、GCJ-02 坐标加密偏移

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2万+

DeepSeek揭秘:构建高效反洗钱智能监控系统的全流程与代码实例

在金融领域,反洗钱(AML)是一项至关重要的任务。随着金融交易的复杂性和规模不断增长,传统的手工监控方法已无法满足现代金融系统的需求。因此,开发一个智能监控系统来自动识别和报告可疑交易变得尤为重要。本文将详细介绍如何使用DeepSeek技术构建一个高效的反洗钱智能监控系统,并提供相关的代码实例。

理论都是虚的,代码才是王道。 884

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WGS84、GCJ-02、BD09三大坐标系详解

WGS84、GCJ-02、BD09三大坐标系详解

weixin_42326851的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

地图坐标转换

坐标间进行转换

jxj960417的博客 5528

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

GCJ-02转WGS84

1.准备数据 (注意:经纬度格式是数值类型 数据-分列-常规),另存为xlsx格式 2.打开excel2json软件转换,另存为json 3.将json复制到arr变量下,执行坐标转换 &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;

傲骨雄风的博客 2万+

什么是GCJ02火星坐标系

概述 在谷歌还没有发布谷歌地图时,在GIS领域常见的坐标系主要有WGS84经纬度坐标、北京54坐标或西安80坐标等;但自从谷歌地图发布之后,其海量的高清卫星免费影像是让整个GIS领域为之震惊的,但同时也为安全问题带来了一定的隐患。为了对实际坐标进行加密,于是国测局研究了一套算法,凡是公开发布的商业互联网地图,一定要在此加密算法的基础上进行发布,这样一来地图的坐标就与实地的坐标不相符了,于是大家把...

3331

84坐标系、02坐标系、百度坐标之间相互转换算法

提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换。包含84坐标系、02坐标系、百度地图、高德地图、腾讯地图坐标之间相互转换的算法

日拱一卒无有尽,功不唐捐终入海 1万+

GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)

地理信息系统 (GIS) 是一个创建、管理、分析和绘制所有类型数据的系统。GIS 将数据连接到地图,将位置数据(事物所在位置)与所有类型的描述性信息(事物在该位置的情况)集成到一起。这可以为适用于自然科学和几乎所有行业的制图和分析提供基础。GIS 帮助用户了解模式、关系和地理环境。其优势包括改善沟通、提高效率以及更好地管理和决策。解决使用百度webAPI坐标转换时的问题:X→GPS根据法律规定,不支持将任何类型的坐标转换为GPS坐标;

挖掘大数据价值,让决策者快速洞悉趋势,让大众读懂数据背后的故事。 2万+

地图坐标系整理

1 经纬度(+高度) (1)WSG84(EPSG4326)用于gps、rtk等,经纬度格式,单位为度。CGCS2000几乎和WSG84一样,2000年中国对84年的地球测绘的一次更新。 (2)GCJ-02是由中国国家测绘局(G表示国家,C表示测绘,J表示局)制订的地理信息系统的坐标系统。是国测局02年发布的坐标体系。又称“火星坐标”。这里的GCJ02经纬度投影,也就是在WGS84经纬度的基础之上,进行GCJ-02加偏。加偏处理是按照特殊的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所

weixin_41965898的博客 3235

三种地球坐标系的区别

根据经纬度查地理位置:http://www.gpsspg.com/latitude-and-longitude.htm (感谢xiaoxiao帮忙答疑解惑) WGS-84:是国际标准,GPS坐标(GoogleEarth使用、或者GPS模块) GCJ-02:中国坐标偏移标准,GoogleMap、高德、腾讯使用 BD-09:百度坐标偏移标准,BaiduMap使用 具体解释: WG...

yuxeaotao的博客 1万+

GCJ-02火星坐标系和WGS-84坐标系转换关系

WGS-84:GPS坐标系 GCJ-02:火星坐标系,国测局02年发布的坐标体系,高德,腾讯等使用。 BD-09:百度坐标系,百度自研,百度地图使用。 GCJ-02 转WGS-84 公式 # -*- coding: utf-8 -*- import json import math x_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897932384626 # π a = 6378245.0 # 长半轴 ee = 0.00

u010227042的博客 9429

【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解)

【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解)

Mike Zhou的博客 1647

四、GCJ02坐标系

与GCJ02 Web 墨卡托投影

zhoulong_giser 1万+
上一篇: Android开发:操作文件工具类封装
下一篇: Flutter:构建Android项目时,卡在Running Gradle task 'assembleDebug'...
android157
博客等级 码龄9年 193粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值