如何将纬度/经度对转换为PostGIS地理类型?

时间:2010-03-26 13:32:00

标签: database postgresql gis postgis

我正在尝试将一堆纬度/经度对加载到PostGIS地理类型中,以便能够按位置查询。

特别是我有一个包含浮动纬度和经度列以及geography(Point, 4326)列的表格。我想做

update mytable set geography = ???

文档似乎表明以下内容应该有效:

update mytable set geography = ST_GeogFromText('POINT(' || latitude || ' ' ||
                                                           longitude || ')');

没有。我不知道它是什么意思解释这一点,但它只允许经度介于-90和90之间,所以它显然不是经度。

那么,我该怎么办?

3 个答案:

答案 0 :(得分:37)

...叹息。我的愚蠢。显然,正确的顺序是经度,纬度。我被骗以为两个坐标都有相同的范围(-180到180),所以想到了一些更微妙的东西。

答案 1 :(得分:8)

以下是制作地理类型的一些方法:

  1. 将数字longlat列转换为geog地理位置类型:

    UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
    
  2. 使用简单投射将geom几何列(SRID=4326)转换为geog地理类型:

    UPDATE mytable SET geog = geom::geography
    
  3. 将投影的geom几何列转换为geog地理类型:

    UPDATE mytable SET geog = ST_Transform(geom, 4326)::geography
    
  4. 请注意,最后两个示例适用于任何几何类型。此外,从几何到地理的转换通常是隐含的,这些示例在没有::geography的情况下工作,但是显式转换通常是这些事情的好习惯。

答案 2 :(得分:5)

要在lat和lng之间执行交换,您可以使用:

update mytable set geography = ST_GeographyFromText('SRID=4326;POINT(' || st_x(geom) || ' ' ||  st_y(geom) || ')');

有或没有srid。