【问题标题】:Point inside a Polygon (Teradata Geospatial SQL)多边形内的点(Teradata 地理空间 SQL)
【发布时间】:2017-02-18 09:31:45
【问题描述】:

我已尝试在网络上搜索,但无法找到答案。 我可以使用 Teradata SQL 来绘制方形多边形: New ST_GEOMETRY('Polygon((150 -35, 150 -34, 149 -34, 149 -35))') As Region1 并创建一个点:New ST_GEOMETRY('Point(149.5 -34.5)') As Location1

有没有办法检查点“Location1”是否在多边形“Region1”内?

另外,如果 Region1 内的 Region2 被排除在外 New ST_GEOMETRY('Polygon((149.75 -34.25, 149.75 -34.75, 149.25 -34.75, 149.25 -34.25))') As Region2 创建多边形/形状“Region3”的方法是什么(Teradata SQL),即“Region1”排除“Region2”?

谢谢

【问题讨论】:

标签: sql polygon geospatial teradata


【解决方案1】:

总结

正如 Dmitri Chubarov 所说,您可以使用 ST_CONTAINS。有关工作示例,请参见下面的代码。

为了使多边形工作,多边形应该是“封闭的”,多边形的第一个点和最后一个点是相同的。

使用 Teradata 16 测试的工作示例

下面的代码创建:

  1. 带点的表格
  2. 带有多边形的表格
  3. 一个包含所有点和多边形的组合的选择语句,并且该点的指示符在多边形中

SQL

---------- 1. Create points ----------

-- DROP TABLE SAMPLE_POINTS;
CREATE VOLATILE TABLE SAMPLE_POINTS (SKEY INTEGER, POINT ST_GEOMETRY) ON COMMIT PRESERVE ROWS;
INSERT INTO SAMPLE_POINTS VALUES (1, Cast('Point(149.5 -34.5)' AS ST_GEOMETRY));
INSERT INTO SAMPLE_POINTS VALUES (2, Cast('Point(1 1)' AS ST_GEOMETRY));

---------- 2. Create polygons ----------

-- DROP TABLE SAMPLE_POLYGONS;
CREATE VOLATILE TABLE SAMPLE_POLYGONS (SKEY INTEGER, POLYGON ST_GEOMETRY) ON COMMIT PRESERVE ROWS;
INSERT INTO SAMPLE_POLYGONS VALUES (1, Cast('Polygon((150 -35, 150 -34, 149 -34, 149 -35))' AS ST_GEOMETRY));
INSERT INTO SAMPLE_POLYGONS VALUES (2, Cast('Polygon((150 -35, 150 -34, 149 -34, 149 -35, 150 -35))' AS ST_GEOMETRY));
INSERT INTO SAMPLE_POLYGONS VALUES (3, Cast('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))' AS ST_GEOMETRY));
INSERT INTO SAMPLE_POLYGONS VALUES (4, Cast('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))' AS ST_GEOMETRY));

---------- 3. Point in polygon indicator ----------

SELECT
  POI.SKEY                             AS POINT_KEY
  , Cast(POI.POINT AS VARCHAR(255))    AS POINT
  , POL.SKEY                           AS POLYGON_KEY
  , Cast(POL.POLYGON AS VARCHAR(255))  AS POLYGON
  , POL.POLYGON.ST_Contains(POI.POINT) AS PIP_IND
FROM SAMPLE_POLYGONS AS POL
     , SAMPLE_POINTS AS POI
;

输出

POINT_KEY POINT POLYGON_KEY POLYGON PIP_IND
1 POINT (149.5 -34.5) 4 POLYGON ((0 0,0 1,1 1,1 0,0 0)) 0
1 POINT (149.5 -34.5) 2 POLYGON ((150 -35,150 -34,149 -34,149 -35,150 -35)) 1
1 POINT (149.5 -34.5) 3 POLYGON ((0 0,0 2,2 2,2 0,0 0)) 0
1 POINT (149.5 -34.5) 1 POLYGON ((150 -35,150 -34,149 -34,149 -35)) 0
2 POINT (1 1) 4 POLYGON ((0 0,0 1,1 1,1 0,0 0)) 0
2 POINT (1 1) 2 POLYGON ((150 -35,150 -34,149 -34,149 -35,150 -35)) 0
2 POINT (1 1) 3 POLYGON ((0 0,0 2,2 2,2 0,0 0)) 1
2 POINT (1 1) 1 POLYGON ((150 -35,150 -34,149 -34,149 -35)) 0

请注意:

  • 闭合多边形:初始多边形 1 不起作用,因为需要通过重复第一个点来闭合多边形。多边形 2 是修正后的版本。
  • 边缘情况:点 2 位于多边形 4 的边缘,因此未标记为在多边形中。

来源:

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2020-07-12
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多