【问题标题】:ST_WITHIN function does not existST_WITHIN 函数不存在
【发布时间】:2021-01-21 12:44:02
【问题描述】:

我对如何在我的查询中使用此功能感到困惑。我正在使用的代码如下:

$res = pg_query($conn, 'SELECT "Coordinates" FROM "Shapes" WHERE st_within(point(0,0)::geometry, "Coordinates") ');

当我尝试运行这个时,我得到了这个错误:


警告:pg_query_params():查询失败:错误:函数 st_within(geometry, geography) 不存在

提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我想要一个多边形的坐标,所以这可能需要一个几何数组

【问题讨论】:

  • ST_Within documentation 说两个参数都是几何,“坐标”算不算?
  • 所以坐标是一个地理,但我希望这是一个多边形,所以是一个几何数组

标签: php postgresql postgis


【解决方案1】:

ST_Within 函数采用两个几何参数,例如“ST_Within(geometry A, geometry B)”。您应该确保“坐标”的参数实际上是几何形状。

【讨论】:

  • 坐标是一个地理,所以我必须把它转换成正确的?
  • 是的,Postgis 文档说“如果几何 A 完全在几何 B 内,则返回 TRUE”。对于 ST_Within 函数。地理和几何不是同一类型的数据,因此您必须将“坐标”的参数从地理更改为几何。
【解决方案2】:

我做了一些研究并尝试了一些不同的功能,但我得到了不同的错误,其中一个如下所示:

警告:pg_query_params():查询失败:错误:包含:对混合 SRID 几何图形(多边形,4326)的操作!= (点,0)在 /var/www/html/watchlist/coordChange.php45

使用以下代码:

pg_query($conn, 'SELECT "Coordinates" FROM "Shapes" WHERE st_within( ST_MakePoint(130, -25), "Coordinates"::geometry) ');

从这里我搜索了更多并使用了另一个函数 ST_SetSRID(),如下所示:

pg_query($conn, 'SELECT "Coordinates" FROM "Shapes" WHERE st_within( ST_SetSRID( ST_MakePoint(130, -25), 4326), "Coordinates"::geometry) '); 

这就产生了我想要的结果。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2018-05-06
相关资源
最近更新 更多