我有2个Hive表。表1在2列中具有经度和纬度,而第二表具有WKT格式的面信息,例如下面所示:

POLYGON ((6.93614 79.842882, 6.950198 79.856958, 6.943638 79.877815, 6.931795 79.877129, 6.92566 79.861507, 6.919184 79.861507, 6.917906 79.847603, 6.93614 79.842882))

我想找出表1中的哪些点属于哪些多边形。我正在尝试使用ST_Geometric库为hadoop(https://github.com/Esri/spatial-framework-for-hadoop/wiki/UDF-Documentation)执行此操作。由于2表中的数据,我必须加入它们。我尝试使用
ST_Contains(polygon, point)

函数联接2个表。但是我做不到。有人知道一种方法吗?

最佳答案

ST_Contains 在单个多边形和单个点上运行,而不是在完整表上运行。

您需要进行完整的笛卡尔积连接(无条件的内部连接),然后在where子句中应用ST_Contains:

 select * from polygonTable a,pointsTable b where ST_Contains(a.polygon,b.point);

请注意,执行笛卡尔乘积的效率很低,在大型桌子上可能要花费大量时间。

10-07 23:47