【问题标题】:Postgis ST_TransformPostgis ST_Transform
【发布时间】:2014-04-14 13:14:05
【问题描述】:

我有一个带有 srid 900913 的点 (x, y)。我将其转换为 srid 2180,然后再转换为 srid 900913。我应该有相同的点,但它不同。为什么?

SELECT ST_X (ST_Transform(ST_Transform(ST_GeomFromText('POINT(21.01233628836129 52.23044648850736)', 900913), 2180), 900913)),
ST_Y(ST_Transform(ST_Transform(ST_GeomFromText('POINT(21.01233628836129 52.23044648850736)', 900913), 2180), 900913));

【问题讨论】:

  • 你的初始点好像不在 900913 中,单位是米
  • 另外你不需要分别做ST_X和ST_Y。看看 ST_Makepoint。

标签: gis postgis


【解决方案1】:

为什么这两种转换不同的快速答案是因为投影系统的常见混淆。

Spherical Mercator projection 上的坐标POINT(21.01233628836129 52.23044648850736) 位于0°0'1.689"N 0°0'0.680"E,这是在波兰以外的地方,因此很难或通常不可能将其重新投影到其他任何地方。

您查看的坐标最有可能WGS 84 (EPSG:4326) 上的经度/纬度。

我认为这是您正在尝试的练习(尤其是LatLon_check):

SELECT ST_AsLatLonText(geom) AS LatLonText,
  ST_AsLatLonText(ST_Transform(ST_Transform(geom, 2180), 4326)) as LatLon_check,
  ST_AsText(ST_Transform(geom, 2180)) AS Poland_CS92,
  ST_AsText(ST_Transform(geom, 900913)) AS Spherical_Mercator
FROM ST_GeomFromText('POINT(21.01233628836129 52.23044648850736)', 4326) AS geom;

-[ RECORD 1 ]------+----------------------------------------
latlontext         | 52°13'49.607"N 21°0'44.411"E
latlon_check       | 52°13'49.607"N 21°0'44.411"E
poland_cs92        | POINT(637389.203455155 486840.46005323)
spherical_mercator | POINT(2339082.5759974 6841900.8700405)

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2021-05-04
    • 2011-09-11
    • 2017-10-07
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多