Требования: Преобразовать координаты Baidu в координаты WGS84 Реализация: Прежде всего, позвольте представить множество сложных систем координат в Китае: как всем известно, в США GPS используются координаты WGS84, но в Китае, по соображениям безопасности, когда карта публикуется, 84 координаты нелинейные и смещеные, а полученные координаты называются системами координат GCJ02, обычно известными как координаты Марса. Кроме того, многие отечественные картографические компании, возможно, из-за бизнес-потребностей или по причинам коммерческой конкуренции, совершили нелинейное отклонение на основе марсианских координат и получили собственную систему координат. Baidu — такая компания. Baidu провела вторичное нелинейное смещение BD-09 на основе GCJ02 и получила собственную систему по координатам Baidu. Это может быть полезно самой компании Baidu, но для нас, разработчиков, это просто раздражает. Ниже приведено краткое введение в координатные системы, используемые некоторыми поставщиками картографических услуг в Китае:
В настоящее время Baidu предоставляет API для преобразования координат http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude В это ввод • из: Исходная система координат (0 для исходных GPS-координат, 2 для координат Google) • в: Преобразованные координаты (4 — это собственные координаты Baidu, как будто это должно быть 4) • x: Точность • y: широта В результате получается json-строка: {"error":0,"x":"MTIxLjUwMDIyODIxNDk2","y":"MzEuMjM1ODUwMjYwMTE3"} • ошибка: это бит метки ошибки, а «0» означает OK • x: Точность системы координат Baidu (шифрование Base64) y: широта системы Байду (шифрование Base64); Я собрал значение этих двух чисел в интернете:
http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude 1: Угловые координаты, полученные GPS-оборудованием; 2: Метрические координаты, полученные с помощью GPS, координаты, используемые в картах sogou; 3: Координаты, используемые для Google Maps, SOSO Maps, Aliyun Maps, MapABC и AMAP Maps 4:3 Координаты метра, соответствующие координатам карты в списке 5: координаты долготы и широты, используемые Baidu Maps 6: метрические координаты, используемые Baidu Maps 7: координаты карты на полосе карты; 8:51 Координаты карты По умолчанию нет 1, это координаты, полученные GPS-устройством Для типов координат назначения есть два варианта: 5, 6. 5: BD09LL (координаты широты и долготы Байду), 6: BD09MC (координаты широты и долготы в 100 градусах метров); Нет. По умолчанию — 5, то есть bd09ll (координаты Baidu)
Все вышеуказанные используются для преобразования 84 координат в координаты Baidu, ниже давайте поговорим о том, как добиться обратного преобразования координат, то есть Baidu в 84 координаты. Я нашёл много алгоритмов в интернете, и большинство из них ограничены одним смещением, то есть обменом между координатами Байду и Марса координатами, обменом координатами Марса и Земли и так далее, и мало упоминаний о координатах Байду до 84 координат. В этом отношении я пытался сначала преобразовать координаты Байду в марсианские, а затем марсианские координаты в координаты Земли, но результат был неудовлетворительным: минимальная ошибка составляла 60 метров, а максимальная — даже более 600 метров, поэтому пришлось сдаться. Я больше не буду публиковать алгоритм, заинтересованные студенты могут самостоятельно найти его в интернете. Здесь я использую хитрый метод, конкретный метод таков: Координаты Baidu и преобразование GPS-координат очень близки на близких расстояниях. Предположим, что у вас есть координаты Baidu: x1=116.397428, y1=39.90923 Возьмите эту координату как GPS-координату и получите его координаты Baidu через интерфейс: 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 обозначает координаты Baidu после преобразования G через API Baidu; G' обозначает координаты после преобразования точки B через Baidu API; Если предположить, что смещение после преобразования координат Google в координаты Baidu мало, то координаты точки G полностью равны 2B-G'。 После проверки значение смещения после преобразования координат Google в координаты Baidu составляет около нескольких сотен метров, что фактически незначительно, поэтому используйте этот метод для решения проблемы библиотеки смещения с помощью собственного API Baidu, а затем игнорируйте влияние преобразования смещений. Конечно, у этого метода есть и большой недостаток: он требует, чтобы эти две точки находились в одной и той же смещенной базе данных; если метод находится в двух разных библиотеках смещения, ошибка может быть относительно большой. Кроме того, в настоящее время готовится ещё один метод для дальнейших исследований — создание офсетной библиотеки и использование этой офсетной библиотеки для дальнейшего устранения этого воздействия: она ещё предстоит изучить. Вот недостаток онлайн-конвертации: инструмент онлайн-конвертации API Baidu фактически имеет ограничение на объём конвертируемых данных: каждый ключ может конвертировать около 5 000 единиц данных, а аккаунт может подать заявку на до 20 ключей, поэтому если объём данных большой, не рекомендуется использовать такой вид онлайн-конвертации, что также является первоначальной целью изучения локальной офсетной библиотеки. Кроме того, поскольку веб-сторона может быть более ограничена, скорость сети, параллельные запросы и т.. могут влиять на результаты и пользовательский опыт, поэтому вышеуказанные методы используются только для справки.
|