热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java中WGS84坐标(ios)转换BD09坐标(百度坐标)

iPhone的GPS定位(CLLocationManager)获得的经纬坐标是基于WGS-84坐标系(世界标准),Google地图使用的是

  iPhone的GPS定位(CLLocationManager)获得的经纬坐标是基于WGS-84坐标系(世界标准),Google地图使用的是GCJ-02坐标系(中国特色的火星坐标系),百度的经纬坐标在GCJ-02的基础上再做了次加密,就是BD-09坐标系。

public class CoordinateConversion {static double x_PI = 3.14159265358979324 * 3000.0 / 180.0;static double PI = 3.1415926535897932384626;static double a = 6378245.0;static double ee = 0.00669342162296594323;/*** 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换* 即 百度 转 谷歌、高德* @param bd_lon* @param bd_lat* @returns {*[]}*/public String bd09togcj02(double bd_lon, double bd_lat){double x = bd_lon - 0.0065;double y = bd_lat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);double gg_lng = z * Math.cos(theta);double gg_lat = z * Math.sin(theta);// Point point=new Point(gg_lng, gg_lat);// return point;return gg_lng+","+gg_lat;}/*** 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换* 即谷歌、高德 转 百度* @param lng* @param lat* @returns {*[]}*/public static String gcj02tobd09(double lng, double lat){double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);double bd_lng = z * Math.cos(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;//Point point=new Point(bd_lng, bd_lat);// return point;return bd_lng+","+bd_lat;};/*** WGS84转GCj02* @param lng* @param lat* @returns {*[]}*/public static String wgs84togcj02(double lng, double lat){double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 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);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);double mglat = lat + dlat;double mglng = lng + dlng;//Point point=new Point(mglng, mglat);// return point;return mglng+","+mglat;};/*** GCJ02 转换为 WGS84* @param lng* @param lat* @returns {*[]}*/public String gcj02towgs84(double lng, double lat){double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 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);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);double mglat = lat + dlat;double mglng = lng + dlng;// Point point=new Point(mglng, mglat);// return point;return mglat+","+mglng;};/*** WGS84 转换为 BD-09* @param lng* @param lat* @returns {*[]}* */private static String wgs84tobd09(double lng, double lat){//第一次转换double dlat = transformlat(lng - 105.0, lat - 35.0);double dlng = transformlng(lng - 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);dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);double mglat = lat + dlat;double mglng = lng + dlng;//第二次转换double z = Math.sqrt(mglng * mglng + mglat * mglat) + 0.00002 * Math.sin(mglat * x_PI);double theta = Math.atan2(mglat, mglng) + 0.000003 * Math.cos(mglng * x_PI);double bd_lng = z * Math.cos(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;return bd_lng+","+bd_lat;}private static double transformlat(double lng,double lat){double ret= -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;return ret;}private static double transformlng(double lng,double lat){double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;return ret;}public static void main(String[] args) {// 两次谷歌转换为百度坐标// 第一次 WGS84转GCj02String lnglat=wgs84togcj02(117.20296517261839,31.841652709281103); double lng=Double.parseDouble(lnglat.split(",")[0]);double lat=Double.parseDouble(lnglat.split(",")[1]);System.out.println("第一次转换的结果:"+lng+","+lat);// 第二次 gcj02tobd09System.out.println("第二次转换的结果:"+gcj02tobd09(lng,lat));// 谷歌转百度一次转换System.out.println("谷歌转换为百度一次转换的结果:"+wgs84tobd09(117.20296517261839,31.841652709281103));}
}

项目中遇到的问题,以做笔记。原文链接:https://blog.51cto.com/11964104/2121131

转:https://www.cnblogs.com/qiantao/p/10929736.html



推荐阅读
  • 在MirrorAPI中,我们可以使用以下内容: ... [详细]
  • LwIP系列内存管理(堆内存)详解
    一、目的小型嵌入式系统中的内存资源(SRAM)一般都比较有限,LwIP的运行平台一般都是资源受限的MCU。为了能够更加高效的运行ÿ ... [详细]
  • UILabel的混合显示动画效果
    UILabel的混合显示动画效果 ... [详细]
  • IDEA实用插件Lombok
    LombokLombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。通常,我们所定义的对象和b ... [详细]
  • RHEL/CentOS/Fedora Linux命令下安装Google Chrome
    键入以下命令查看当前版本是32还是64$echoYouareusing$(getconfLONG_BIT)bitLinuxdistro.You64 ... [详细]
  • Shiro 简单了解
    Shiro简单了解简单用过SpringSecurity安全框架后,再试试另一个安全框架——Shiro。1.Shiro简介ApacheShiro是一个强大且易用的Java安全框架:S ... [详细]
  • 问题描述  编写一个程序,输入一个1000以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。  输入格式:输 ... [详细]
  • 智能家庭如何摆脱“伪智能”困境?
      文/宿命在纠结:2014-12-04  智能家庭是今年超级火爆的领域,一波波的硬件层出不穷,从智能路由、智能摄像头、智能插座、智能空调到最近又开始兴起的智能空气净化器,不过大多 ... [详细]
  • IOSUITableView解析(一)
    UITableView的作用由于Iphone的大小有限,所以UITableView的作用是巨大的。比如QQ,微博等应用都用到了该控件。UITableVi ... [详细]
  • 如果您想到达任何地方,就一定不要害怕探索。我的背景我在2001年只有4岁。那是我第一次使用计算机“联机”的时候。从一开始我就一直是一个好奇的孩子。我知道如何建立拨号连 ... [详细]
  • 随身wifi数据漫游(随身wifi数据漫游干嘛用的)
    行走的种草机李佳琦最近带员工前往普吉岛旅游,在这期间他也没有忘记自己种草大户的身份,在vlog中倾情推荐了“漫游超人”随身wifi。很多李佳琦的忠粉们顿时坐不住了,心都要跟着一哥飞 ... [详细]
  • 开发笔记:携程2019校招编程题
    本文由编程笔记#小编为大家整理,主要介绍了携程2019校招编程题相关的知识,希望对你有一定的参考价值。携程今年的机试题为20道选择+3编程由于今天最后提交时第三题 ... [详细]
  • 用户体验这点事儿
    2009-02-1518:03byMainz,3366visits,网摘,收藏,编辑用户体验设计最近比较热,从以前的轻视UI到现在不管是桌面软件还是网站都开始关注用户 ... [详细]
  • 微信小程序发布引起轰动
    首页资讯人物态度新闻段子知识产品公司活动专题黑镜物是No!登录为什么微信深夜发布的“小程序”引动了开发者的大地震?盛威12小时前新闻传说中的微信“应用号”终于要来了& ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
author-avatar
fengzi199171
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有