Что не так с этим преобразованием Proj4?

Я внедряю поддержку карт WMS в программном обеспечении моей компании. Серверы возвращают список проекций, в которых доступны их карты, но наше программное обеспечение отображает данные только в формате WGS84 (широта / долгота или UTM), и не все серверы возвращают CRS "CRS:84" или "EPSG:4326". В результате мне нужно преобразовать / перепроектировать данные. Некоторые серверы возвращают довольно необычные, и у меня возникают проблемы с одним из них: EPSG:3112 (GDA94 / Geoscience Australia Lambert), используемый сервером WMS Geoscience Australia.

Чтобы отобразить карту на экране, мне нужно преобразовать координаты широты / долготы WGS84 требуемого ограничивающего окна экрана или плитки в CRS сервера, запросить изображение карты, а затем нарисовать преобразование ограничивающего поля карты (в CRS сервера).) назад к WGS-84 лат / долг. Похоже, это не работает правильно:

Наложенные карты с двух серверов

Это изображение является частью австралийского острова Тасмания. Серая береговая линия от Демиса, в WGS:84 проекции. Синий контур и серая сетка из Geoscience Australia, в EPSG:3112, но (теоретически) перепроектированы через Proj4, чтобы соответствовать серой береговой линии. Как вы можете видеть, это довольно неточно, до 50-100 километров. Если бы на этом экране были нарисованы сетки WGS-84, они были бы идеально вертикальными и горизонтальными. Обратите внимание также, что остров растянут, то есть это больше, чем вращение. Мне кажется, что репроекция не работает вообще.

Я использую две строки инициализации Proj4:

  • WGS-84 (WMS CRS: 84): +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
  • EPSG: 3112: +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

Обращение отдельной точки от WGS-84 до EPSG: 3112 и обратно дает исходную точку:

  • WGS:84: (145,0, -42,0)
  • в EPSG:3112: (931684.430679232, -4764432.89032608)
  • и обратно к WGS-84: (145, -41.9999999999999)

Все преобразования сделаны с использованием pj_transform,

Я не знаю достаточно о проекциях карт или Proj4, чтобы знать, куда идти дальше, хотя за последние несколько дней я многому научился, и я был бы очень признателен за советы кого-то, кто знает намного больше об этой библиотеке.

Вот некоторые идеи, которые у меня были:

  • Голубой остров, похоже, все еще находится в проекции Ламберта. Это вероятно? Это объяснило бы визуальное искажение.
  • Мы используем версию библиотеки Proj4 DLL, которая была создана много лет назад, и, хотя кажется, что вы можете встраивать различные данные о датумах и т. Д. В DLL, я не знаю, было ли это сделано. Proj4 не помечает ошибку при выполнении преобразования координат, поэтому в настоящий момент я работаю с предположением, что если библиотека довольна, это внешняя ошибка (т.е. с моей стороны). Я также не знаю причины за то, что у нас есть собственная, многолетняя сборка DLL, вместо использования предварительно скомпилированного двоичного файла с сайта Proj4. Однако даже двоичные файлы Proj4 имеют одну версию и, похоже, не созданы для включения всего в виде двоичных данных.
  • Некоторые версии Proj4 загружают данные и другую информацию извне. Я попытался заменить нашу DLL и настроить ее для использования некоторых из этих файлов, используя PROJ_LIB переменная окружения, но без видимых изменений.
  • +towgs84=0,0,0,0,0,0,0 часть строки EPSG: 3112 кажется странной. Это из файла 'epsg' в последней загрузке Proj4, но может ли это быть неправильно?

Возможно, лучшая формулировка этого вопроса:

  • Что мне нужно иметь или сделать для преобразования между этими двумя CRS?

Спасибо за любую помощь:)

0 ответов

Другие вопросы по тегам