最近接了一个地震预警功能,需要以地震点为中心向外扩大一个半径为100-800公里的缓冲区,并获取缓冲区范围内的数据用于发送邮件预警功能,由于我们系统本身使用的就是postgresql数据库,所以可以借助ST_Buffer、ST_DWithin两个函数来做。

ST_Buffer

用于矢量对象生成缓冲区geometry对象,可用于缓冲区对象的显示,示例:

select ST_Transform(ST_Buffer(ST_Transform(geom,3857),800000),4326)

ST_DWithin

检测一个对象是否在另一个对象的缓冲区范围内,不生成缓冲区对象,效率更高,速度更快

select ST_DWithin(ST_Transform(geom,3857),ST_Transform(geom,3857),800000)

注意事项

需要注意的是,使用这两个函数都必须进行坐标转换,否则缓冲区的单位是度而不是米。1度=111公里