我的桌子有两个浮动列,用于纬度和经度坐标。
我想使用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 = ...
我做错了什么?
答案 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);
你可以根据你的使用情况进行调整吗?