Java地图坐标转换

地图坐标转换

最近涉及到地图坐标的转换,开始深入了解了一下。不同的使用的坐标系,不同的坐标系使用的标准不一样,导致不同的地图同一地点的经纬度偏差很大。



前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、坐标系

1.概念

坐标系统:用于定位的系统,就跟二维笛卡尔坐标系统一样,一个点使用(x,y),就能确定该点在笛卡尔坐标系统中的唯一位置。这里讲的坐标系统,相对于笛卡尔坐标系统,要复杂许多,但作用却都是一样,主要用于定位,也就是精确地定位地表上的一点。
地理坐标系统:WGS84就是一种地理坐标系统。地理坐标坐标是对地球进行简单几何建模,比如将地球看成一个球体或者类球体,然后再将地表上点投影到该球面上形成的坐标就是地理坐标系统。WGS84就是定义了如何将地球抽象成球体或者类球体的规则。或者简单地来说,WGS84就是一堆参数,用于建立球体或者类球体,来近似地球。
投影坐标系统:由于地球是一个球状,所以一般将其某个区域投影在平面上,形成的坐标系称为投影坐标系。

注:
WGS84 :地理坐标系统,Google Earth和中国外的Google Map使用,另外,目前基本上所有定位空间位置的设备都使用这种坐标系统,例如手机的GPS系统。
GCJ-02:投影坐标系统,也就是我们平常所说的火星坐标系,Google Map中国、高德和腾讯好像使用,这个是中国自己在WGS84基础上加密而成,目的显而易见。
BD09:投影坐标系统,百度地图使用,在GCJ-02基础上二次加密而成

2.不同地图使用的坐标系

地图 坐标系
百度地图API 百度坐标
百度地图API 百度坐标
腾讯搜搜地图API 火星坐标
搜狐搜狗地图API 搜狗坐标
阿里云地图API 火星坐标
图吧MapBar地图API 图吧坐标
高德MapABC地图API 火星坐标
灵图51ditu地图API 火星坐标

3.转换

3.1 算法转换

public class GPS {
   
    private double lat;
    private double lon;

    public GPS(double lat, double lon) {
   
        this.lat = lat;
        this.lon = lon;
    }

    public double getLat() {
   
        return lat;
    }

    public void setLat(double lat) {
   
        this.lat = lat;
    }

    public double getLon() {
   
        return lon;
    }

    public void setLon(double lon) {
   
        this.lon = lon;
    }

    public String toString() {
   
        return "lat:" + lat + "," + "lon:" + lon;
    }
}

/**
 * 坐标转换工具类
 * WGS84: Google Earth采用,Google Map中国范围外使用
 * GCJ02: 火星坐标系,中国国家测绘局制定的坐标系统,由WGS84机密后的坐标。Google Map中国和搜搜地图使用,高德
 * BD09:百度坐标,GCJ02机密后的坐标系
 * 搜狗坐标系,图吧坐标等,估计也是在GCJ02基础上加密而成的
 */
public class GPSConverterUtils {
   
    public static final String BAIDU_LBS_TYPE = "bd09ll";
    public static double pi = 3.1415926535897932384626;
    public static double a = 6378245.0;
    public static double ee = 0.00669342162296594323;

    /**
     * 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System
     * @param lat
     * @param lon
     */
    public static GPS gps84_To_Gcj02(double lat, double lon) {
   
        if (outOfChina(lat, lon)) {
   
            return null;
        }
        double dLat = transformLat(lon - 105.0, lat - 35.0)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值