我正在尝试从我的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
这是什么意思?第二个问题 - 我是否按顺序提供了这些参数?我的意思是 - 先经度,然后是纬度?
答案 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)边界中没有两个环交叉,多边形边界的环可能在一个点交叉但是 仅作为切线,例如
使用这些参数,您可以创建一个box2d或创建多边形,为所有不足点提供信息。
两个快速说明:
St_GeomFromText
不起作用ST_SetSRID
来定义您的坐标系,以免造成不愉快的结果答案 2 :(得分:0)
我认为这是因为:top_left_long
和其他参数不会被你的价值取代。
可以在执行之前打印SQL查询吗?