【问题标题】:Get points inside a bounding box获取边界框内的点
【发布时间】:2011-07-10 23:24:44
【问题描述】:

我正在尝试从我的 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 

这是什么意思?第二个问题 - 我是否以良好的顺序提供这些参数?我的意思是 - 首先是经度,然后是纬度?

【问题讨论】:

    标签: php pdo postgis


    【解决方案1】:

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

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

    【讨论】:

    • 实际上这些参数正在被替换......但也许你可以建议另一个查询来完成这个?
    【解决方案2】:

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

    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_SetSRIDthe_geom 作为第二个参数!?
    • 并根据docST_MakeBox2D(geometry pointLowLeft, geometry pointUpRight);左下角,右上角。
    【解决方案3】:

    使用这些参数,您无法构建多边形

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

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

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

    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 定义您的坐标系,以免产生不愉快的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-08
      • 2022-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2012-09-05
      • 2019-05-11
      相关资源
      最近更新 更多