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

DRM*_*ver 31 database gis postgresql postgis

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

特别是我有一个浮动纬度和经度列和一geography(Point, 4326)列的表.我想要做

update mytable set geography = ???
Run Code Online (Sandbox Code Playgroud)

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

update mytable set geography = ST_GeogFromText('POINT(' || latitude || ' ' ||
                                                           longitude || ')');
Run Code Online (Sandbox Code Playgroud)

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

那么,我该怎么办?

DRM*_*ver 37

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

  • 经度,纬度排序肯定会引入很多错误. (7认同)
  • 你的意思是我发布问题后三年和四年制作的那些,并且在我不再有问题之后很久? (4认同)
  • @DRMacIver也许他以为您完全停止了生活,陷入了沉睡,直到答案出现 (2认同)

Mik*_*e T 8

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

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

    UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用简单的强制转换将geom几何列(SRID = 4326)转换为geog地理类型:

    UPDATE mytable SET geog = geom::geography
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将投影geom几何体列转换为geog地理类型:

    UPDATE mytable SET geog = ST_Transform(geom, 4326)::geography
    
    Run Code Online (Sandbox Code Playgroud)

请注意,最后两个示例适用于任何几何类型.此外,从几何到地理的转换通常是隐含的,并且这些示例无需工作::geography,但是显式转换通常是这些事情的好习惯.


Daw*_*d D 5

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

update mytable set geography = ST_GeographyFromText('SRID=4326;POINT(' || st_x(geom) || ' ' ||  st_y(geom) || ')');
Run Code Online (Sandbox Code Playgroud)

有或没有srid.