Krav: Konverter Baidu-koordinater til WGS84-koordinater Implementering: Først og fremmest vil jeg introducere mange komplicerede koordinatsystemer i Kina; som vi alle ved, bruger den amerikanske GPS WGS84-koordinater, men i Kina, af sikkerhedsmæssige årsager, er de 84 koordinater, når kortet frigives og offentliggøres, ikke-lineære og skæve, og de opnåede koordinater kaldes GCJ02-koordinatsystemer, almindeligvis kendt som Mars-koordinater. Derudover har mange indenlandske kortfirmaer, måske på grund af forretningsbehov eller visse årsager til forretningskonkurrence, udført en ikke-lineær afvigelse på basis af Mars-koordinater og opnået deres eget koordinatsystem. Baidu er sådan et firma. Baidu udførte BD-09 sekundær ikke-lineær bias på basis af GCJ02 og opnåede sit eget Baidu-koordinatsystem. Det kan være gavnligt for Baidus eget firma, men for os udviklere er det simpelthen irriterende. Følgende er en kort introduktion til koordinatsystemer, der bruges af nogle korttjenesteudbydere i Kina:
I øjeblikket tilbyder Baidu et API til koordinatkonvertering, http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude derind • fra: Kildekoordinatsystem (0 for originale GPS-koordinater, 2 for Google-koordinater) • til: Konverterede koordinater (4 er Baidus egne, som om dette må være 4) • x: Præcision • y: Breddegrad Resultatet, der returneres, er en json-streng: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"} • fejl: er fejlmarkørbitet, og "0" angiver OK • x: Nøjagtigheden af Baidu-koordinatsystemet (Base64-kryptering) y: Latitude of Baidu koordinatsystem (Base64-kryptering); Jeg samlede betydningen af disse to tal online:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude 1: Vinkelkoordinater opnået af GPS-udstyr; 2: Metriske koordinater opnået med GPS, koordinater brugt i sogou-kort; 3: Koordinater brugt til Google Maps, SOSO Maps, Aliyun Maps, MapABC Maps og AMAP Maps 4:3 De målerkoordinater, der svarer til koordinaterne for kortet i listen 5: Længde- og breddegradskoordinaterne brugt af Baidu-kort 6: Metriske koordinater brugt af Baidu Maps 7: koordinater på mapbar-kortet; 8:51 Kortkoordinater Ingen standard er 1, hvilket er koordinaterne opnået af GPS-enheden Der er to muligheder for destinationskoordinattyper: 5, 6. 5: BD09LL (Baidu-bredde- og længdekoordinater), 6: BD09MC (bredde- og længdegradskoordinater i 100 graders afstand); Nej Standarden er 5, dvs. bd09ll (Baidu-koordinater)
Ovenstående bruges alle til at konvertere 84 koordinater til Baidu-koordinater, nedenfor lad os tale om, hvordan man opnår omvendt konvertering af koordinater, det vil sige, Baidu-koordinater konverteres til 84 koordinater. Jeg fandt mange algoritmer på internettet, og de fleste er begrænset til én offset, altså udvekslingen mellem Baidu-koordinater og Mars-koordinater, udvekslingen mellem Mars-koordinater og Jordens koordinater osv., og der nævnes kun lidt om Baidu-koordinater til 84 koordinater. I den forbindelse forsøgte jeg først at konvertere Baidu-koordinater til Mars-koordinater og derefter konvertere Mars-koordinaterne til Jordens koordinater, men resultatet var ikke tilfredsstillende, den laveste fejl var 60 meter, og den højeste var endda mere end 600 meters fejl, så jeg måtte opgive. Jeg vil ikke poste algoritmen mere, interesserede studerende kan selv gå på internettet for at finde den. Her bruger jeg en klog metode, den specifikke metode er som følger: Baidu-koordinater og GPS-koordinatkonvertering er meget tæt på hinanden på kort afstand. Antag, at du har Baidu-koordinater: x1=116,397428, y1=39,90923 Tag denne koordinat som en GPS-koordinat og få hans Baidu-koordinater gennem interfacet: x2=116.41004950566, y2=39.916979519873
GPS'ens koordinater kan opnås ved beregning: x = 2*x1-x2,y = 2*y1-y2 x=116.38480649434001 y=39.901480480127。 For at verificere nøjagtigheden af denne metode tog jeg koordinaterne for 14 større byer i Kina, sydøst, nordvest og nordvest for Kina, til test, og resultaterne opnåede resultater med en afvigelse på 13 meter og mindst 0,x meter. Den omfattende fejl er 6 meter. De specifikke testresultater vil blive offentliggjort senere. Lad mig tegne et simpelt diagram for at illustrere dette problem.
G repræsenterer de oprindelige ukonverterede jordkoordinater; B repræsenterer Baidu-koordinaterne efter G er konverteret gennem Baidu api; G' repræsenterer koordinaterne efter at punkt B er konverteret gennem Baidu API; Hvis man antager, at offset-værdien efter at have konverteret Google-koordinater til Baidu-koordinater er lille, så er G-punktets koordinater perfekt lig med 2B-G'。 Efter verifikation er offset-værdien efter konvertering af Google-koordinater til Baidu-koordinater omkring et par hundrede meter, hvilket faktisk er ubetydeligt, så brug denne metode til at løse problemet med offset-biblioteket med Baidus eget API, og ignorer derefter effekten af at konvertere offset-værdier. Selvfølgelig har denne metode også en stor ulempe, nemlig at den kræver, at disse to punkter skal være i den samme offset-database; hvis den tilfældigvis er placeret i to forskellige offset-biblioteker, kan fejlen være relativt stor. Derudover er der en anden metode, der i øjeblikket udarbejdes til videre forskning, nemlig at etablere et offset-bibliotek og bruge dette offset-bibliotek til yderligere at eliminere denne påvirkning: det mangler stadig at blive studeret. Her er ulempen ved online konvertering: Baidu online API-konverteringsværktøj har faktisk en grænse for, hvor meget data der konverteres, hver nøgle kan kun konvertere omkring 5.000 datastykker, og en konto kan ansøge om op til 20 nøgler, så hvis mængden af data er stor, anbefales det faktisk ikke at bruge denne type online konvertering, hvilket også var den oprindelige hensigt med at studere det lokale offset-bibliotek. Derudover, fordi websiden kan være mere begrænset, kan netværkshastighed, samtidige forespørgsler osv. påvirke resultaterne og brugeroplevelsen, så ovenstående metoder er kun til reference.
|