Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 11254|Antwoord: 1

Baidu-coördinaten worden omgezet naar WGS84-coördinaten

[Link kopiëren]
Geplaatst op 11-10-2017 09:56:13 | | | |
Vereisten: Zet Baidu-coördinaten om naar WGS84-coördinaten
Implementatie:
Allereerst wil ik veel ingewikkelde coördinatensystemen in China introduceren; zoals we allemaal weten, gebruikt de Amerikaanse GPS WGS84-coördinaten, maar in China, om veiligheidsredenen, zijn de 84 coördinaten bij het vrijgeven en publiceren van de kaart niet-lineair en bevooroordeeld, en de verkregen coördinaten worden GCJ02-coördinatensystemen genoemd, algemeen bekend als Marscoördinaten. Daarnaast hebben veel binnenlandse kaartbedrijven, mogelijk vanwege zakelijke behoeften of vanwege zakelijke concurrentie, een niet-lineaire afwijking uitgevoerd op basis van Mars-coördinaten en hun eigen coördinatensysteem verkregen. Baidu is zo'n bedrijf. Baidu voerde BD-09 secundaire niet-lineaire bias uit op basis van GCJ02 en verkreeg een eigen Baidu-coördinatensysteem. Dit kan voordelig zijn voor Baidu's eigen bedrijf, maar voor ons ontwikkelaars is het gewoon irritant.
Hieronder volgt een korte introductie tot de coördinatensystemen die door sommige kaartdienstverleners in China worden gebruikt:



Momenteel biedt Baidu een API voor coördinatenconversie, http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude
daarin
• van: Broncoördinatensysteem (0 voor originele GPS-coördinaten, 2 voor Google-coördinaten)
• naar: Omgezette coördinaten (4 is die van Baidu, alsof dit 4 moet zijn)
• x: Precisie
• y: Breedtegraad
Het resultaat dat wordt teruggegeven is een json-string: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"}
• fout: is het foutmarkeringsbit, en "0" geeft OK aan
• x: Nauwkeurigheid van het Baidu-coördinatensysteem (Base64-encryptie)
y: Breedtegraad van Baidu-coördinatensysteem (Base64-encryptie);
Ik heb de betekenis van deze twee nummers online verzameld:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude
1: Hoekcoördinaten verkregen door GPS-apparatuur;
2: Metrische coördinaten verkregen met GPS, coördinaten gebruikt in sogou-kaarten;
3: Coördinaten gebruikt voor Google Maps, SOSO Maps, Aliyun Maps, MapABC Maps en AMAP Maps
4:3 De metercoördinaten die overeenkomen met de coördinaten van de kaart in de lijst
5: De lengte- en breedtegraadcoördinaten gebruikt door Baidu Maps
6: Metrische coördinaten gebruikt door Baidu Maps
7: coördinaten van mapbarkaart;
8:51 Kaartcoördinaten Geen standaard is 1, wat de coördinaten zijn die door het GPS-apparaat worden verkregen
Voor bestemmingscoördinatentypen zijn er twee opties: 5, 6.
5: BD09LL (Baidu breedte- en lengtegraadcoördinaten),
6: BD09MC (breedtegraad- en lengtegraadcoördinaten in 100 graden); Nee. De standaard is 5, dus bd09ll (Baidu-coördinaten).

Bovenstaande worden allemaal gebruikt om 84 coördinaten om te zetten naar Baidu-coördinaten; hieronder bespreken we hoe we de omgekeerde conversie van coördinaten kunnen bereiken, dat wil zeggen, Baidu-coördinaten worden omgezet naar 84 coördinaten.
Ik vond veel algoritmen op internet, en de meeste zijn beperkt tot één offset, dat wil zeggen de uitwisseling tussen Baidu-coördinaten en Mars-coördinaten, de uitwisseling tussen Mars-coördinaten en aarde-coördinaten, enzovoort, en er wordt weinig melding gemaakt van Baidu-coördinaten naar 84 coördinaten.
In dit opzicht probeerde ik eerst Baidu-coördinaten om te zetten naar Mars-coördinaten, en daarna de Marscoördinaten naar aardcoördinaten, maar het resultaat was niet bevredigend, de laagste fout was 60 meter en de meeste was zelfs meer dan 600 meter fout, dus moest ik opgeven. Ik zal het algoritme niet meer plaatsen, geïnteresseerde studenten kunnen het zelf op internet zoeken.
Hier gebruik ik een slimme methode, de specifieke methode is als volgt:
Baidu-coördinaten en GPS-coördinatenconversie zijn zeer dicht bij elkaar op korte afstand.
Stel dat je Baidu-coördinaten hebt: x1=116,397428, y1=39,90923
Neem deze coördinaat als GPS-coördinaat en haal zijn Baidu-coördinaten via de interface: x2=116.41004950566, y2=39.916979519873

De coördinaten van de GPS kunnen worden verkregen door te berekenen:
x = 2*x1-x2,y = 2*y1-y2
x=116.38480649434001
y=39.901480480127。
Om de nauwkeurigheid van deze methode te verifiëren, nam ik de coördinaten van 14 grote steden in China, zuidoost, noordwest en noordwest van China, voor testen, en de resultaten leverden een afwijking van 13 meter en minimaal 0,x meter op. De algemene fout is 6 meter. De specifieke testresultaten worden later geplaatst.
Laat me een eenvoudig diagram tekenen om dit probleem te illustreren.



G vertegenwoordigt de oorspronkelijke niet-omgezette aardcoördinaten;
B vertegenwoordigt de Baidu-coördinaten nadat G is omgezet via Baidu api;
G' vertegenwoordigt de coördinaten nadat punt B is omgezet via Baidu API;
Aangenomen dat de offsetwaarde na het omzetten van Google-coördinaten naar Baidu-coördinaten klein is, dan zijn de G-puntcoördinaten perfect gelijk aan
2B-G'。 Na verificatie is de offsetwaarde na het omzetten van Google-coördinaten naar Baidu-coördinaten ongeveer enkele honderden meters, wat eigenlijk verwaarloosbaar is, dus gebruik deze methode om het probleem van offsetbibliotheek op te lossen met Baidu's eigen API, en negeer vervolgens de impact van het converteren van offsetwaarden.
Natuurlijk heeft deze methode ook een groot nadeel, namelijk dat deze twee punten in dezelfde offsetdatabase moeten staan; als deze toevallig in twee verschillende offsetbibliotheken liggen, kan de fout relatief groot zijn.
Daarnaast is er momenteel een andere methode in voorbereiding voor verder onderzoek, namelijk het opzetten van een offsetbibliotheek en het gebruiken van deze offsetbibliotheek om deze impact verder te elimineren: deze moet nog worden bestudeerd.
Hier is het nadeel van online conversie: de Baidu online API-conversietool heeft eigenlijk een limiet aan de hoeveelheid data die wordt omgezet, elke sleutel kan slechts ongeveer 5.000 datastukken converteren, en een account kan tot 20 sleutels aanvragen, dus als de hoeveelheid data groot is, wordt het eigenlijk niet aanbevolen om dit soort online conversie te gebruiken, wat ook het oorspronkelijke doel was van het bestuderen van de lokale offsetbibliotheek. Bovendien, omdat de webzijde mogelijk beperkter is, kunnen netwerksnelheid, gelijktijdige verzoeken, enzovoort de resultaten en de gebruikerservaring beïnvloeden, dus de bovenstaande methoden zijn alleen ter referentie.





Vorig:Javascrip{filter}tmodule - load module require.js
Volgend:Gebruik de Ajax-methode om JSON-data naar de achtergrond te POST
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com