如何将纬度,经度坐标作为postgres地理类型投射

时间:2015-12-15 22:25:37

标签: sql postgresql postgis

我的桌子有两个浮动列,用于纬度和经度坐标。

我想使用PostGIS的ST_DWithin来查找与给定点相距一定距离的所有记录。

ST_DWithin的签名要求前两个参数是几何或地理数据类型,因此我非常确定解决方案是将lat / lng坐标转换为地理位置,但我不能让它发挥作用。

SELECT * 
FROM stops 
WHERE ST_DWithin( ST_GeogFromText('SRID=4326;POINT(-77.09 38.89)'),
                  ST_GeogFromText('SRID=4326;POINT(' || stops.lng || ' ' || stops.lat || ')'), 10000.0)

我收到此错误:

  

错误:函数st_geogfromtext(未知)不存在

     

第1行:SELECT * FROM停止WHERE ST_DWithin(ST_GeogFromText(' SRID = ...

我做错了什么?

2 个答案:

答案 0 :(得分:2)

Woops。

原来的语法(上面)实际上是正确的。但是我错过了安装PostGIS的关键步骤:

psql -d <DATABASE_NAME_HERE> -c "CREATE EXTENSION postgis";

原则上你必须在每个数据库上启用它才能使它工作。 是无法识别该功能的原因。

由于没有太多的资源,我会留下这个问题,以防它对其他人有用。

答案 1 :(得分:0)

Gilbert Le Blanc的link中的一个例子似乎包含一个在函数调用期间进行转换的方法:

SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 
    'POINT(-21.96 64.15)':: geography);

你可以根据你的使用情况进行调整吗?