最近接了一个地震预警功能,需要以地震点为中心向外扩大一个半径为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公里