在边界框内获取点数

时间:2011-03-08 09:27:04

标签: php pdo postgis

我正在尝试从我的postgis db中选择位于某个边界框内的位置。我试图用这个查询来实现这个目的:

//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 个答案:

答案 0 :(得分: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采用左上角和右下角

答案 1 :(得分:1)

使用这些参数,您无法构建 Polygon

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

外部边界LinearRing定义了表面的“顶部”,该表面是外部边界以逆时针方向穿过边界的表面的一侧。内部LinearRings将具有相反的方向,从“顶部”查看时显示为顺时针方向。

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

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

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

c)边界中没有两个环交叉,多边形边界的环可能在一个点交叉但是 仅作为切线,例如

(摘自OpenGIS Implementation Specification for Geographic information - Simple feature access - Part 1: Common architecture

使用这些参数,您可以创建一个box2d或创建多边形,为所有不足点提供信息。

两个快速说明:

  1. 确保您的参数是字符串,或St_GeomFromText不起作用
  2. 使用ST_SetSRID来定义您的坐标系,以免造成不愉快的结果

答案 2 :(得分:0)

我认为这是因为:top_left_long和其他参数不会被你的价值取代。

可以在执行之前打印SQL查询吗?