【问题标题】:How to center openlayers map from PostGIS coordinates?如何从 PostGIS 坐标中居中 openlayers 地图?
【发布时间】:2019-03-25 14:08:42
【问题描述】:

我正在尝试使用从我的数据库中获得的坐标与 PostGIS 函数居中我的 openlayers 地图: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


    【解决方案1】:

    当从 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
    });
    

    【讨论】:

    • 你是对的!但是我终于在服务器端转换了坐标,谢谢。
    【解决方案2】:

    很确定问题是您的查询没有按照您的意愿进行。如果你想从一个 srid 转换到另一个你需要使用 st_transform 而不是 st_setsrid。

    即您的查询应该是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2018-12-10
      • 2019-08-03
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      相关资源
      最近更新 更多