中国における地理的データの制限

GCJ-02

GCJ-02 (別名 火星座標系)は国家測量製図地理情報局により計算された測地系で、WGS84に基いている。 安全保障上の理由と思われる、ランダムなずれを経度と緯度の両方に付加するための難読化されたアルゴリズムが明らかに用いられている。
GCJ-02座標系におけるマーカーはGCJ-02座標系の地図上では正確な位置に表示される。しかし、GPSなどで測位したWGS-84座標系によるマーカーをGCJ-02座標系の地図上に置くと、100～700mの誤差がその「ランダムなずれ」のために発生し、逆もまた然りである。Google.comの道路地図では現実と50～500mのずれが発生するが、Google.cnの地図ではそのずれは発生しない。 MapQuestもOpenStreetMapのデータを衛星画像に完全に重ね合わせている。
GCJ-02は難読化されているにも関わらず、GCJ-02座標系とWGS-84座標系の換算機能を提供するオープンソースプロジェクトが C#, C、Go、Java、JavaScript、PHP、 Python、 R、Rubyといったプログラミング言語で提供されている。それらのプロジェクトは流出したWGS84をGCJ-02座標系に変換するコードを元にしていると思われる。その他の換算方法として、Google Chinaの地図と衛星画像を元に回帰分析に基づいて補間するというものもある。 Wu Yongzhengによる高速フーリエ変換を用いた解析は流出したコードによる結果に非常に近かった。
流出したコードによれば GCJ-02座標系はWGS-84座標系による入力に「ずれ」を付加する際にSK-42参照系を用いているように思われる。

BD-09

BD-09座標系は百度地図に用いられている測地系で、すでに暗号化されているGCJ-02座標系に「ユーザのプライバシーをより保護するために」更に暗号化が付加されている。百度はGoogleMapやGPSで用いられているWGS-84座標からBD-09座標に変換するためのAPIを提供している。GCJ-02座標系と同様に、他の座標系に変換するためのAPIは存在しないが、Rなど様々な言語の実装がオープンソースで公開されている。

逆変換

GCJ-02座標系にはの形で表される複数の高周波のノイズが用いられており、効果的に超越関数を作り、解析的解法を排除することが出来る。しかし、オープンソースで公開されている逆変換ではGCJ-02座標系の特性である局所的な線形性と単調性を活用しており、変換した座標はWGS84座標系からそれほどずれたものではない。
from typing import Callable# 座標を複素数で表し単純にするcoords = complex# 座標から座標に変換する関数C2C = Callable[[coords], coords]def rev_transform_rough(bad: coords, worsen: C2C) -> coords:
    """    おおよそ ``worsen``変換を逆転させる.    ``bad = worsen(good)``は``good``に近いため,    ``worsen(bad) - bad`` はおおよそ ``bad - good``として使える    よって``bad - (worsen(bad) - bad)``はおおむね    ``bad - (bad - good) = good``である    この略算法はeviltransformで初めに見られたものである。    """
    return bad - (worsen(bad) - bad)def rev_transform(bad: coords, worsen: C2C) -> coords:
    """    より正確に``worsen``変換を逆転させる.    ``rev_transform_rough``と同様に、    ``worsen(a) - worsen(b)`` を``a - b``の近似として扱える。    これはgeoChina/R/cst.R (caijun 2014)で初めて見られたものである。    おおよその初期化のない、反復のみのものはfengzee-me/ChinaMapShift (November 2013)から知られている。    """
    eps = 1e-6
    wgs = rev_transform_rough(bad, worsen)
    old = bad
    dowhile = True  # 最初のepsの試行で失敗する可能性があるため

    while abs(wgs - old) > eps or dowhile:
        old = wgs
        wgs -= worsen(wgs) - bad
        dowhile = False
    return wgs
略算的な方法でも1～2m程度の精度でWGS-84座標系による座標が得られ、より精度を上げた方法では2回の反復でセンチメートルレベルの精度が得られる これら2つの特性は座標系のいくつかの基本的な機能を保証しているため、この逆変換の方法は新しい座標系でも変わることなく適用できる。BD-09座標系からGCJ-02座標系に変換するプログラムは上記の略算法では、明らかに付加された20秒程度の定数のずれをまず取り除く。

中国国内でGPSがずれる問題

中国国内でGPSがずれる問題とはGCJ-02座標系とWGS84座標系の違いに起因する問題である。GPSによる座標はWGS-84座標系を用いている一方、中国の道路地図はGCJ-02座標系に基づいており、その差は500m近くある上に場所によって異なる。認可された位置情報サービス事業者（AutoNavi、NavInfoなど）はGPSによる位置を地図上に正しく配置するシフト補正アルゴリズムを入手する必要がある。
OpenStreetMapなどユーザの投稿した道路地図と衛星画像は正確に表示できる。これはGPS機器を用いてデータを収集しているためである (ただし法的には非合法である #法律を参照)。
Hereなどの地図事業者はGCJ-02座標系の道路地図に一致させるために、衛星画像にもずれを導入している。
Googleは中国の地図情報サービス事業者AutoNaviと2006年から提携し地図情報を得ている。
google.cn/mapsは道路地図と衛星画像の両方がGCJ-02座標系である。しかし、ブラウザから送信されるWGS-84座標系による座標は誤った位置に描画されてしまう。反対に、google.com/mapsは道路地図にはGCJ-02座標系を用いているが、衛星画像はWGS-84座標系を用いているため、WGS-84座標系の座標が正確に衛星画像上では描画できるという利点がある（ただし道路地図上ではずれが生じる）。Google Earthも衛星画像の表示にはWGS-84座標系を用いている。
GPSによる軌跡をGoogleMapの地図上に重ねて描画する際、Google.comの地図はGCJ-02座標系を用いているがGPSはWGS-84座標系であるため、同様にずれが生じる。この現象は2009年以降何度もGoogleフォーラムに投稿されており、サードパーティ製のアプリケーションを使用することで解決できる。中国の都市におけるずれの一覧の販売も行われている。こういった問題は2008年にはみられ、当時原因が不明とされ、GPSチップが改ざんされており誤った座標を出力するといった推測をする人もいた。

香港、マカオ

一国二制度により、中国本土の法律が適用されない香港、マカオといった特別行政区内においては同様の規制は存在しない。従って、GPSのずれに関する問題は適用されない。しかし、特別行政区と中国本土の境界においては、ずれたデータと正しいデータが重なってオンライン地図のデータが壊れているように見える。この問題は国境をまたがって移動する旅行者にとって問題となるため、とくにこの問題を認識していない旅行者は注意しなければならない。