Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11254|Atsakyti: 1

Baidu koordinatės konvertuojamos į WGS84 koordinates

[Kopijuoti nuorodą]
Paskelbta 2017-10-11 09:56:13 | | | |
Reikalavimai: Konvertuokite Baidu koordinates į WGS84 koordinates
Įgyvendinimas:
Visų pirma, leiskite man pristatyti daug sudėtingų koordinačių sistemų Kinijoje, kaip visi žinome, Jungtinių Amerikos Valstijų GPS naudoja WGS84 koordinates, tačiau Kinijoje saugumo sumetimais, kai žemėlapis išleidžiamas ir paskelbiamas, 84 koordinatės yra netiesinės ir šališkos, o gautos koordinatės vadinamos GCJ02 koordinačių sistemomis, paprastai žinomomis kaip Marso koordinatės. Be to, daugelis vietinių žemėlapių kompanijų, galbūt dėl verslo poreikių ar tam tikrų verslo konkurencijos priežasčių, atliko netiesinį nuokrypį pagal Marso koordinates ir gavo savo koordinačių sistemą. "Baidu" yra tokia įmonė. Baidu atliko BD-09 antrinį netiesinį poslinkį GCJ02 pagrindu ir gavo savo Baidu koordinačių sistemą. Tai gali būti naudinga pačios "Baidu" įmonei, tačiau mums, kūrėjams, tai tiesiog erzina.
Toliau pateikiamas trumpas įvadas į koordinačių sistemas, kurias naudoja kai kurie žemėlapių paslaugų teikėjai Kinijoje:



Šiuo metu "Baidu" teikia API koordinačių konvertavimui, http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude
į jį
• iš: Šaltinio koordinačių sistema (0 originalioms GPS koordinatėms, 2 Google koordinatėms)
• į: konvertuotos koordinatės (4 yra Baidu, tarsi tai turėtų būti 4)
• x: Tikslumas
• y: Platuma
Grąžintas rezultatas yra json eilutė: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"}
• klaida: yra klaidos ženklas bitas, o "0" rodo OK
• x: Baidu koordinačių sistemos tikslumas (Base64 šifravimas)
y: Baidu koordinačių sistemos platuma (Base64 šifravimas);
Šių dviejų skaičių reikšmę surinkau internete:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude
1: GPS įranga gautos kampinės koordinatės;
2: GPS gautos metrinės koordinatės, sogou žemėlapiuose naudojamos koordinatės;
3: "Google" žemėlapiuose, SOSO žemėlapiuose, Aliyun žemėlapiuose, "MapABC Maps" ir AMAP žemėlapiuose naudojamos koordinatės
4:3 Skaitiklio koordinatės, atitinkančios žemėlapio koordinates sąraše
5: Baidu žemėlapiuose naudojamos ilgumos ir platumos koordinatės
6: Baidu žemėlapių naudojamos metrinės koordinatės
7: žemėlapio juostos žemėlapio koordinatės;
8:51 Žemėlapio koordinatės Numatytasis nėra 1, t. y. GPS įrenginio gautos koordinatės
Paskirties koordinačių tipams yra dvi parinktys: 5, 6.
5: BD09LL (Baidu platumos ir ilgumos koordinatės),
6: BD09MC (platumos ir ilgumos koordinatės 100 laipsnių metrais); Ne Numatytasis yra 5, t.y. bd09ll (Baidu koordinatės)

Visi aukščiau išvardyti duomenys naudojami konvertuojant 84 koordinates į "Baidu" koordinates, žemiau pakalbėkime apie tai, kaip pasiekti atvirkštinį koordinačių konvertavimą, tai yra, "Baidu" koordinatės konvertuojamos į 84 koordinates.
Internete radau daug algoritmų, ir dauguma jų apsiriboja vienu poslinkiu, tai yra Baidu koordinačių ir Marso koordinačių mainais, Marso ir Žemės koordinačių mainais ir t.t., o Baidu koordinatės mažai minimos iki 84 koordinačių.
Šiuo atžvilgiu pirmiausia bandžiau konvertuoti Baidu koordinates į Marso koordinates, o tada konvertuoti Marso koordinates į Žemės koordinates, tačiau rezultatas nebuvo patenkinamas, mažiausia paklaida buvo 60 metrų, o didžiausia – net daugiau nei 600 metrų paklaida, todėl turėjau pasiduoti. Algoritmo nebeskelbsiu, susidomėję studentai gali eiti į internetą ir patys jį rasti.
Čia aš naudoju protingą metodą, konkretus metodas yra toks:
Baidu koordinatės ir GPS koordinačių konvertavimas yra labai arti artimu atstumu.
Tarkime, kad turite Baidu koordinates: x1=116.397428, y1=39.90923
Paimkite šią koordinatę kaip GPS koordinatę ir gaukite jo Baidu koordinates per sąsają: x2=116.41004950566, y2=39.916979519873

GPS koordinates galima gauti apskaičiuojant:
x = 2*x1-x2,y = 2*y1-y2
x=116.38480649434001
y=39.901480480127。
Norėdamas patikrinti šio metodo tikslumą, bandymui paėmiau 14 didžiųjų Kinijos miestų, pietryčių, šiaurės vakarų ir šiaurės vakarų Kinijos koordinates, o rezultatai buvo gauti su 13 metrų nuokrypiu ir mažiausiai 0,x metro. Išsami paklaida yra 6 metrai. Konkretūs testo rezultatai bus paskelbti vėliau.
Leiskite man nupiešti paprastą schemą, iliustruojančią šią problemą.



G reiškia pradines nekonvertuotas Žemės koordinates;
B reiškia Baidu koordinates po to, kai G konvertuojamas per Baidu api;
G' reiškia koordinates po taško B konvertavimo per Baidu API;
Darant prielaidą, kad poslinkio reikšmė konvertavus "Google" koordinates į "Baidu" koordinates yra maža, G taško koordinatės yra visiškai lygios
2B-G'。 Po patikrinimo poslinkio vertė konvertavus "Google" koordinates į "Baidu" koordinates yra apie kelis šimtus metrų, o tai iš tikrųjų yra nereikšminga, todėl naudokite šį metodą, kad išspręstumėte poslinkio bibliotekos problemą su "Baidu" API, o tada ignoruokite poslinkio reikšmių konvertavimo poveikį.
Žinoma, šis metodas taip pat turi didelį trūkumą, tai yra, jis reikalauja, kad šie du taškai būtų toje pačioje ofsetinėje duomenų bazėje, jei jis atsitiktų dviejose skirtingose ofsetinėse bibliotekose, klaida gali būti gana didelė.
Be to, yra dar vienas metodas, kuris šiuo metu ruošiamas tolesniems tyrimams, tai yra sukurti ofsetinę biblioteką ir naudoti šią ofsetinę biblioteką, kad būtų pašalintas šis poveikis: jis vis dar turi būti ištirtas.
Štai internetinės konversijos trūkumas: "Baidu" internetinis API konvertavimo įrankis iš tikrųjų turi konvertuojamų duomenų kiekio apribojimą, kiekvienas raktas gali konvertuoti tik apie 5,000 duomenų vienetų, o paskyra gali kreiptis dėl iki 20 raktų, taigi, jei duomenų kiekis yra didelis, iš tikrųjų nerekomenduojama naudoti tokio tipo internetinės konversijos, o tai taip pat yra pradinis ketinimas studijuoti vietinę ofsetinę biblioteką. Be to, kadangi žiniatinklio pusė gali būti labiau apribota, tinklo greitis, vienu metu atliekamos užklausos ir kt. gali turėti įtakos rezultatams ir vartotojo patirčiai, todėl aukščiau pateikti metodai yra tik nuoroda.





Ankstesnis:Javascrip{filter}tmodule - įkelti modulį require.js
Kitą:Naudokite "Ajax" metodą, kad JSON duomenys būtų paskelbti fone
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com