1

我有一些用 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)

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

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

4

2 回答 2

3

使用函数ST_FlipCoordinates将 YX 交换到 XY 轴顺序。

于 2013-03-08T23:32:46.353 回答
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;
于 2013-03-07T15:57:40.850 回答