2013-03-16 15 views
6

Sto utilizzando l'ultimo SDK iOS di Google Maps nella mia app e sembra che la posizione GPS sia sempre spostata in Cina di 1-2 isolati, tuttavia, nell'app Google Maps l'app la posizione è corretta al 100%.La posizione GPS è sempre compensata in Cina

mi sono imbattuto in questo post che sembra essere il motivo per cui: http://home.wangjianshuo.com/archives/20081109_all_maps_in_china_are_transformed.htm

Sembra che l'applicazione ufficiale utilizza una mappa correttamente trasformato mentre il Google Maps per iOS SDK non lo fa. Qualcuno ha trovato un modo per aggirare questo?

+0

Ho scaricato l'ultima API 1.2.1 e ho ancora lo stesso problema. Se usi SDKDemos, la posizione mostrata è diversa dalla posizione sulla mappa google ufficiale. Sempre fuori da 1-2 isolati. Sembra essere solo in Cina. Qualche correzione? – Josh

+0

Il problema con Yoru è fisso o no? stai testando su simulatore o dispositivo? –

+3

Ho creato una categoria su CLLocation che può compensare la posizione in Cina per compensare l'errore: https://github.com/maxime/ChinaMapDeviation – maximeguilbot

risposta

0

Non è dovuto al diverso sistema di coordinate utilizzato in Cina per quello che usiamo di WGS84?

Ecco alcune code in grado di gestire le traduzioni dal WGS84

+2

Apparentemente è [non molto chiaro se quel codice si occupa anche della deviazione GPS] (https: // github. com/googollee/eviltransform/temi/6). –

6

La ragione per la GPS offset in China è una combinazione di tecnologia (diversi dati) e interessi politici/economici.

A causa di "problemi di sicurezza", la Cina utilizza un diverso sistema di coordinate dal resto del mondo - GCJ-02 anziché lo standard WGS-84 utilizzato dai satelliti GPS e dalla maggior parte delle mappe. Tutte le mappe della Cina devono essere approvate dal Consiglio di Stato al fine di contrassegnare la posizione della Cina su vari beni politicamente controversi (Tibet, Taiwan, ecc.). L'approvazione richiede anche che le mappe utilizzino GCJ-02. Questo fa sì che le posizioni del WGS-84, come le tracce GPS da un ricevitore GPS non adulterato, appaiano "off" quando tracciate su mappe stradali cinesi.

GPS coordinates appear offset on GCJ-02 map

Un altro sistema di coordinate non è normalmente un problema, ma la Cina ha scelto di cifrare GCJ-02, quindi non c'era alcuna trasformazione lineare. Il primo attempt at a conversion utilizzato a database of coordinates obtained from Google China Maps (ditu.google.com) quando era in grado di calcolare la deviazione nel 2010. Questo era un metodo di interpolazione e un po 'impreciso. I set di dati sono stati messi in vendita con offsets calculated for thousands of Chinese cities.

Nel frattempo l'algoritmo GCJ-02 è stato trapelato ed è un "segreto pubblico" (la ricerca di "conversione GCJ-02" trova molti risultati). Di nota popolare è il progetto eviltransform, che offre API di conversione per C, C#, Go, Java, JavaScript e PHP. Il geoChina library gestisce la conversione tra GJC-02, WGS-084 e Baidu BD-09, utilizzando R.

Il codice non è banale, e svolge anche un very roughbounding box check per determinare se un luogo è in Cina:

function outOfChina(lat, lng) { 
    if ((lng < 72.004) || (lng > 137.8347)) { 
     return true; 
    } 
    if ((lat < 0.8293) || (lat > 55.8271)) { 
     return true; 
    } 
    return false; 
} 

che include la maggior parte dell'India, tutto il Sud e Corea del Nord, Filippine, Vietnam, Mongolia, Thailandia, e una miriade di altri paesi:

enter image description here

Un miglioramento consisterebbe nell'utilizzare un limite di poligono, ad esempio china.kml.

Problemi correlati