Как центрировать карту открытых слоев по координатам PostGIS? - PullRequest
2 голосов
/ 25 марта 2019

Я пытаюсь центрировать мою карту открытых слоев по координатам, полученным из моей базы данных с помощью функций PostGIS: ST_AsGeoJSON(ST_SetSRID(ST_Centroid(geom),3857)).Геометрия в моей базе данных проецируется в EPSG: 25830, а моя карта открытых слоев проецируется в EPSG: 3857.

Координата, которую я получаю на стороне клиента после вызова сервера, выглядит следующим образом:

613056.633587271 4738175.03852526

Затем я делаю следующее с видом карты открытых слоев и полученной координатой:

view.animate({
    center: coordinatefromserver,
    duration: 500
});

И моя карта перемещается в совершенно другую позицию.

Вот та координата, которая, как мне известно, работает нормально, вот эта:

-180099.9705826787,5279777.85057039

Чего мне не хватает?Функции PostGIS?Любое преобразование типов?Прогнозы?Извините, но я довольно нуби в этом!

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

При преобразовании из EPSG: 25830 в EPSG: 3857 эти координаты дают [-180081.82283603796, 5279725.360517778], поэтому сервер возвращает EPSG: 25830, несмотря на SetSRID 3857.

Вы можете выполнить преобразование в OpenLayers:

proj4.defs('EPSG:25830', '+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs ');

if (ol.proj.proj4 && ol.proj.proj4.register) { ol.proj.proj4.register(proj4); }  // only needed for OL5

view.animate({
    center: ol.proj.transform(coordinatefromserver, 'EPSG:25830', view.getProjection())
    duration: 500
});
1 голос
/ 25 марта 2019

Уверен, проблема в том, что ваш запрос не выполняет то, что вы хотите.Если вы хотите преобразовать из одного srid в другой, вам нужно использовать st_transform , а не st_setsrid.

Т.е. ваш запрос должен быть:

ST_AsGeoJSON(ST_transform(ST_Centroid(geom),3857))
...