Cerințe: Convertirea coordonatelor Baidu în coordonate WGS84 Implementare: În primul rând, permiteți-mi să vă prezint multe sisteme complicate de coordonate în China, după cum știm cu toții, GPS-ul Statelor Unite folosește coordonatele WGS84, dar în China, din motive de securitate, când harta este publicată și publicată, cele 84 de coordonate sunt neliniare și părtinitoare, iar coordonatele obținute sunt numite sisteme de coordonate GCJ02, cunoscute în mod obișnuit ca coordonate Marte. În plus, multe companii interne de hărți, poate din motive de afaceri sau din motive de concurență, au efectuat o deviație neliniară pe baza coordonatelor Marte și și-au obținut propriul sistem de coordonate. Baidu este o astfel de companie. Baidu a realizat polarizarea secundară neliniară BD-09 pe baza GCJ02 și a obținut propriul sistem de coordonate Baidu. Acest lucru poate fi benefic pentru compania Baidu, dar pentru noi, dezvoltatorii, este pur și simplu enervant. Următoarea este o scurtă introducere a sistemelor de coordonate folosite de unii furnizori de servicii de hărți din China:
În prezent, Baidu oferă un API pentru conversia coordonatelor, http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude în acest proces • de la: Sistemul de coordonate sursă (0 pentru coordonatele GPS originale, 2 pentru coordonatele Google) • la: Coordonate convertite (4 este a lui Baidu, ca și cum ar trebui să fie 4) • x: Precizie • y: Latitudine Rezultatul returnat este un șir json: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"} • eroare: este bitul de marcaj de eroare, iar "0" indică OK • x: Acuratețea sistemului de coordonate Baidu (criptare Base64) y: Latitudinea sistemului de coordonate Baidu (criptare Base64); Am adunat sensul acestor două numere online:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude 1: Coordonate unghiulare obținute de echipamente GPS; 2: Coordonate metrice obținute prin GPS, coordonate folosite în hărțile sogou; 3: Coordonate folosite pentru Google Maps, SOSO Maps, Aliyun Maps, MapABC Maps și AMAP Maps 4:3 Coordonatele metrice corespunzătoare coordonatelor hărții din listă 5: Coordonatele de longitudine și latitudine folosite de Hărțile Baidu 6: Coordonate metrice folosite de Hărțile Baidu 7: coordonate ale hărții din hartă; 8:51 Coordonate pe hartă Nicio implicită nu este 1, adică coordonatele obținute de dispozitivul GPS Pentru tipurile de coordonate de destinație există două opțiuni: 5, 6. 5: BD09LL (coordonate latitudine și longitudine Baidu), 6: BD09MC (coordonate latitudine și longitudine la 100 de metri); Nu. Implicitul este 5, adică bd09ll (coordonate Baidu)
Toate cele de mai sus sunt folosite pentru a converti 84 de coordonate în coordonate Baidu, mai jos să vorbim despre cum se realizează conversia inversă a coordonatelor, adică coordonatele Baidu sunt convertite în 84 de coordonate. Am găsit o mulțime de algoritmi pe Internet, iar majoritatea sunt limitate la un singur offset, adică schimbul dintre coordonatele Baidu și coordonatele Marte, schimbul dintre coordonatele Marte și cele ale Pământului etc., și există puține mențiuni despre coordonatele Baidu la 84 de coordonate. În această privință, am încercat să convertesc mai întâi coordonatele Baidu în coordonate Marte, apoi să convertesc coordonatele marțiene în cele de pe Pământ, dar rezultatul nu a fost satisfăcător, eroarea cea mai mică fiind 60 de metri, iar cea mai mare a fost chiar peste 600 de metri de eroare, așa că a trebuit să renunț. Nu voi mai posta algoritmul, studenții interesați pot căuta singuri pe Internet. Aici folosesc o metodă ingenioasă, metoda specifică este următoarea: Coordonatele Baidu și conversia coordonatelor GPS sunt foarte apropiate la distanțe mici. Să presupunem că ai coordonatele Baidu: x1=116.397428, y1=39.90923 Ia această coordonată ca GPS și obține coordonatele Baidu prin interfață: x2=116.41004950566, y2=39.916979519873
Coordonatele GPS-ului pot fi obținute prin calcul: x = 2*x1-x2,y = 2*y1-y2 x=116.38480649434001 y=39.901480480127。 Pentru a verifica acuratețea acestei metode, am luat coordonatele a 14 orașe importante din China, sud-est, nord-vest și nord-vest de China pentru testare, iar rezultatele au obținut o abatere de 13 metri și un minim de 0,x metri. Eroarea cuprinzătoare este de 6 metri. Rezultatele specifice ale testelor vor fi publicate ulterior. Permiteți-mi să desenez un diagramă simplă pentru a ilustra această problemă.
G reprezintă coordonatele originale neconvertite ale Pământului; B reprezintă coordonatele Baidu după ce G este convertit prin Baidu api; G' reprezintă coordonatele după ce punctul B este convertit prin API-ul Baidu; Presupunând că valoarea de deplasare după conversia coordonatelor Google în coordonate Baidu este mică, atunci coordonatele punctului G sunt perfect egale cu 2B-G'。 După verificare, valoarea de offset după conversia coordonatelor Google în coordonate Baidu este de aproximativ câteva sute de metri, ceea ce este de fapt neglijabil, așa că folosește această metodă pentru a rezolva problema bibliotecii de offset cu API-ul Baidu și apoi ignoră impactul conversiei valorilor de offset. Desigur, această metodă are și un mare dezavantaj, și anume că necesită ca aceste două puncte să fie în aceeași bază de date de offset, iar dacă se află în două biblioteci diferite de offset, eroarea poate fi relativ mare. În plus, există o altă metodă care este în prezent pregătită pentru cercetări ulterioare, și anume stabilirea unei biblioteci de offset și utilizarea acestei biblioteci de offset pentru a elimina și mai mult acest impact: încă urmează să fie studiată. Iată dezavantajul conversiei online: Instrumentul de conversie API online Baidu are de fapt o limită privind cantitatea de date convertite, fiecare cheie poate converti doar aproximativ 5.000 de date, iar un cont poate solicita până la 20 de chei, așa că, dacă cantitatea de date este mare, nu este recomandat să se folosească acest tip de conversie online, care este și scopul inițial de a studia biblioteca locală de offset. În plus, deoarece partea web poate fi mai restricționată, viteza rețelei, cererile concurente etc. pot afecta rezultatele și experiența utilizatorului, astfel încât metodele de mai sus sunt doar pentru referință.
|