Requisitos: Converter coordenadas Baidu para coordenadas WGS84 Implementação: Primeiramente, deixe-me apresentar muitos sistemas de coordenadas complicados na China, como todos sabemos, o GPS dos Estados Unidos usa coordenadas WGS84, mas na China, por razões de segurança, quando o mapa é divulgado e publicado, as 84 coordenadas são não lineares e tendenciosas, e as coordenadas obtidas são chamadas de sistemas de coordenadas GCJ02, comumente conhecidos como coordenadas de Marte. Além disso, muitas empresas de mapas domésticas, talvez devido a necessidades comerciais ou por motivos de concorrência comercial, realizaram um desvio não linear com base nas coordenadas de Marte e obtiveram seu próprio sistema de coordenadas. A Baidu é uma dessas empresas. A Baidu realizou o viés secundário não linear BD-09 com base no GCJ02 e obteve seu próprio sistema de coordenadas Baidu. Isso pode ser benéfico para a própria empresa da Baidu, mas para nós, desenvolvedores, é simplesmente irritante. A seguir, uma breve introdução aos sistemas de coordenadas usados por alguns provedores de serviços de mapas na China:
Atualmente, a Baidu fornece uma API para conversão de coordenadas, http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude a partir daí • de: Sistema de coordenadas de origem (0 para coordenadas GPS originais, 2 para coordenadas Google) • para: Coordenadas convertidas (4 é da própria Baidu, como se isso tivesse que ser 4) • x: Precisão • y: Latitude O resultado retornado é uma string json: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"} • erro: é o bit de marca de erro, e "0" indica OK • x: Precisão do sistema de coordenadas Baidu (criptografia Base64) y: Latitude do sistema de coordenadas Baidu (criptografia Base64); Eu coletei o significado desses dois números online:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude 1: Coordenadas angulares obtidas por equipamentos GPS; 2: Coordenadas métricas obtidas por GPS, coordenadas usadas em mapas sogou; 3: Coordenadas usadas para Google Maps, SOSO Maps, Aliyun Maps, MapABC Maps e AMAP Maps 4:3 As coordenadas métricas correspondentes às coordenadas do mapa na lista 5: As coordenadas de longitude e latitude usadas pelos Mapas Baidu 6: Coordenadas métricas usadas pelos Baidu Maps 7: coordenadas do mapa da barra do mapa; 8:51 Coordenadas do mapa Nenhum padrão é 1, que são as coordenadas obtidas pelo dispositivo GPS Para os tipos de coordenadas de destino, existem duas opções: 5, 6. 5: BD09LL (coordenadas de latitude e longitude de Baidu), 6: BD09MC (coordenadas de latitude e longitude em 100 graus); Não. O padrão é 5, ou seja, bd09ll (coordenadas Baidu)
As informações acima são todas usadas para converter 84 coordenadas para coordenadas Baidu; abaixo, vamos falar sobre como realizar a conversão reversa das coordenadas, ou seja, as coordenadas Baidu são convertidas para 84 coordenadas. Encontrei muitos algoritmos na Internet, e a maioria deles é limitada a um único deslocamento, ou seja, a troca entre coordenadas Baidu e Marte, a intercâmbio entre coordenadas Marte e Terra, etc., e há pouca menção às coordenadas Baidu para 84 coordenadas. Nesse sentido, tentei converter as coordenadas de Baidu para as de Marte primeiro, e depois converter as coordenadas marcianas para as da Terra, mas o resultado não foi satisfatório, o menor erro foi 60 metros, e o máximo foi até mais de 600 metros, então tive que desistir. Não vou mais postar o algoritmo, estudantes interessados podem procurar na Internet para encontrá-lo sozinhos. Aqui, uso um método inteligente, o método específico é o seguinte: As coordenadas Baidu e a conversão de coordenadas GPS são muito próximas a distâncias próximas. Suponha que você tenha as coordenadas Baidu: x1=116.397428, y1=39.90923 Pegue essa coordenada como uma coordenada GPS e obtenha as coordenadas Baidu dele pela interface: x2=116,41004950566, y2=39,916979519873
As coordenadas do GPS podem ser obtidas por meio do cálculo: x = 2*x1-x2,y = 2*y1-y2 x=116.38480649434001 y=39.901480480127。 Para verificar a precisão desse método, usei as coordenadas de 14 grandes cidades da China, sudeste, noroeste e noroeste da China para testes, e os resultados obtiveram um desvio de 13 metros e mínimo 0,x metros. O erro de abrangência é de 6 metros. Os resultados específicos dos testes serão publicados posteriormente. Deixe-me desenhar um diagrama simples para ilustrar essa questão.
G representa as coordenadas originais da Terra não convertidas; B representa as coordenadas Baidu após a conversão de G através da API Baidu; G' representa as coordenadas após o ponto B ser convertido via API Baidu; Assumindo que o valor do deslocamento após converter coordenadas do Google para coordenadas Baidu é pequeno, então as coordenadas do ponto G são perfeitamente iguais a 2B-G'。 Após a verificação, o valor de offset após converter as coordenadas do Google para as coordenadas do Baidu é de cerca de algumas centenas de metros, o que na verdade é desprezível, então use esse método para resolver o problema da biblioteca de offset com a própria API do Baidu, e então ignore o impacto da conversão dos valores de offset. Claro, esse método também tem uma grande desvantagem, ou seja, exige que esses dois pontos estejam no mesmo banco de dados de offset; se estiver localizado em duas bibliotecas de offset diferentes, o erro pode ser relativamente grande. Além disso, há outro método que está sendo preparado para pesquisas futuras, que é estabelecer uma biblioteca offset e usar essa biblioteca offset para eliminar ainda mais esse impacto: ainda está a ser estudado. Aqui está a desvantagem da conversão online: a ferramenta de conversão online da API Baidu tem um limite para a quantidade de dados convertidos, cada chave pode converter apenas cerca de 5.000 dados, e uma conta pode solicitar até 20 chaves, então, se a quantidade de dados for grande, não é recomendado usar esse tipo de conversão online, que também é a intenção original de estudar a biblioteca local de offsets. Além disso, como o lado web pode ser mais restrito, a velocidade da rede, requisições concorrentes, etc., podem afetar os resultados e a experiência do usuário, então os métodos acima são apenas para referência.
|