我有一个表,区域:
| id | name |
|----|----------|
| 1 | Jersey |
| 2 | Scotland |
...
以及区域点表(定义每个区域的边界框):
| 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,所以有点卡住了。
是的,"动态"计算凹形船体对于大量数据可能效率低下。
此外,您将无法使用空间索引,因为几何是在查询时构建的。
使用 ST_MakeEnvelope 而不是 ST_ConcaveHull 将缓解此问题。
但是,正如 JGH 建议的那样,您应该将这些坐标存储为区域表中的多边形,并使用ST_MakeEnvelope来创建它们。
然后构建空间索引并使用ST_Contains获取包含点的区域。