我有一个表格的类型点 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
价值观(是虚构的)
1条答案
按热度按时间vohkndzv1#
你可以试试下面的方法-