您的位置:

GCJ-02坐标系的详细解析

一、GCJ-02坐标是什么?

GCJ-02又被称为火星坐标系,是一种对地理坐标的保密加密算法,被中国国家测绘、地理信息局和地方政府采用。GCJ-02坐标通过对WGS-84坐标进行随机偏移,达到了保密的目的。此坐标系的偏差大约在50-500米之间。

二、百度地图能设置使用GCJ-02坐标吗?

在国家法规下,未经授权人同意使用GCJ-02坐标是违法的,因此百度地图不支持直接设置GCJ-02坐标。但是,很多第三方地图库支持GCJ-02坐标,因此如果应用程序要使用GCJ-02坐标,需要使用第三方地图库。

三、GCJ-02坐标系和80坐标系

GCJ-02坐标系的误差和80坐标系的误差大小差不多,但是由于GCJ-02坐标系的误差不稳定,因此无法确保同一位置的坐标在不同时间和设备上的一致性。与此相比,80坐标系的误差稳定,同一位置的坐标保持一致性。

四、奥维地图的GCJ-02坐标点

奥维地图使用GCJ-02坐标系,提供了高精度的地图和路线规划功能。在奥维地图中,用户可以通过直接输入GCJ-02坐标点来获取位置和路径信息。

五、GCJ-02坐标和WGS84坐标的区别

GCJ-02坐标系和WGS84坐标系之间存在一定的差异,主要表现在以下方面:

  • GCJ-02坐标系不是真正的地理坐标系,而是通过加密算法得到的似地理坐标系;
  • GCJ-02坐标系的误差比WGS84坐标系大,同一位置的坐标可能存在一定程度的偏差;
  • GCJ-02坐标系仅限于在中国境内使用,而WGS84坐标系适用于全球范围内的地理坐标。

六、GCJ-02坐标和CGCS2000

GCJ-02坐标和CGCS2000是两种不同的坐标系,各自有自己的特点和应用场景。CGCS2000是新一代国家测量标准坐标系,是由国家测绘局制定的坐标系统,适用于大陆、澳门、香港等地区的地理坐标,精度很高。而GCJ-02坐标系是一种无标准的自主发展的坐标系,主要用于中国本土的GPS定位和地图服务。因此,在不同的应用场景下,选择合适的坐标系非常重要。

七、经纬度GCJ-02

/**
* 经纬度转GCJ-02坐标
*/
public static LatLng convertWGS84ToGCJ02(LatLng wgs84LatLng) {
    if (outOfChina(wgs84LatLng.latitude, wgs84LatLng.longitude)) {
        return wgs84LatLng;
    }
    double dLat = transformLat(wgs84LatLng.longitude - 105.0, wgs84LatLng.latitude - 35.0);
    double dLon = transformLon(wgs84LatLng.longitude - 105.0, wgs84LatLng.latitude - 35.0);
    double radLat = wgs84LatLng.latitude / 180.0 * Math.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) * Math.PI);
    dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * Math.PI);
    double lat = wgs84LatLng.latitude + dLat;
    double lng = wgs84LatLng.longitude + dLon;
    return new LatLng(lat, lng);
}

八、GCJ是什么意思的缩写?

GCJ的全称是“国测局加密”,是指由中国国家测绘局研发的一种测量坐标加密技术,旨在保护国家安全。GCJ-02坐标系是GCJ加密算法应用于位置服务的一种表现形式。

九、GCJ-02坐标转2000

/**
* GCJ-02坐标转国家2000坐标系
*
* @param lon GCJ-02坐标中的经度值
* @param lat GCJ-02坐标中的纬度值
*/
public static Point convertGCJ02To2000(double lon, double lat) {
    double dx = transformLon(lon - 105.0, lat - 35.0);
    double dy = transformLat(lon - 105.0, lat - 35.0);
    double b = lat / 180 * Math.PI;
    double eSq = (a * a - bNg * bNg) / (bNg * bNg);
    double v = a / Math.sqrt(1 - eSq * Math.sin(b) * Math.sin(b));
    double aa = a + dx;
    double bb = (1 - eSq) * v + dy;
    double d = Math.sqrt(aa * aa + bb * bb);
    double theta = Math.atan2(bb, aa);
    double alpha = Math.atan2(bb, aa) - Math.atan2((1 - eSq) * bNg * Math.sin(theta), d);
    double a1 = Math.atan2(Math.sin(alpha), Math.cos(theta));
    double a2 = Math.asin(Math.sin(b) * Math.cos(alpha) + Math.cos(b) * Math.sin(alpha) * Math.cos(theta));
    double l = a2 * 180 / Math.PI;
    double l1 = a1 * 180 / Math.PI + 119.0;
    double x = l1 * 1000000 + 1500000;
    double y = l * 1000000 + 278078.99;
    return new Point(x, y);
}

十、GCJ-02坐标和2000年国家坐标系选取

在实际应用中,需要根据不同的应用场景,选择合适的坐标系。如果需要在国内进行位置服务和地图服务,可以选择GCJ-02坐标系;如果需要进行更高精度的测量和制图,可以采用2000年国家坐标系。