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.
|