我有一些用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值。为什么?我可以在不重新导入数据的情况下修复此问题吗?
我不希望在每个查询之前/之后在我的应用程序中执行此操作。
答案 0 :(得分:3)
使用函数ST_FlipCoordinates将YX交换为XY轴顺序。
答案 1 :(得分: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;