总结
正如 Dmitri Chubarov 所说,您可以使用 ST_CONTAINS。有关工作示例,请参见下面的代码。
为了使多边形工作,多边形应该是“封闭的”,多边形的第一个点和最后一个点是相同的。
使用 Teradata 16 测试的工作示例
下面的代码创建:
- 带点的表格
- 带有多边形的表格
- 一个包含所有点和多边形的组合的选择语句,并且该点的指示符在多边形中
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 的边缘,因此未标记为在多边形中。
来源: