在一个边界框内获取点

3

我正在尝试从我的PostGIS数据库中选择位于特定边界框内的地点。我尝试使用以下查询来完成此操作:

//latlong - latitude, longitude of a place

SELECT * FROM places WHERE St_Contains(St_GeomFromText('Polygon((:top_left_long :top_left_lat, :bottom_right_long :bottom_right_lat))'), latlong);

首先,我遇到了以下错误:

 Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: :top_left_lat 

这是什么意思?第二个问题是 - 我是否按正确的顺序输入这些参数?我的意思是 - 先经度,然后纬度?
3个回答

6

这是我在一个旧项目中使用的查询:

SELECT param1, param2, ... 
FROM messages 
WHERE ST_Contains( 
    ST_SetSRID(
        ST_MakeBox2D(
            ST_Point(0, 50), ST_Point(50,0)
        ), 
        4326
    ), 
    the_geom
)

the_geom是我的几何列 注意:MakeBox2D采用左上角和右下角


缩进有点让我困惑。我在想为什么ST_SetSRID要将the_geom作为第二个参数!? - Bibhas Debnath
根据文档ST_MakeBox2D(geometry pointLowLeft, geometry pointUpRight);函数的参数是左下角和右上角的点。 - Bibhas Debnath

1

使用这些参数无法构建Polygon

Polygon是由一个外部边界和0个或多个内部边界定义的平面表面。每个内部边界定义了多边形中的一个孔。三角形是具有3个不同的、非共线顶点和没有内部边界的多边形。

外部边界LinearRing定义了表面的“顶部”,即从表面上看,外部边界似乎沿着逆时针方向穿过边界。内部LinearRings将具有相反的方向,并在从“顶部”查看时显示为顺时针方向。

多边形的断言(定义有效多边形的规则)如下:

a) 多边形在拓扑上是封闭的;

b) 多边形的边界由一组LinearRings组成,构成其外部和内部边界;

c) 边界中的两个环不交叉,多边形边界中的环可以在点处相交,但只能作为切线,例如:

(摘自OpenGIS实施规范地理信息-简单要素访问-第1部分:通用架构

使用这些参数,您可以创建box2d或创建多边形并提供所有单独的点。

两个快速提示:

  1. 确保您的参数是字符串,否则St_GeomFromText将无法工作
  2. 使用ST_SetSRID定义您的坐标系统,以避免出现不愉快的结果

0

我认为这是因为:top_left_long和其他参数没有被替换为您的值。

在执行之前,您能打印出SQL查询吗?


实际上,这些参数正在被替换...但也许您可以建议另一个查询来完成此操作? - marek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接