SQL 选择多边形内的要素

标签 sql postgresql postgis polygon

我有以下代码可以正常工作:

select vissoort, count(1), ST_Buffer(ST_GeomFromText('POINT(5.341248 51.615590)',4326):: geography, 2500)
from   visvangsten
where  st_intersects(visvangsten.locatie,
ST_Buffer(ST_GeomFromText('POINT(5.3412480 51.615590)',4326):: geography, 2500))
group by vissoort
order by 2 desc
现在我想要相同的功能,但然后选择多边形内的要素而不是圆/缓冲区。
我尝试过这样的事情,但没有任何效果:
select vissoort, count(1), ST_asText( ST_Polygon('LINESTRING(5.303 51.629, 5.387 51.626, 5.393 51.588, 5.281 51.592)'::geometry, 4326) )
from   visvangsten
where  st_contains(ST_asText( ST_Polygon('LINESTRING(5.303 51.629, 5.387 51.626, 5.393 51.588, 5.281 51.592)'::geometry, 4326) ), visvangsten.locatie);
group by vissoort
order by 2 desc limit 1
数据库表如下所示:


id ([PK]bigint)
基准(日期)
vissoort(字符不同)
位置(几何)


15729
2007-06-23
布兰克沃恩
0101000...等

等等。
等等。
等等。
等等。


有人知道答案吗?

最佳答案

请记住,要将 LineString 转换为 Polygon,您需要有一个封闭的环 - 换句话说,第一个和最后一个坐标对 必须相同 .话虽如此,您可以使用函数 ST_MakePolygon 将 LineString 转换为 Polygon .以下示例可能就是您要查找的内容:
Data set inside the CTE

WITH j (geom) AS (
  VALUES 
    (ST_MakePolygon('SRID=4326;LINESTRING(-4.59 54.19,-4.55 54.23,-4.52 54.19,-4.59 54.19)'::geometry)),
    (ST_Buffer('SRID=4326;LINESTRING(-4.59 54.19,-4.55 54.23,-4.52 54.19,-4.59 54.19)'::geometry,0.1))
)
SELECT ST_Contains(geom,'SRID=4326;POINT(-4.5541 54.2043)'::geometry) FROM j;

 st_contains 
-------------
 t
 t
(2 Zeilen)

关于SQL 选择多边形内的要素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65957408/

相关文章:

SQL 有计数 - 不工作

java - 如何在java中使用Hibernate在postgresql中保存json对象?

postgresql - 有没有办法在没有 CASE 表达式的情况下做到这一点?

oracle - 相当于 postgres 中 Oracle 的 pragma autonomous_transaction

postgresql - 多边形联合(地理类型为 ST_UNION)

postgresql - 哪个邻近函数提供最快并利用 postGIS 中的空间索引?

postgresql - 在 t1 中的所有点的 1000 米范围内找到 t2 中的所有点

sql - 将连续的 "Wins"分组为一行

android - 带连接的 greenDAO queryBuilder

sql - Oracle SQL : Understanding the behavior of SYS_GUID() when present in an inline view?