요구사항: 바이두 좌표를 WGS84 좌표로 변환 구현: 우선, 중국의 복잡한 좌표계를 소개하겠습니다. 미국 GPS는 WGS84 좌표를 사용하지만, 중국에서는 보안상의 이유로 지도가 공개될 때 84 좌표가 비선형적이고 편향되어 있으며, 얻은 좌표를 GCJ02 좌표계, 즉 화성 좌표라고 부릅니다. 또한, 많은 국내 지도 회사들은 사업적 필요나 경쟁의 이유로 화성 좌표를 기반으로 비선형 편차를 수행하고 자체 좌표계를 확보했습니다. 바이두가 바로 그런 회사입니다. 바이두는 GCJ02를 기반으로 BD-09 2차 비선형 바이어스를 수행하고 자체 바이두 좌표계를 획득했습니다. 이것이 바이두 자체 회사에는 도움이 될 수 있지만, 우리 개발자들에게는 단지 짜증나는 일일 뿐입니다. 다음은 중국의 일부 지도 서비스 제공업체들이 사용하는 좌표계에 대한 간략한 소개입니다:
현재 바이두는 좌표 변환을 위한 API를 제공하고 있습니다 http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude 그곳으로 • 출처: 소스 좌표계 (원본 GPS 좌표는 0, 구글 좌표는 2) • 변환: 좌표 변환 (4는 바이두의 좌표로, 반드시 4일 필요 없음) • x: 정밀도 • y: 위도 결과는 json 문자열입니다: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"} • error: 오류 마크 비트이며, "0"은 OK를 의미합니다 • x: 바이두 좌표계 정확도(Base64 암호화) y: 바이두 좌표계의 위도(Base64 암호화); 이 두 숫자의 의미를 온라인에서 수집했습니다:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude 1: GPS 장비로 얻은 각도 좌표; 2: GPS로 얻은 미터 좌표, 소구우 지도에서 사용되는 좌표; 3: 구글 지도, SOSO 지도, 알리윤 지도, MapABC 지도, AMAP 지도에 사용되는 좌표 4:3 미터 좌표는 목록에 있는 지도 좌표에 해당합니다 5: 바이도 지도에서 사용하는 경도와 위도 좌표 6: 바이두 지도에서 사용하는 미터법 좌표 7: 맵바 지도 좌표; 8:51 지도 좌표 기본값은 1이 없으며, 이는 GPS 장치가 얻은 좌표입니다 목적지 좌표 유형에는 두 가지 옵션이 있습니다: 5, 6. 5: BD09LL (바이두 위도 및 경도 좌표), 6: BD09MC (위도 및 경도 좌표 100미터); 아니요 기본값은 5입니다. 즉, bd09ll(바이두 좌표)입니다.
위 모든 방법은 84 좌표를 바이두 좌표로 변환하는 데 사용되며, 아래에서는 좌표의 역변환, 즉 바이두 좌표를 84 좌표로 변환하는 방법에 대해 이야기하겠습니다. 인터넷에서 많은 알고리즘을 찾았는데, 대부분은 바이두 좌표와 화성 좌표 간의 교환, 화성 좌표와 지구 좌표 간의 교환 등으로 제한되어 있고, 바이두 좌표가 84 좌표에 대한 언급은 거의 없습니다. 이와 관련해 바이두 좌표를 화성 좌표로 변환한 뒤, 화성 좌표를 지구 좌표로 변환해 보려 했지만, 결과는 만족스럽지 못했고, 가장 작은 오차는 60미터였으며, 가장 큰 오차는 600미터가 넘었기에 포기할 수밖에 없었다. 더 이상 알고리즘을 게시하지 않겠습니다. 관심 있는 학생들은 직접 인터넷에서 찾아보실 수 있습니다. 여기서는 영리한 방법을 사용합니다. 구체적인 방법은 다음과 같습니다: 바이두 좌표와 GPS 좌표 변환은 가까운 거리에서도 매우 가깝습니다. 예를 들어 바이두 좌표가 x1=116.397428, y1=39.90923이라고 가정해 봅시다 이 좌표를 GPS 좌표로 받아들이고 인터페이스를 통해 그의 바이두 좌표를 받아보세요: x2=116.41004950566, y2=39.916979519873
GPS의 좌표는 다음과 같은 계산을 통해 얻을 수 있습니다: x = 2*x1-x2, y = 2*y1-y2 x=116.38480649434001 y=39.901480480127. 이 방법의 정확성을 검증하기 위해 중국 남동부, 북서부, 북서부 등 14개 주요 도시의 좌표를 시험했으며, 결과는 13미터의 편차와 최소 0.x 미터의 차이를 보였습니다. 종합 오차는 6미터입니다. 구체적인 검사 결과는 추후에 게시될 예정입니다. 이 문제를 설명하기 위해 간단한 도표를 그려보겠습니다.
G는 원래 변환되지 않은 지구 좌표를 나타내며; B는 G가 바이두 API를 통해 변환된 후 바이두 좌표를 나타냅니다; G'는 B점이 바이두 API를 통해 변환된 후의 좌표를 나타냅니다; 구글 좌표를 바이두 좌표로 변환한 후 오프셋 값이 작다고 가정하면, G점 좌표는 완벽하게 다음과 같습니다. 2B-G'. 검증 후 구글 좌표를 바이두 좌표로 변환한 오프셋 값은 약 수백 미터 정도로, 사실 무시할 수 있는 수준입니다. 따라서 이 방법으로 바이두의 자체 API로 오프셋 라이브러리 문제를 해결하고, 오프셋 값을 변환하는 영향은 무시하세요. 물론 이 방법에는 큰 단점도 있는데, 두 지점이 반드시 같은 오프셋 데이터베이스에 있어야 하며, 만약 두 개의 다른 오프셋 라이브러리에 위치해 있다면 오차가 비교적 클 수 있습니다. 또한, 현재 추가 연구를 위해 준비 중인 또 다른 방법이 있는데, 이는 오프셋 라이브러리를 구축하고 이 오프셋 라이브러리를 이용해 이 영향을 더욱 제거하는 것입니다. 이 방법은 아직 연구되지 않았습니다. 온라인 변환의 단점은 다음과 같습니다: 바이두 온라인 API 변환 도구는 변환 데이터 양에 제한이 있으며, 각 키는 약 5,000개의 데이터만 변환할 수 있고, 계정은 최대 20개의 키를 신청할 수 있습니다. 따라서 데이터 양이 많을 경우 이러한 온라인 변환 방식을 사용하는 것은 권장되지 않습니다. 이는 지역 오프셋 라이브러리를 연구하는 원래 의도이기도 합니다. 또한 웹 측이 더 제한적일 수 있어 네트워크 속도, 동시 요청 등이 결과와 사용자 경험에 영향을 미칠 수 있으므로, 위의 방법은 참고용일 뿐입니다.
|