地形图非线性保密处理算法

出於國家安全考慮，中華人民共和國對在中國大陸境內進行地理測繪有專門限制。在中華人民共和國境內的資料之前，需要從國務院下屬的中華人民共和國國家地理訊息部門（現為中華人民共和國自然資源部地理資訊管理司、國土測繪司）獲得相應的資質許可。未經許可進行測繪者可能須承擔行政或刑事責任，而未有依照相關規定的網站如 OpenStreetMap 等亦會遭到封鎖。

為防使用者觸法，部分帶有全球定位系統（GPS）功能的相機在中國大陸會自動關閉相片地理標記的功能。除此之外，由於國測局要求電子地圖提供商使用一種國測局特製的坐標系，一些未按此規範做相應適配的地圖程式的衛星圖與街道地圖之間將存在一定偏移。

## 法律規定

### 測繪

按照《中華人民共和國測繪法》第 7、26、40、42 條，未經官方許可的私人測繪製圖活動屬於違法行為，嚴重的將構成犯罪。

2006 到 2014 年期間，中華人民共和國當局處理了近 40 多例非法測繪案件。媒體也報導了一些非法測繪案件：

* 2007 年 3 月 7 日：日韓學者受罰款。威海一合資企業未經許可僱傭外國測繪人員。
* 2008 年 3 月 25 日：國家測繪地理信息局取締中國大陸境內共 10000 多地圖網站中的某些地圖網站，大多是因為擅自發布地圖資料。
* 2009 年 1 月 6 日：英國學生因「非法製圖活動」受罰款。
* 2010 年：大陸當局取締其境內 42000 地圖服務商中部分未經註冊、非法運營的服務商，其注重點在於消除錯誤訊息、保護國家機密。 新發布的地圖服務標準要求地圖服務商將儲存地圖資料的伺服器置於中國境內。
* 2014 年 3 月 14 日：可口可樂公司被指非法測繪。

由於這一法規限制，松下、徠卡、富士、尼康、三星等廠商的相機都限制記錄中國境內的地理資料。

四川省測繪地理訊息局於 2016 年 8 月警告稱，未經許可使用測繪無人機可構成非法測繪。

### 地圖內容

對於出版的地圖，中華人民共和國也有各種規定：

* 《公開地圖內容表示若干規定》（測繪局，2003）禁止表示機場（在一個《關於公布可在公開地圖上表示的機場的通知》上的除外）、軍事建築、水路深度。《若干規定》對爭議領土的命名和表示，以及對俄國割占的中國領土的命名也有要求。
* 《公開地圖內容表示補充規定》（測繪局，2009）額外禁止了一些做法，以下是選列：
  * 位置精度超過 50m、高程模型網格小於 100m
  * 顯示重要基礎設施（電力設施、水利設施、氣象站）和公安設施（監獄、強制戒毒所）的位置
  * 顯示機場和輪渡碼頭的內部結構
  * 顯示公路、橋梁、隧道的限高、限寬、限重；顯示路面材料。
* 《地圖管理條例》（國務院，2015）額外規定網際網路地圖必須把資料儲存在中國。《條例》對保護國家安全也有一些敘述，並且規定了一些懲罰。

中華人民共和國自然資源部曾表示，中國的「問題地圖」主要有兩種情況。一是地圖存在「危害國家主權統一、領土完整等嚴重問題」，容易出錯的地方則是中華人民共和國聲稱擁有主權的阿克塞欽地區，藏南地區、南海諸島、台灣島以及釣魚島、赤尾嶼。其中，阿克塞欽地區，藏南地區在問題地圖中主要表現為國界繪製錯誤；台灣島底色與中國大陸不一致，則違背「一個中國」原則及中華人民共和國立場；南海諸島和釣魚島、赤尾嶼也容易出現被漏繪的情況。第二種表現是危害國家安全和發展利益，「違法標註一些涉密或敏感的訊息」。

2016 年，中國「有關部門」在一次大規模檢察中，發現「問題」紙質地圖 253 種，「問題」線上地圖 1000 站。

## 坐標系實現

中國大陸法規要求地圖提供商使用一種稱為 GCJ-02 的坐標系統。百度地圖另外使用一種 BD-09 坐標系，似乎也是基於 GCJ-02。

### GCJ-02

**GCJ-02**（官方稱**地形圖非線性保密處理演算法**，俗稱**火星坐標系**、**國測局坐標**）是一種基於 WGS-84 制定的大地測量系統，由中國大陸國家測繪地理信息局制定，國家科學技術進步獎一等獎得主李成名開發。此坐標系所採用的混淆演算法會在經緯度中加入看似隨機的偏移。

使用 GCJ-02 記錄下的地點在 GCJ-02 的地圖中會顯示在正確位置，然而換成 WGS-84 的地圖或地點記錄就可能造成 100－700 公尺不等的偏移。據測量，Google.com 的地圖與真實坐標相差約 50－500 公尺，而中國大陸區的 Google.cn 地圖則與衛星圖不偏差，雅虎地圖顯示的街道圖也與衛星圖偏差不大。MapQuest 地圖與眾包測繪、不受限制的 OpenStreetMap 重合。

雖然 GCJ-02 坐標系統本身保密，但是目前已有 C#、C、Go、Java、JavaScript、PHP、Python、R、Ruby 等多種語言的開源轉換實現。這些實現似乎都基於某份泄露出的 WGS 到 GCJ 加偏代碼實現。 根據泄露代碼注釋，GCJ-02 在加偏時使用的是 SK-42 參考系統的橢球體參數。這些參數用於計算一根經 / 緯線上一度的弧長，由此將之前算出的偏移從米數轉換為度數，與輸入值相加。

除了直接取得加偏演算法，也有人通過對 Google 中國大陸地圖與衛星間的偏移做迴歸近似處理。Wu Yongzheng 使用傅立葉轉換解出了與泄露代碼類似的高頻結構。除了加偏之外，現在也有一些反向糾偏的實現。

### BD-09

**BD-09** 是百度地圖使用的地理坐標系，其在 GCJ-02 上多增加了一次轉換，號稱「有助保護使用者隱私」。百度提供從 WGS-84、GCJ-02、BD-09、mapbar、51 地圖坐標系（經緯度或墨卡托米制）轉換到 BD-09 或 GCJ-02 坐標系（經緯度或墨卡托米制）的 API，但「根據相關法律規定」，不支援從任何坐標系轉換到 WGS-84 坐標系。

和 GCJ-02 的情況類似，雖然沒有轉換為 WGS-84 的官方 API，但卻存在 R 等多種語言寫成的開源版本。

數學上，BD-09 轉換將 GCJ 坐標當作直角坐標轉成極坐標後加噪音，在變回直角坐標之後再加入一個度數恆定的偏移量。

### 反向糾偏

由於 GCJ-02 大量使用正弦函數製造高頻噪音，形成了一個超越方程式，導致基本不可能獲得解析解。不過由於 GCJ 加偏前後的坐標相差並不太大，且其單調性和局部線性特性也較好，大部分開源實現都通過類似這樣的演算法實現反向糾偏：

> 
> 稱要求的「好」坐標為 _good_。令「加偏函數」為 worsen，「壞坐標」為 _bad_ = worsen(_good_)。一個「混淆」坐標系有以下性質：
> 
> 1. 前後相差不大：worsen(_a_) ≈ _a_；
> 2. 局部線性：如果 _a_ ≈ _b_，那麼 worsen(_a_) - worsen(_b_) ≈ _a_ - _b_ 。
> 
> **粗略法**
> : 由性質 1 和 2, worsen(_good_) - worsen(_bad_) ≈ _good_ - _bad_。解方程式可得 _good_ ≈ 2 _bad_ - worsen(_bad_)。
> 
> **精確法（不動點迭代）**
> : 取粗略法得到的結果 _g_。按照性質 2，將 worsen(_g_) 與輸入的 _bad_ 對比，以估計剩餘的偏差。用估計出的剩餘偏差修正 _g_。重複迭代，酌情結束。
> 
> 

開源實現者稱，「粗略」演算法能提供 1~2 公尺的來迴轉換精度，而精確演算法則可以在兩個迭代內獲得「公分級」精度。由於經緯度加偏坐標大多都具有前述的兩個特性，這種糾偏方法適用於多種混淆方式。BD 轉回 GCJ 的代碼正是在移除了 20 弧秒左右的固定經緯偏移後使用了類似於粗略演算法的反向代入估計。

## 中國大陸地圖偏移問題

**中國大陸地圖偏移問題**指的是由 GCJ-02 與 WGS-84 之間的偏差引致的一系列問題。GPS 的經緯度坐標使用的是標準 WGS-84，畫到使用 GCJ-02 的中國大陸路網圖上時會造成距離在 500m 左右不等的顯著偏移。國測局授權提供位置和地圖服務的廠商，例如高德地圖、NavInfo，都需要特別購買一個「糾偏」演算法，將 GPS 坐標轉為和地圖一致的坐標系。Google.com 和 Bing 的衛星圖不受此影響。開放街圖由使用者通過 GPS 採集坐標，所以也不會出現偏移問題。

Here 地圖和百度地圖等地圖服務商選擇將衛星圖一同偏移，以和 GCJ-02 路網保持一致。

Google 自 2006 年以來就從高德公司處取得地圖訊息。Google.cn（中國區）的地圖對於街道和衛星圖都使用 GCJ-02 坐標系。全球版的 Google 地圖（Google.com）使用 GCJ-02 的街道圖，但出於不明原因保留了普通的 WGS-84 衛星圖。Google 地球的衛星圖使用的是 WGS-84 坐標。

在全球版（.com）Google 地圖上使用 API 將 GPS 軌跡和街道圖重疊顯示會造成一樣偏差的問題，這是因為 GPS 軌跡所使用的路徑點使用的都是 WGS-84 坐標，不同於街道圖使用的 GCJ-02。自 2009 年來，這個問題已由使用者在 Google 的產品論壇上屢次報告，現在也有用於修正錯誤的第三方應用程式。在演算法泄出之前，一度有人銷售各大城市坐標偏移量的資料集。這個問題最早於 2008 年發現，但當時原因未知。

### 香港及澳門

由於實施一國兩制，香港、澳門這兩個特別行政區的地圖雖不受測繪法限制，但也有一定偏移問題。在這兩地和中國大陸邊境附近，網路地圖提供的道路形狀會因為偏移而互相斷開。

例如，截至 2018 年 4 月 (2018-04)，非中國大陸版本的 Google 地圖上深圳境內的深圳地鐵 4 號線的福田口岸站延伸進了香港境內。

而澳門方面，截至 2023 年 2 月，珠三角環線高速（加林山隧道至港珠澳大橋珠海口岸段，往加林山隧道方向）的路線穿過澳門境內，另一方向則沒有同類問題。

## 注釋

## 參考文獻

## 參見

* 日本人新疆非法測繪事件
* 電視劇《親愛的，熱愛的》地圖事件