如何从PostGIS坐标中心openlayers地图?

问题描述 投票:2回答:2

我正试图将我的openlayers地图与我的数据库中使用PostGIS函数获得的坐标对齐:ST_AsGeoJSON(ST_SetSRID(ST_Centroid(geom),3857))。我的数据库中的几何体以EPSG:25830投影,我的openlayers地图以EPSG:3857投影。

一旦我调用服务器,我在客户端获得的坐标是这样的:

613056.633587271 4738175.03852526

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

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

我的地图移动到一个完全不同的位置。

我知道工作正常的坐标是这样的:

-180099.9705826787,5279777.85057039

我错过了什么? PostGIS功能?任何类型的转换?预测?对不起,但我很喜欢这个!

谢谢。

postgresql gis openlayers postgis
2个回答
1
投票

很确定问题是你的查询没有做你想要的。如果你想从一个srid转换到另一个srid,你需要使用st_transform而不是st_setsrid。

即您的查询应该是:

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

3
投票

当从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
});
© www.soinside.com 2019 - 2024. All rights reserved.