从lat / lng表中查找包含点的多边形

时间:2017-11-09 14:19:20

标签: postgresql postgis

我有一张桌子,区域:

| 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,所以有点卡住了。

1 个答案:

答案 0 :(得分:2)

是的,在飞行中计算凹形船体""大量数据可能效率低下。

此外,您无法使用空间索引,因为您的几何是在查询时构建的。

使用ST_MakeEnvelope而不是ST_ConcaveHull可以缓解这个问题。

但是,正如JGH建议的那样,您应该将这些坐标作为多边形存储在Regions表中,使用ST_MakeEnvelope创建它们。

构建空间索引并使用ST_Contains获取包含点的区域。