Powodem GPS offset in China to połączenie technologii (różne układy odniesienia) i/interesy gospodarcze polityczne.
Z powodu "problemów związanych z bezpieczeństwem" Chiny używają innego układu współrzędnych niż reszta świata - GCJ-02 zamiast standardu WGS-84 używanego przez satelity GPS i zdecydowaną większość map. Wszystkie mapy Chin muszą zostać zatwierdzone przez Radę Państwa w celu zaznaczenia stanowiska Chin w sprawie różnych sporów politycznych (Tybet, Tajwan itd.). Zatwierdzenie wymaga również, aby mapy używały GCJ-02. Powoduje to, że lokalizacje WGS-84, takie jak ślady GPS z niezakodowanego odbiornika GPS, są wyświetlane jako "wyłączone", gdy są drukowane na chińskich mapach ulic.
inny układ współrzędnych jest zazwyczaj problemem, ale Chiny wybrał szyfrowania gcj-02, ponieważ nie było proste przekształcenie. Pierwszy attempt at a conversion użyty a database of coordinates obtained from Google China Maps (ditu.google.com), gdy był w stanie obliczyć odchylenie w 2010 roku. Był to sposób interpolacji i nieco nieprecyzyjny. Zestawy danych trafiły do sprzedaży pod numerem offsets calculated for thousands of Chinese cities.
Tymczasem algorytm GCJ-02 został ujawniony i jest "tajemnicą publiczną" (poszukiwanie "konwersji GCJ-02" znajduje wiele wyników). Popularną informacją jest projekt eviltransform, który oferuje interfejsy API konwersji dla języków C, C#, Go, Java, JavaScript i PHP. geoChina library obsługuje konwersję między GJC-02 WGS-084 i Baidu BD-09, za pomocą R.
Kod jest nietrywialne i wykonuje również very roughbounding box check aby ustalić, czy lokalizacja jest w Chinach:
function outOfChina(lat, lng) {
if ((lng < 72.004) || (lng > 137.8347)) {
return true;
}
if ((lat < 0.8293) || (lat > 55.8271)) {
return true;
}
return false;
}
obejmuje najbardziej Indii, wszystkie Południowej i Północnej Korei, Filipin, Wietnamu, Mongolii, Tajlandii i wielu innych krajach:
Udoskonaleniem byłoby użycie granicy wieloboku, takiej jak china.kml.
Pobrałem najnowszy interfejs API 1.2.1 i nadal mam ten sam problem. Korzystanie z SDKDemos pod warunkiem, że pokazana lokalizacja różni się od lokalizacji na oficjalnych mapach google. Zawsze na zewnątrz przez 1-2 bloki. Wydaje się być w Chinach. Jakieś poprawki? – Josh
Problem z Yoru jest poprawiony czy nie? czy testujesz na symulatorze lub urządzeniu? –
Stworzyłem kategorię CLLocation, która może zrekompensować pozycję w Chinach, aby zrekompensować błąd: https://github.com/maxime/ChinaMapDeviation – maximeguilbot