android常用地图坐标转换
1.常用坐标类型
BD09-百度坐标
GCJ-02-火星坐标/国测局坐标/国内坐标/投影坐标
WGS84-国际坐标/GPS坐标/地球坐标/地理坐标
2.坐标常识(自己补充的知识,不想看的跳过)
BD09等时地图厂商通过自己的加密算法再次加密的GCJ-02坐标,和真实坐标约相差百米
GCJ-02是国际加密WGS84坐标,原用于纸质平面地图
WGS84是真实坐标,一般不会直接使用,但所有地图坐标都能与之直接转换。
3.坐标对应地图
BD09
百度地图GCJ-02
谷歌地图,soso地图,腾讯地图,高德地图,阿里云地图,灵图地图搜狗坐标
搜狐搜狗地图图吧坐标
图吧地图
4.转换(坐标系转换)
注意,WGS84是真实坐标,此坐标不会被直接使用。
火星坐标和百度坐标的相互转换
以下摘自:https://www.2cto.com/kf/201608/537533.html
/*** 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标* * @param gg_lat* @param gg_lon* @return*/public static Gps gcj02_To_Bd09(double gg_lon, double gg_lat) {double x = gg_lon, y = gg_lat;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 Gps(bd_lon, bd_lat);}/*** 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 BD-09 坐标转换成GCJ-02 坐标 * * @param bd_lon* @param bd_lat* @return*/public static Gps bd09_To_Gcj02(double bd_lon, double bd_lat) {double x = bd_lon - 0.0065, y = bd_lat - 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 Gps(gg_lon, gg_lat);}//Gps类public static class Gps {public double lat;public double lon;public Gps(double lon, double lat) {this.lat = lat;this.lon = lon;}public void print() {System.out.println(this.lon + "," + this.lat);}}
搜狗坐标转换真实坐标(这方面资料比较少,只找到一个网页端的代码,有兴趣的参考一下,我这里就不贴了)
http://blog.csdn.net/zeeeitch/article/details/51479353
图吧坐标和gps坐标的转换没有找到
百度坐标,火星坐标转真实坐标
这是商业机密,有其他人推导的算法,只在知乎上找到了一段python代码,因为不是博客,时效比较短,所以贴一下。可以作为参考:
https://www.zhihu.com/question/55755503/answer/163519277
import math
import json
#椭球体参数设置
x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626 # π
a = 6378245.0 # 长半轴
ee = 0.00669342162296594323 # 扁率
def bd09togcj02(bd_lon, bd_lat):
"""
百度坐标系(BD-09)转火星坐标系(GCJ-02)
:param bd_lat:百度坐标纬度
:param bd_lon:百度坐标经度
:return:转换后的坐标列表形式
"""
x = bd_lon - 0.0065
y = bd_lat - 0.006
z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi)
theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi)
gg_lng = z * math.cos(theta)
gg_lat = z * math.sin(theta)
return [gg_lng, gg_lat]def gcj02towgs84(lng, lat):
"""
GCJ02(火星坐标系)转GPS84
:param lng:火星坐标系的经度
:param lat:火星坐标系纬度
:return:
"""
#if out_of_china(lng, lat):
# return lng, lat
dlat = transformlat(lng - 105.0, lat - 35.0)
dlng = transformlng(lng - 105.0, lat - 35.0)
radlat = lat / 180.0 * pi
magic = math.sin(radlat)
magic = 1 - ee * magic * magic
sqrtmagic = math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
mglat = lat + dlat
mglng = lng + dlng
return [lng * 2 - mglng, lat * 2 - mglat]def transformlat(lng, lat):
ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + \
0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(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 retdef transformlng(lng, lat):
ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + \
0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(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 retlng = 128.543
lat = 37.065
result2 = bd09togcj02(lng, lat)
print result2
#读取位置数据
import xlrdalldata= xlrd.open_workbook(r'C:\Users\Administrator\Desktop\20170321.xlsx')table = alldata.sheets()[0]
lngall=table.col_values(20)[1:len(table.col_values(20))]
latall=table.col_values(21)[1:len(table.col_values(21))]
#百度坐标转火星坐标
lngcj02=[]
latcj02=[]
for i in range(0,len(lngall)):
temp=bd09togcj02(lngall[i],latall[i])
lngcj02.append(temp[0])
latcj02.append(temp[1])
#火星坐标转WGS84
lng84=[]
lat84=[]
for i in range(0,len(lngcj02)):
temp=gcj02towgs84(lngcj02[i],latcj02[i])
lng84.append(temp[0])
lat84.append(temp[1])
#保存文件
import csv
csvfile=file('C:\Users\Administrator\Desktop\location.csv','wb')
writer = csv.writer(csvfile)
writer.writerow(['longitude','latitude'])
data = [ lng84,lat84]
writer.writerows(data)
csvfile.close()
print 'end'
android常用地图坐标转换相关推荐
- android常用地图坐标转换,室内地图Android 坐标转换说明 - 蜂鸟云
坐标转化工具说明 Fengmap Android SDK支持定位坐标转换Fengmap坐标的功能. 坐标系说明 Fengmap地图坐标系为全球坐标系统,全球坐标系统下地理元素具有唯一的控件位置.真实的 ...
- Android 高德地图坐标转换
1.其他坐标系转到高德坐标系 支持GPS/Mapbar/Baidu等多种类型坐标在高德地图上使用.参见类CoordinateConverter. CoordinateConverter convert ...
- java常用地图坐标系转换工具类,支持谷歌,腾讯,百度等主流的地理坐标转换
package com.shen.springboot.redis.util;import java.util.ArrayList; import java.util.HashMap; import ...
- android百度地图单点定位_Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡...
一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...
- android 地球坐标 火星坐标系,Android LBS地图开发:地球地理GPS坐标系经纬度偏移偏差...
Android LBS地图开发基础知识之地球地理GPS坐标系经纬度偏移偏差 通常,我们所说的地球地理经纬度是WGS-84坐标系(World Geodetic System-1984 Coordinat ...
- Android 高德地图(带有定位和点击显示经度纬度)
Android高德地图测试,如下: 1.Android高德地图Demo地址下载: 下载android高德地图Demo 1.2 Android定位SDK 一键下载 1.3 下载好的文件zip ...
- Android常用面试题大全
1.TCP和UDP之间的区别?什么是URL ? TCP被称为用户数据报协议;UDP被称为信息传输控制协议;URL被称为统一资源定位符,通过统一资源定位符可以唯一定位到互联网上的某个资源(图片.视频.音 ...
- Android学习--02(猜猜我的星座App源码+Android常用控件TextView+EditText+Button+ImangeView+DatePicker+App间通信+跳转页面)
猜猜我的星座App 1 Android常用控件 1.1 TextView控件 1.1.1 简介 1.1.2属性 1.1.3 扩展属性 1.1.4 TextView的使用方法 1.1.5总结 1.2 E ...
- android 常用框架整理
文章目录 UI 框架 WebView 框架 具体内容 UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其他 动画 网络相关 网络连接 网络测试 图像获取 响应式编程 地图 ...
- Android 常用开发功能 博客导航
转载地址:http://blog.csdn.net/ciqing123/article/details/52931663?locationNum=16&fps=1 简介:第一次在CSDN上发表 ...
最新文章
- ubuntu 用命令行设置chrome的proxy
- 广西大学计算机科学与技术中法,广西大学
- python常用异常处理
- r语言参数fig=c(),干货︱R语言绘图—基础图形参数整理
- 第三次学JAVA再学不好就吃翔(part105)--流的标准处理异常
- Ubuntu18.04.4 环境下对属性加密算法CP-ABE环境搭建
- 程序员跳槽的7个常见理由,最后一个有人能看懂吗!
- android学习笔记---34_Activity的启动模式
- Python并发编程之多进程(实战)
- Canvas对画布及文字控制基础API学习
- Expo大作战(三十八)--expo sdk api之 FileSystem(文件操作系统)
- 泛微OA与SAP通过webservice方式对接数据完整操作
- 斐波那契(黄金分割法)查找算法(FibonacciSearch)
- 10分钟教你阿里云环境下搭建iredmail邮件服务器
- python:实现恩尼格玛密码机算法(附完整源码)
- 成人python线上培训机构_哪些成年人正通过在线教育平台学习?看这个大数据报告就知道...
- 动态规划---买卖股票的最佳时机
- 2021年北航计算机学院夏令营面试经历
- VScode与VSstdio差别该如何选择C语言IDE(集成开发环境)
- 高速公路 (highway)