我有一张桌子,区域:
| id | name |
|----|----------|
| 1 | Jersey |
| 2 | Scotland |
...
和RegionPoints表(定义每个区域的边界框):
| id | regionid | lat | lng |
|----|----------|-------|-------|
| 1 | 1 | 49.27 | -2.27 |
| 2 | 1 | 49.27 | -1.99 |
| 3 | 1 | 49.15 | -2.27 |
| 4 | 1 | 49.15 | -1.99 |
...
给定纬度和经度,我想找到包含给定点的区域。
根据我的理解,我需要按regionid
进行汇总
使用ST_ConcaveHull
,然后ST_Contains
使用纬度和经度进行查询,但我担心的是,对于大量区域,计算每个区域的凹壳将是非常低效的。
这是我第一次使用PostGIS,所以有点卡住了。
答案 0 :(得分:2)
是的,在飞行中计算凹形船体""大量数据可能效率低下。
此外,您无法使用空间索引,因为您的几何是在查询时构建的。
使用ST_MakeEnvelope而不是ST_ConcaveHull可以缓解这个问题。
但是,正如JGH建议的那样,您应该将这些坐标作为多边形存储在Regions表中,使用ST_MakeEnvelope创建它们。
构建空间索引并使用ST_Contains获取包含点的区域。