Ein kurzer Leitfaden für das chinesische Koordinatensystem. GCJ-02(gcj 02) Erklärt.

简体中文 English 日本語

Von Dmitry

Aktualisiert am

Dieser Beitrag wurde mit der Hilfe von Deepl übersetzt. Bitte kontaktieren Sie mich, wenn Sie diese Übersetzung verbessern möchten: [email protected]
maps python javascript mapbox china google map WGS-84 GCJ-02 BD-09 baidu openstreetmap
Vielen Dank an Chris Wu von Mapbox China für sein Feedback zu diesem Artikel und seine Erkenntnisse über die Funktionsweise von Karten in China. Ohne ihn wäre dieser Artikel nicht vollständig.

Haben Sie schon einmal google maps china offset gesucht? Die meisten Menschen, die in China waren, ja. Hier ist meine Geschichte hinter dieser Frage.

Ich erinnere mich an meinen ersten Besuch in China im Jahr 2010. Wir buchten ein Hotel in guter Lage in Guangzhou und speicherten Koordinaten und Routen in Google Maps. Aber als wir am Zielort ankamen, war es offensichtlich, dass es keine Hotels gibt. Ich war an dem Punkt, wo mein Hotel sein sollte, aber alles, was ich um mich herum habe, ist ein riesiger Platz (花城广场 alias Flower City Square). Lange Rede kurzer Sinn. Irgendwann rettete uns ein Typ mit seinem Meizu-Telefon, indem er uns zeigte, dass unser Hotel tatsächlich ein paar Kilometer von diesem Platz entfernt ist.

Heutzutage arbeite ich mit China und stehe als Entwickler vor den gleichen Herausforderungen. Ich habe beschlossen, einen Artikel zu schreiben, in dem ich meine Erfahrungen zusammenfasse, in der Hoffnung, dass dies jemandem helfen könnte.

Baidu Karte Screenshot und die alte chinesische Karte

How to Upload Files To Bunny.net Storage

python bunny_net storage snippet

Bunny.net is a well-known CDN and storage among developers. Here is my python snippet on how to upload a file to the storage.

China-Koordinatensystem

Lassen Sie uns zunächst einmal über die wichtigsten heute verwendeten Koordinatensysteme sprechen. Ein internationaler Standard ist WGS-84 (Erdkoordinaten) oder World Geodetic System, wobei 84 die letzte Revision dieses Standards aus dem Jahr 1984 ist. Dieser Standard wird von GPS verwendet. Jedes Mal, wenn Sie Google Maps (oder fast alle anderen Karten) verwenden, können Sie sich bei WGS-84 bedanken. Lassen Sie uns nun über China sprechen.

Weltkoordinatensysteme. WGS-84, GCJ-02, BD-09

WGS-84 ⇛ GCJ-02 ⇛ BD-09

Die chinesischen Regulierungsbehörden verlangen, dass zugelassene Kartendienste den Standard GCJ-02 (chinesisch: 国测局; pinyin: guó-cè-jú) verwenden. Sie wurde 2002 vom chinesischen Staatlichen Amt für Vermessung und Kartierung formuliert. Manchmal wird GCJ-02 auch als Marskoordinaten bezeichnet. GCJ-02 basiert auf WGS-84 und verwendet einen Verschleierungsalgorithmus, der zur Verbesserung der nationalen Sicherheit zufällige Verschiebungen zu den Breiten- und Längengraden hinzufügt. Wenn der WGS-84-Punkt auf der GCJ-02-Karte platziert wird, ergibt sich im Durchschnitt eine Abweichung von etwa 300-500 m. Nur sehr wenige Punkte liegen "meilenweit" auseinander, meist nur um ein paar Blocks. Deshalb habe ich mich bei meinem ersten Besuch in China auch verlaufen.

Halten Sie sich fest. Es gibt noch mehr. Baidu ging noch weiter und implementierte eine weitere Abstraktion, die GCJ-02 weiter verschleiert. Sie wird BD-09 (Baidu, formuliert 2009) genannt. Der Hauptzweck bestand darin, die Daten von Baidu zu schützen, damit sie von Konkurrenten nicht einfach dupliziert werden können. Baidu hat interne Tools, um zwischen den drei Koordinatensystemen zu wechseln, macht aber nur GCJ-02 bis BD-09 öffentlich, um die Verwendung ihres Standards für Kacheln, Suchkoordinaten usw. zu fördern.

Nach chinesischem Recht gibt es keine offizielle API für die Umstellung auf WGS-84.

Lizenzen

Laut Wikipedia weist "OpenStreetMap, das Crowdsourced-Projekt zur Erstellung einer Weltkarte, darauf hin, dass "private Vermessungs- und Kartierungsaktivitäten in China illegal sind". Wenn man sich die Karten von Baidu oder Mapbox anschaut, findet man jedoch oft einen OSM-Vermerk neben der Kartenlizenz. Das bedeutet, dass die Nutzung von OSM in China nicht illegal ist und dass man OSM Daten aus Satellitenbildern hinzufügen kann. Für die Erhebung von Bodendaten müssen Sie jedoch eine Vermessungslizenz erwerben (die es Ihnen ermöglicht, Daten zu sammeln und ein kommerzielles Produkt zu erstellen). Und das ist eine ganz andere Geschichte.

Wie Chris mir gegenüber erwähnte, ist eine Vermessungslizenz extrem schwer zu bekommen. Infolgedessen gibt es weniger als 20 Unternehmen, die diese Lizenz besitzen. Große Technologieunternehmen wie Alibaba mussten AutoNavi nur für diese Lizenz erwerben, Tencent musste NavInfo kaufen. Mapbox zum Beispiel ging eine Partnerschaft mit EMG ein, einem führenden Anbieter von Kartendaten für die Navigation. Didi war das erste Unternehmen, das seine Lizenz im letzten Jahrzehnt direkt erhalten hat (ein ziemlicher Meilenstein). Kartenlizenzen hingegen sind leichter zu erhalten - wenn Sie sich die lizenzierten Basiskarten in China (Mapbox, Baidu, AutoNavi usw.) unten rechts ansehen, werden Sie etwas wie "GS (2020) 123 号" sehen.

baidu karte bildschirmfoto mit kartenlizenz

Baidu-Kartenlizenz

gcj-02 to wgs84. wgs84 to gcj02

Wie Sie sich vorstellen können, läuft die Umrechnung folgendermaßen ab: WGS-84 ⇛ GCJ-02 ⇛ BD-09 und rückwärts. Es ist nicht zulässig, einen formellen Konvertierungsleitfaden zu veröffentlichen - jede Verwendung der Koordinatenverschiebung muss vom SDBM genehmigt werden..

Sie können jedoch Open-Source-Implementierungen für diesen Algorithmus in verschiedenen Programmiersprachen finden(e.g., eviltransform). In diesem Artikel verwende ich JavaScript-Implementierung, aber Sie können auch leicht Python, R, Go usw. finden. Schauen Sie sich den Abschnitt "Notes" in meinem Artikel an.

Unser chinesisches Büro verwendet Baidu Get Point Service, um BD-09-Koordinaten des gewünschten Objekts zu erhalten. Ein Screenshot ist unten abgebildet. Ich speichere diese Koordinaten dann in der Datenbank und führe eine Konvertierung in WGS-84 oder GCJ-02 durch, je nach Geolokalisierung des Nutzers. Für Benutzer in China müssen Sie GCJ-02 verwenden, erinnern Sie sich?

Bildschirmfoto der Baidu-Karte mit den Koordinaten von bd-09

BD-09 von http://api.map.baidu.com/lbsapi/getpoint/

Ich habe ein Beispiel mit der coordtransform-Bibliothek und Mapbox erstellt, damit Sie herumspielen können. Kopieren Sie die BD-09-Koordinaten aus diesem Dienst und fügen Sie sie hier ein, um das Ergebnis der Transformation zu sehen.

Den Quellcode für dieses Beispiel finden Sie hier

Welchen Kartenanbieter sollten Sie für Ihre Nutzer in China verwenden?

Wenn Sie Ihren Nutzern aus Festlandchina ein reibungsloses Kartenerlebnis bieten möchten, haben Sie nicht viele Möglichkeiten. Google Maps funktioniert nicht ohne ein VPN. Ich liebe Baidu Maps in China. Sie bieten eine hervorragende Benutzeroberfläche mit vielen praktischen GEO-Daten. Sehen Sie sich die Details an.

Aber wenn es darum geht, eine Karte auf Ihrer Webseite einzubetten, bleibt für mich nur Mapbox. Mapbox ist ein hervorragender alternativer Kartendienst. Er ist legal und funktioniert auch ohne VPN in China einwandfrei. Aufgrund chinesischer Vorschriften werden 3 lizenzierte Basiskarten über mapbox.cn bereitgestellt. Alle Daten innerhalb Chinas sind verschoben (von ihrem Kartierungspartner), alle Daten außerhalb Chinas sind unverschiebt (aus ihren eigenen Datensätzen, einschließlich OSM).

Mapbox with a WGS-84 113.31924878632225, 23.12426152397713 koordinaten (花城广场 in Guangzhou)

Ich habe den Endpunkt api.mapbox.com mit einem globalen Zugriffstoken getestet, und es hat von Guangzhou aus einwandfrei funktioniert. Aber in dem Fall mit China, es ist ein Glücksspiel, so schlage ich vor, den Zugang Token von mapbox.cn zu erhalten.

Hier ist ein Algorithmus für Sie. Ist die GeoIP Ihres Besuchers in China?

  • Ja: mapbox.cn Einbettung mit GCJ-02 Koordinaten anzeigen
  • Nein: mapbox.com mit WGS-84-Koordinaten einbetten

Ich hoffe, dass dieser Beitrag jemandem Zeit erspart. Wahrscheinlich werde ich später weitere Informationen hinzufügen, da es sich um ein komplexes und nicht sehr gut verstandenes Thema handelt. Schreiben Sie mir eine Nachricht, wenn Sie Fragen oder Anregungen haben.

The Latest

recv() failed (104: Connection reset by peer) while reading response header from upstream

python uwsgi error snippet

Geolocate the Location of an IP Address With Cloudflare Workers and JavaScript

javascript cloudflare geolocation workers

Detect a visitor's country and city by IP address with Cloudflare Workers and JavaScript.

JavaScript Document Onload + TypeScript version

javascript DOM snippet basics typescript
🗃 JavaScript Basics

Universal code-snippet to know when HTML is ready for modern browsers.

How to Create Jinja2 Filters in Flask

python flask jinja2 snippet

In this post, I'll talk about filters. Jinja2 has a list of built-in filters, and Flask leverages them.

How to Upload Files To Bunny.net Storage

python bunny_net storage snippet

Bunny.net is a well-known CDN and storage among developers. Here is my python snippet on how to upload a file to the storage.

How to Copy Text to Clipboard With Javascript

javascript DOM browser

Here is a short snippet on how to copy text to the clipboard with Javascript. Your visitors will thank you. Most likely not, but here we are.

Flask Boilerplate and Your Guide to Flask in 2023. With SQLAlchemy.

boilerplate open source flask

Flask-Backbone is my take to create an initial structure and a set of rules, so most of my flask projects are easy to support.

How to Import CSV Files to PostgreSQL with Pgfutter

csv postgresql

Sometimes I need to upload large CSV files to PostgreSQL. CSV file might have hundreds of columns, that's why i want a tool that can do some magic for me.

How to Upload Files to DigitalOcean Spaces with Python

digitalocean python

Snippet on how to upload files to DigitalOcean Spaces with boto3 and python.

The Definitive Guide To Sitemaps With Python

open source python

Sitemaps are important. Especially for big websites. It is always a good idea to develop your website with SEO in mind. Unfortunately, most developers ignore this part.