从纬度/液化表中查找包含点的多边形



我有一个表,区域:

| 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获取包含点的区域。

最新更新