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),所以想到了一些更微妙的东西.
以下是制作地理类型的一些方法:
将数字long和lat列转换为geog地理类型:
UPDATE mytable SET geog = ST_SetSRID(ST_MakePoint(long, lat), 4326)::geography
Run Code Online (Sandbox Code Playgroud)使用简单的强制转换将geom几何列(SRID = 4326)转换为geog地理类型:
UPDATE mytable SET geog = geom::geography
Run Code Online (Sandbox Code Playgroud)将投影geom几何体列转换为geog地理类型:
UPDATE mytable SET geog = ST_Transform(geom, 4326)::geography
Run Code Online (Sandbox Code Playgroud)请注意,最后两个示例适用于任何几何类型.此外,从几何到地理的转换通常是隐含的,并且这些示例无需工作::geography,但是显式转换通常是这些事情的好习惯.
要在lat和lng之间执行交换,您可以使用:
update mytable set geography = ST_GeographyFromText('SRID=4326;POINT(' || st_x(geom) || ' ' || st_y(geom) || ')');
Run Code Online (Sandbox Code Playgroud)
有或没有srid.
| 归档时间: |
|
| 查看次数: |
22997 次 |
| 最近记录: |