如何从PostGIS坐标居中设置openlayers地图?

时间:2019-03-25 14:08:42

标签: postgresql gis openlayers postgis

我正在尝试使用通过PostGIS函数ST_AsGeoJSON(ST_SetSRID(ST_Centroid(geom),3857))从数据库中获取的坐标来对openlayers地图进行居中。我数据库中的几何图形投影在EPSG:25830中,而我的openlayers地图则投影在EPSG:3857中。

我致电服务器后在客户端获得的坐标如下:

  

613056.633587271 4738175.03852526

然后,我对openlayers地图的视图和接收到的坐标执行以下操作:

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

我的地图移到了完全不同的位置。

我知道可以正常工作的坐标就是这个坐标:

  

-180099.9705826787,5279777.85057039

我想念什么? PostGIS功能?任何类型转换?投影?抱歉,但是我真是个傻瓜!

谢谢。

2 个答案:

答案 0 :(得分:3)

从EPSG:25830转换为EPSG:3857时,这些坐标会产生[-180081.82283603796,5279725.360517778],因此尽管有SetSRID 3857,服务器仍将返回EPSG:25830。

您可以在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 :(得分:1)

可以肯定的问题是您的查询没有执行您想要的操作。如果要从一个srid转换到另一个,则需要使用st_transform而不是st_setsrid。

即您的查询应该是:

ST_AsGeoJSON(ST_transform(ST_Centroid(geom),3857))
相关问题