【发布时间】:2020-02-27 12:27:02
【问题描述】:
我有一个 PostGreSQL 表,它有一个 geometry 类型的列,其中存储了不同的简单多边形(可能相交)。多边形是城市内的所有区域。我收到一个点的输入(经纬度对),需要找到包含给定点的多边形列表。我目前拥有的:
- 在多边形列上定义的非聚集 GiST 索引。
- 在整张桌子上使用
ST_Contains(@param_Point, table.Polygon)。
它很慢,所以我正在寻找一种性能更高的内存替代方案。我有以下想法:
- 维护 Redis 中的多边形字典,由其 geohash 键控。具有相同 geohash 的多边形将保存为列表。当我收到该点时,计算它的 geohash 并修剪到所需的水平。然后在 Redis 地图中搜索并不断修剪该点的 geohash,直到找到第一个结果(或足够的结果)。
- 尝试从数据库中加载 geohashes。定期或通过接收更新事件更新 trie。计算点的geohash,在trie中搜索直到找到足够的结果。我更喜欢这个,因为考虑到多边形的性质,地图可能有很长的 geohash 列表。
- 还有其他方法吗?
我读过GeoTrie 和Polygon Geohasher 之类的库,但似乎无法将它们与数据库和上述想法集成。
请问有什么提示或起点吗?
【问题讨论】:
标签: postgresql redis polygon point-in-polygon geohashing