如何使用ST_DWithin查找近点?

时间:2012-04-12 16:01:17

标签: sql gis postgis

这是我第一次创建GIS查询。在我的数据库的一个表中,有一个点类型的列。每条记录都是一台ATM机。我想编写一个查询来获取靠近我位置1公里范围内的ATM机。如何在SQL查询中使用ST_DWithin查找记录?

2 个答案:

答案 0 :(得分:4)

SELECT *
  FROM atm_finder
  WHERE ST_Distance(ST_Transform(ST_GeomFromText('POINT([Lon] [Lat])',4326),26986),ST_Transform(location,26986)) <= 1000

[Lon]&amp; [Lat] - 点的GPS坐标。但是,只要您在第一次使用时使用POINT类型:

SELECT AddGeometryColumn('atm_finder', 'location', 4326, 'POINT', 2);

当然在此之前你应该重命名字段'location'(为了不丢失数据)并用这些数据填充新字段。

答案 1 :(得分:0)

我不清楚ST_DWithin如何用两点......

这样的事情。

select atm.id
from atm_finder atm
where ST_Distance(<your location>, atm.location) <= 1000 

//1000 = meters, works fine with geography types
//have to check your projection with geometry types

顺便说一下,创建表格的方式对我来说很奇怪......