Krav: Konvertera Baidu-koordinater till WGS84-koordinater Implementering: Först och främst vill jag introducera många komplicerade koordinatsystem i Kina, som vi alla vet använder USA:s GPS WGS84-koordinater, men i Kina, av säkerhetsskäl, när kartan släpps och publiceras, är de 84 koordinaterna icke-linjära och snedvridna, och de erhållna koordinaterna kallas GCJ02-koordinatsystem, allmänt kända som Mars-koordinater. Dessutom har många inhemska kartföretag, kanske på grund av affärsbehov eller någon anledning till affärskonkurrens, genomfört en icke-linjär avvikelse baserat på Mars-koordinater och fått sitt eget koordinatsystem. Baidu är ett sådant företag. Baidu genomförde BD-09 sekundär icke-linjär bias baserat på GCJ02 och fick sitt eget Baidu-koordinatsystem. Detta kan vara fördelaktigt för Baidus eget företag, men för oss utvecklare är det helt enkelt irriterande. Följande är en kort introduktion till koordinatsystemen som används av vissa karttjänstleverantörer i Kina:
För närvarande tillhandahåller Baidu ett API för koordinatkonvertering, http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude därin • från: Källkoordinatsystem (0 för ursprungliga GPS-koordinater, 2 för Google-koordinater) • till: Omvandlade koordinater (4 är Baidus egna, som om detta måste vara 4) • x: Precision • y: Latitud Resultatet som returneras är en json-sträng: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"} • fel: är felmarkeringsbiten, och "0" indikerar OK • x: Noggrannhet i Baidu-koordinatsystemet (Base64-kryptering) y: Latitude of Baidu-koordinatsystemet (Base64-kryptering); Jag samlade in betydelsen av dessa två siffror online:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude 1: Vinkelkoordinater erhållna med GPS-utrustning; 2: Metriska koordinater erhållna med GPS, koordinater som används i sogou-kartor; 3: Koordinater som används för Google Maps, SOSO Maps, Aliyun Maps, MapABC Maps och AMAP Maps 4:3 Mätarkoordinaterna som motsvarar kartans koordinater i listan 5: Längd- och latitudkoordinaterna som används av Baidu Maps 6: Metriska koordinater som används av Baidu Maps 7: koordinater för mapbar-kartan; 8:51 Kartkoordinater Ingen standard är 1, vilket är koordinaterna som GPS-enheten erhåller För destinationskoordinattyper finns två alternativ: 5, 6. 5: BD09LL (Baidu-latitud- och longitudkoordinater), 6: BD09MC (latitud- och longitudkoordinater i 100 grader); Nej Standardvärdet är 5, dvs. bd09ll (Baidu-koordinater)
Ovanstående används alla för att konvertera 84 koordinater till Baidu-koordinater, nedan ska vi prata om hur man åstadkommer omvänd omvandling av koordinater, det vill säga Baidu-koordinater omvandlas till 84 koordinater. Jag hittade många algoritmer på internet, och de flesta är begränsade till en offset, det vill säga utbytet mellan Baidu-koordinater och Mars-koordinater, utbytet mellan Mars-koordinater och jordkoordinater, osv., och det finns lite omnämnande av Baidu-koordinater till 84 koordinater. I detta avseende försökte jag först konvertera Baidu-koordinater till Mars-koordinater, och sedan konvertera Mars-koordinaterna till jord-koordinater, men resultatet var inte tillfredsställande, det lägsta felet var 60 meter och det högsta var till och med mer än 600 meters fel, så jag var tvungen att ge upp. Jag kommer inte att lägga ut algoritmen mer, intresserade studenter kan gå till internet och hitta den själva. Här använder jag en smart metod, den specifika metoden är följande: Baidu-koordinater och GPS-koordinatomvandling är mycket nära på nära håll. Antag att du har Baidu-koordinater: x1=116,397428, y1=39,90923 Ta denna koordinat som en GPS-koordinat och hämta hans Baidu-koordinater via gränssnittet: x2=116.41004950566, y2=39.916979519873
GPS:ens koordinater kan erhållas genom beräkning: x = 2*x1-x2,y = 2*y1-y2 x=116.38480649434001 y=39.901480480127。 För att verifiera metodens noggrannhet tog jag koordinaterna för 14 större städer i Kina, sydost, nordväst och nordväst om Kina för testning, och resultaten gav resultat med en avvikelse på 13 meter och minst 0,x meter. Det totala felet är 6 meter. De specifika testresultaten kommer att publiceras senare. Låt mig rita ett enkelt diagram för att illustrera detta problem.
G representerar de ursprungliga okonverterade jordkoordinaterna; B representerar Baidu-koordinaterna efter att G konverterats genom Baidu api; G' representerar koordinaterna efter att punkt B konverterats via Baidu API; Om vi antar att offsetvärdet efter att Google-koordinater konverterats till Baidu-koordinater är litet, är G-punktskoordinaterna helt lika med 2B-G'。 Efter verifiering är offsetvärdet efter att Google-koordinater konverterats till Baidu-koordinater ungefär några hundra meter, vilket faktiskt är försumbart, så använd denna metod för att lösa problemet med offset-biblioteket med Baidus eget API, och ignorera sedan effekten av att konvertera offset-värden. Naturligtvis har denna metod också en stor nackdel, nämligen att den kräver att dessa två punkter måste finnas i samma offset-databas, och om den råkar vara placerad i två olika offsetbibliotek kan felet vara relativt stort. Dessutom finns det en annan metod som för närvarande förbereds för vidare forskning, nämligen att etablera ett offsetbibliotek och använda detta offsetbibliotek för att ytterligare eliminera denna påverkan: det återstår att studera. Här är nackdelen med onlinekonvertering: Baidus online-API-konverteringsverktyg har faktiskt en gräns för mängden data som konverteras, varje nyckel kan bara konvertera cirka 5 000 datastycken, och ett konto kan ansöka om upp till 20 nycklar, så om datamängden är stor rekommenderas det faktiskt inte att använda denna typ av onlinekonvertering, vilket också är den ursprungliga avsikten med att studera det lokala offsetbiblioteket. Dessutom, eftersom webbsidan kan vara mer begränsad, kan nätverkshastighet, samtidiga förfrågningar etc. påverka resultaten och användarupplevelsen, så ovanstående metoder är endast för referens.
|