【问题标题】:Check if a point is inside the geometry in PostGIS from PHP从 PHP 检查一个点是否在 PostGIS 中的几何图形内
【发布时间】:2014-09-26 05:21:00
【问题描述】:

我定义了几何类型,并且多边形和圆都被输入了。多边形是使用以下类型的查询输入的:

ST_GeomFromText('POLYGON$polygon')

其中 $polygon 包含点。

并且我已经在同一列中输入了圆圈:

ST_Buffer((ST_GeomFromText('POINT($longitude $latitude)')), $radius)

现在我需要检查给定点是否位于几何内部和几何内部。

谁能帮帮我?

我已尝试使用此查询:

ST_CONTAINS(shape,ST_GeomFromText('POINT($longitude $latitude)'))

其中 shape 是我的几何类型的列名称。但这让我对圈子总是如此,即使他们在圈子之外。

【问题讨论】:

  • 一个示例圆和点会很有帮助。
  • 你的意思是 POSTGIS 中的一个圆圈吗?
  • 我输入了 (0,0) 的圆,lon,lat 和 rad=(85,27,5000)
  • 是的,如果您可以将您的圈子的 WKT 样本和您认为应该在圈子外的点放在一起,那么我们可以进行测试。
  • 我认为我的圆输入查询和半径单位的 SRID 系统错误。你能告诉我正确的查询吗

标签: php coordinates polygon postgis geometry


【解决方案1】:

查看 cmets,您正在使用几何类型和空间参考系统,该系统使用度数 (SRID=4326) 单位。做一个半径为 5000 度的圆是一个巨大的圆,它将包含地球上的一切。

您可能想要使用以米为单位的投影空间参考系统,或者您可能想要考虑使用地理类型。您还可以使用地理类型缓冲一个圆,然后将其转换回几何类型。

【讨论】:

  • 能否建议使用地理类型的SQL,然后对其进行转换
  • ST_Buffer(ST_MakePoint(85, 27)::geography, 5000)::geometry
  • 我这样做了,但是当我试图找到圆的质心时,它给出的与我给出的不同。为什么会这样?
  • 因为 ST_Centroid 假设为平面几何;目前没有任何地理类型的质心函数。质心到原点的距离为0.2367 m。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2019-08-23
相关资源
最近更新 更多