对于表的每一行,使用另一个表的每一行运行函数

zzzyeukh  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(268)

我有一个表格的类型点 GEOGRAPHY ,称之为 T_points :

id   point
1    POINT(-73.964736938476562,  40.7670783996582)
2    POINT(-73.962371826171875,  40.773128509521484)
3    POINT(-73.989463806152344,  40.767578125)
4    POINT(-73.978683471679688,  40.765167236328125)
...

还有一张多边形表,也是 GEOGRAPHY ,称之为 T_zones :

id  zone
1   POLYGON((-74.1856319999999 40.6916479999999, -74.185911 40.6914499999999, ... ))
3   POLYGON((-73.848596761 40.8716707849999, -73.849876452 40.8721018809999, ... ))
18  POLYGON((-73.8844286139999 40.8668003789999, -73.883625181 40.8672575879999, ... ))
20  POLYGON((-73.8839239579998 40.8644177609999, -73.883960024 40.8645497189999, ... ))
...

使用函数 ST_COVERS 我可以通过以下方法确定点x是否在区域y中:

ST_COVERS(POLYGON((-73.8839239579998 40.8644177609999, -73.883960024 40.8645497189999, ... )),
          POINT(-73.964736938476562,  40.7670783996582),
         )

此函数返回 TRUE 如果在区域内 FALSE 如果没有。
目标:找出每个点所在的区域。
如何做到这一点:在每一个点上 T_points 运行此 ST_COVERS 每个区域都在 T_zones 并归还 T_zones.id 点所在的区域。
有人能推荐一种有效的方法来实现这一点吗?
像这样的

SELECT get_zone_id(point, T_zones.zones)
FROM T_points

很理想,但不知道怎么做。
理想输出:

id   point                                            zone_id
1    POINT(-73.964736938476562,  40.7670783996582)    1
2    POINT(-73.962371826171875,  40.773128509521484)  3
3    POINT(-73.989463806152344,  40.767578125)        24
4    POINT(-73.978683471679688,  40.765167236328125)  77

(the) zone_id 价值观(是虚构的)

vohkndzv

vohkndzv1#

你可以试试下面的方法-

SELECT id, point, zone_id
FROM T_points 
JOIN T_zones ON ST_WITHIN(point, zone)

相关问题