postgis 查找缓冲区内的所有建筑物 使用st_buffer函数
时间: 2023-04-02 16:01:38 浏览: 245
可以使用以下 SQL 语句来查找缓冲区内的所有建筑物:
SELECT * FROM buildings
WHERE ST_Intersects(buildings.geom, ST_Buffer(ST_GeomFromText('POINT(x y)', 4326), radius));
其中,x 和 y 分别是缓冲区的中心点的经纬度,radius 是缓冲区的半径。buildings 是建筑物的数据表,geom 是建筑物的几何字段。ST_Intersects 函数用于判断建筑物的几何是否与缓冲区相交,ST_GeomFromText 函数用于将经纬度转换为几何对象,4326 是坐标系的编号。
相关问题
postgresql 查询环形缓冲区内的建筑物
假设我们有一个名为“buildings”的表,其中包含建筑物的几何位置和其他属性。我们想要查询位于某个点周围一定距离内的所有建筑物,可以使用PostGIS中的ST_DWithin函数和ST_Buffer函数。
首先,我们需要在数据库中启用PostGIS扩展:
```sql
CREATE EXTENSION postgis;
```
然后,我们可以使用ST_Buffer函数创建一个缓冲区,以表示查询点周围的区域。例如,下面的查询将创建一个以点(10,10)为中心,半径为100米的圆形缓冲区:
```sql
SELECT ST_Buffer(ST_SetSRID(ST_Point(10,10),4326), 100) as buffer;
```
接下来,我们可以使用ST_DWithin函数查询位于圆形缓冲区内的所有建筑物。例如,下面的查询将返回位于“buildings”表中,与上述缓冲区相交的所有建筑物:
```sql
SELECT * FROM buildings
WHERE ST_DWithin(geom, ST_Buffer(ST_SetSRID(ST_Point(10,10),4326), 100), true);
```
其中,ST_DWithin函数的第一个参数是要查询的几何对象,第二个参数是缓冲区几何对象,第三个参数表示是否使用索引加速查询(在查询较大的表时,建议将其设置为true)。
阅读全文