高德SDK获取到的坐标转换为GPS真实坐标方法,Java版

发现高德SDK不提供高德的左边转GPS坐标(GCJ_02转WGS_84),下面是一份Java版的

/****************************
 文件名:GCJ2WGS.java
 创建时间:
 所在包:com
 作者:
 说明:该类的delta方法可以将高德地图SDK获取到的GPS经纬度转换为真实的经纬度。
 ****************************/
package com;

import java.util.HashMap;

public class GCJ2WGS {

	public static void main(String[] args) {

		GCJ2WGS wg = new GCJ2WGS();

		HashMap<String, Double> hm = wg.delta(38.123456,114.654321);

		System.out.println(hm);
	}
	//圆周率 GCJ_02_To_WGS_84
	double PI = 3.14159265358979324;
	/**
	 * @author 作者:
	 * 方法描述:方法可以将高德地图SDK获取到的GPS经纬度转换为真实的经纬度,可以用于解决安卓系统使用高德SDK获取经纬度的转换问题。
	 * @param 需要转换的经纬度
	 * @return 转换为真实GPS坐标后的经纬度
	 * @throws <异常类型> {@inheritDoc} 异常描述
	 */
	public HashMap<String, Double> delta(double lat,double lon) {
		double a = 6378245.0;
		double ee = 0.00669342162296594323;
		double dLat = this.transformLat(lon - 105.0, lat - 35.0);
		double dLon = this.transformLon(lon - 105.0, lat - 35.0);
		double radLat = lat / 180.0 * this.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) * this.PI);
        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI);

        HashMap<String, Double> hm = new HashMap<String, Double>();
        hm.put("lat",lat - dLat);
        hm.put("lon",lon - dLon);

        return hm;
    }
	//转换经度
	public double transformLon(double x, double y) {
		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 * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0;
        return ret;
    }
	//转换纬度
	public double transformLat(double x, double y) {
		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 * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0;
        return ret;
    }

}

  

时间: 2024-10-28 16:22:14

高德SDK获取到的坐标转换为GPS真实坐标方法,Java版的相关文章

iOS-地理坐标转换,原生地图获取的原始坐标转换为地图真实坐标

GPS以及iOS系统定位获得的坐标是地理坐标系WGS1984,Web地图一般用的坐标细是投影坐标系WGS 1984 Web Mercator,国内出于相关法律法规要求,对国内所有GPS设备及地图数据都进行了加密偏移处理,代号GCJ-02,这样GPS定位获得的坐标与地图上的位置刚好对应上,特殊的是百度地图在这基础上又进行一次偏移,所以在处理系统定位坐标及相关地图SDK坐标时需要转换处理下,根据网络资源,目前有一些公开的转换算法. 系统定位坐标显示在原生地图.谷歌地图或高德地图–WGS1984转GC

微信JS-SDK坐标位置转换为百度地图坐标

微信JS-SDK开发过程中,使用getLocation获取坐标位置,如何将微信获取的坐标直接应用到百度地图中,显示以下效果: 说明:红色图标是从微信转换过来的位置,蓝色图标是周边位置.首先从微信开发流程讲解. 1.微信JS-SDK开发文档 首先进入官网的帮助文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN 可对文档进行详细的研读,要获取位置信息,分以下步骤:

高德地图获取当前屏幕中心点的经纬度

公司有个需求就是要随着屏幕的改变而载入附近的商户信息. 那么高德地图获取当前屏幕中心点的经纬度呢? 核心方法:aMap.setOnCameraChangeListener(this); 实现接口: @Override public void onCameraChange(CameraPosition position) { LatLng target = position.target; System.out.println(target.latitude + "jinjin------&quo

地图坐标转换 -- 火星坐标与GPS坐标

第一次处理地理位置的数据的人,没什么经验,往往掉入很多坑浪费不少时间.我也是刚刚从坑里爬出来.这篇博文主要是把入门GPS轨迹分析的经验总结一下,以方便大家少走些弯路. (1)可视化 GPS 路径 刚拿到一堆GPS轨迹数据,想看看它长什么样?于是先想办法把它们可视化出来.有很多地图的API可以用,如果不是想搞演示,只是为了快速随便看一眼的话,推荐用百度的在线示例API  http://developer.baidu.com/map/jsdemo.htm#c1_3  里面有比较详细的例子,很丰富的操

GPS坐标 转 ECEF地球坐标

#include "stdafx.h" #include <math.h> #define  PI 3.14159 /* 该程序主要是实现从GPS坐标转换为地球的三维坐标的函数 */ void GPS2ECEF(double latitude, double longitude, double height, double &X, double &Y, double &Z) { double a = 6378137; double b = 63567

用百度SDK获取地理位置和天气信息

下面实现通过百度SDK获取地理位置和天气信息,请参考百度开发文档 1. 在相关下载最新的库文件.将so文件的压缩文件解压出来,把对应架构下的so文件放入开发者自己APP的对应架构下的文件夹中,建议全部放入, 程序兼容性会大大提升,将locSDK_5.X.jar文件拷贝到工程的libs目录下,这样您就可以在程序中使用百度定位SDK了. 2. 设置AndroidManifest.xml 在application标签中声明service组件,每个app拥有自己单独的定位service <service

iOS关于高德SDK详解和简单使用

根据现在项目需求,地图,定位成了现在app的很常用的一个技术点,现在国内大众化的地图框架个人总结一下,不是很全面,但是大致满足大家的需求. 1,系统自带mapkit框架,这个框架维护性比较高,但是封装起来比较繁杂. 2,第三发SDK,我们一般选择高德或者百度. 下面我来总结一下我用高德SDK的心得,下面来看看使用流程 1,我们先申请一个appkey,申请appkey必须注册高德开发者 2,高德SDK的下载,现在SDK分别有三个库,根据你的app 里面的集成需求,可以选择性的下载添加到自己的工程里

GPS坐标(WGS84)转换百度坐标(BD09) python测试

基础知识坐标系说明: WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系. GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统.由WGS84坐标系经加密后的坐标系. BD09:为百度坐标系,在GCJ02坐标系基础上再次加密.其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标 参考文档: http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition 功能接口主用调用

使用Team Explorer Everywhere (TEE) 2015 SDK获取团队项目的签入策略

TFS的代码签入策略与IDE工具紧密相关,例如Visual Studio中设置的签入策略,只会影响Visual Studio的团队资源管理器:如果需要在Eclipse的TEE中启用签入策略,你还需要在TEE中单独设置.(不仅如此,在数据存储上,二者也不一样,通过查询数控,我们发现TEE的签入策略存储在Collection数据库的表tbl_PropertyValue中,VS则不是). 如果需要统计或查询哪些团队项目启用了什么签入策略,我们可以通过报表或者API的方式编写脚本输出TFS的签入策略设置