2013-03-16 11 views
6

Używam najnowszego zestawu SDK do Mapy Google Maps iOS i wydaje mi się, że lokalizacja GPS jest zawsze przesunięta w Chinach o 1-2 ulice, jednak w oficjalnej aplikacji Google Maps lokalizacja jest w 100% poprawna.Lokalizacja GPS jest zawsze przesunięta w Chinach

natknąłem tego postu, który wydaje się być powodem, dlaczego: http://home.wangjianshuo.com/archives/20081109_all_maps_in_china_are_transformed.htm

Wydaje oficjalna aplikacja używa poprawnie przekształconą mapę natomiast Mapy Google na iOS SDK nie. Czy ktoś znalazł sposób na obejście tego?

+0

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

+0

Problem z Yoru jest poprawiony czy nie? czy testujesz na symulatorze lub urządzeniu? –

+3

Stworzyłem kategorię CLLocation, która może zrekompensować pozycję w Chinach, aby zrekompensować błąd: https://github.com/maxime/ChinaMapDeviation – maximeguilbot

Odpowiedz

0

Czy nie wynika to z zastosowania w Chinach układu współrzędnych używanego w WGS84?

Oto code które mogą obsługiwać tłumaczenia z WGS84

+2

Podobno jest [nie bardzo jasne, czy ten kod również zajmuje się odchyleniem GPS] (https: // github. com/googollee/eviltransform/issues/6). –

6

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.

GPS coordinates appear offset on GCJ-02 map

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:

enter image description here

Udoskonaleniem byłoby użycie granicy wieloboku, takiej jak china.kml.