【问题标题】:How to fix mixed lat / lng order如何修复混合纬度/经度顺序
【发布时间】:2013-02-22 14:12:06
【问题描述】:

我有一些用 osm2pgsql 导入的 OSM 数据:

osm2pgsql -d geomdb -l -U DBUSER -H DBHOST -S my.style germany.shp

默认 srid 为 4326:

GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]

openstreetmap、mapquest、google 也使用它(我在某处读过这个)。 现在我的数据库中的几何图形看起来像(例如)

LINESTRING(10.02 54.34,10.01 54.33,10.03 54.38)

代替:

LINESTRING(54.34 10.02,54.33 10.01,54.38 10.03)

切换每个点的纬度/经度值。为什么?我可以在不重新导入数据的情况下解决此问题吗?

我不想在每次查询之前/之后在我的应用程序中执行此操作。

【问题讨论】:

    标签: postgresql map postgis openstreetmap


    【解决方案1】:

    当然可以,你必须将线串分解成单独的点,然后通过切换 X 和 Y 来创建一个新点,再次创建一个线串,然后用新的线串替换该线串。像这样,只需将名称替换为您的名称即可。

    UPDATE the_table AS t
    SET the_linestring=l.the_linestring
    FROM
      (SELECT id,
              st_makeline(point) AS the_linestring
       FROM
         ( SELECT t.id,
                  st_makepoint(st_y(st_pointn(the_linestring,buz)) ,st_x(st_pointn(the_linestring,index_num))) AS point
          FROM the_table t
          JOIN
            (SELECT id,
                    generate_series(1,st_npoints(the_linestring)) AS index_num
             FROM the_table) AS q ON t.id=q.id ) AS q
       GROUP BY q.id ) AS l
    WHERE t.id=l.id;
    

    【讨论】:

    • 好的,我会考虑解决这个问题。但是为什么数据是用螺纹坐标导入的呢?我不认为这是它应该工作的方式。
    • @dompie 老实说我不知道​​。
    【解决方案2】:

    使用函数ST_FlipCoordinates 将YX 转换为XY 轴顺序。

    【讨论】:

    • 这正是我想要的。不幸的是,它仅在 PostGIS 2.0 中可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2016-07-03
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多