Как преобразовать координату EPSG в широту/долготу?

У меня есть следующие данные OpenGis, которые я хочу преобразовать в координату широты/долготы (используемую картами Google).

<address xmlns:gml="http://www.opengis.net/gml">
  <gml:Point srsName="urn:ogc:def:crs:EPSG::28992">
    <gml:pos>142629.0 523546.0</gml:pos>
  </gml:Point>
</address>

В реестре EPSG я нашел исходную позицию EPSG:28992.

Latitude of natural origin      52°09'22.178"N
Longitude of natural origin     5°23'15.5"E
Scale factor at natural origin  0.9999079 unity
False easting                   155000 metre
False northing                  463000 metre

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

Я также пытался вычислить это сам. Но я понятия не имею, что я здесь делаю, и ничего не имело смысла :(.


person Arnold Daniels    schedule 14.02.2017    source источник
comment
Несколько вопросов: это разовое пакетное задание или вы будете получать новые данные, которые вам придется обновлять на лету? Кроме того, это для отображения на веб-карте или в каком формате будет вывод? И если это веб-карта, есть ли у вас конкретная библиотека веб-картографии, которую вы уже используете?   -  person Dave Shepard    schedule 23.02.2017
comment
Это пакетное задание, которое будет выполняться раз в месяц. Как используются данные, я не определяю и не знаю. Данные должны просто содержать координаты долготы/широты.   -  person Arnold Daniels    schedule 23.02.2017


Ответы (2)


Вот как это сделать. Обычно вы можете просто преобразовать одну проекцию в другую, если Proj4js уже включает проекцию, например:

proj4('EPSG:900913', 'EPSG:4326', [20.0, 30.0]);

Однако EPSG:28992 не входит в стандартную библиотеку. Для этого вы можете добавить его, добавив новое определение:

proj4.defs(
   "EPSG:28992", 
   "+proj=sterea +lat_0=52.15616055555555   +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000  +ellps=bessel  +towgs84=565.040,49.910,465.840,-0.40939,0.35971,-1.86849,4.0772 +units=m +no_defs"
);

Затем вы можете просто преобразовать так:

proj4('EPSG:28992', 'EPSG:4326', [142629.0, 523546.0]);

Который дает

[5.2041980699764325, 52.69918555556015]

На Google Картах

person Dave Shepard    schedule 23.02.2017

proj4js — полезная библиотека для преобразования разных систем в разные выходные данные! Вы также можете попробовать воспользоваться онлайн-инструментом преобразования, например CS2S.

Например, можно попробовать сделать запрос на ajax-форме так:

https://mygeodata.cloud/drive/crslist?dsid=0&search=28992&limit=50&offset=0

и вернуть json:

{"rows": [{"proj4": "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,-0.398957388243134,0.343987817378283,-1.87740163998045,4.0725 +units=m +no_defs ", "sel": 2, "epsg": 28992, "dsname": "Amersfoort / RD New", "aoi": "Netherlands - onshore, including Waddenzee, Dutch Wadden Islands and 12-mile offshore coastal zone.", "ordering2": 460.0}], "total": 1}

и проверьте в ключе proj4 ваши значения lat_0 и lon_0

Эти значения отформатированы как координаты Google, и, возможно, их проще поместить в проекцию.

person thejoin    schedule 22.02.2017
comment
Мне нужно преобразовать сотни тысяч координат. Использование внешнего сервиса не вариант. Не могли бы вы показать, как напрямую использовать proj4. - person Arnold Daniels; 22.02.2017