如何在内存中搜索包含给定点的多边形?

qq24tv8q  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(532)

我有一个postgresql表 geometry 类型列,其中存储不同的简单多边形(可能相交)。多边形是城市中的所有区域。我收到一个点(经纬度对)的输入,需要找到包含给定点的多边形列表。我目前拥有:
在多边形列上定义的未聚类索引。
使用 ST_Contains(@param_Point, table.Polygon) 在整张table上。
它是相当慢,所以我正在寻找一个更有效的记忆替代品。我有以下想法:
在redis中维护多边形字典,由它们的geohash键控。具有相同geohash的多边形将保存为列表。当我收到点,计算其geohash和修剪到所需的水平。然后在redisMap中搜索并不断修剪点的geohash,直到找到第一个结果(或足够的结果)。
从数据库中加载一组geohash。定期或通过接收更新事件来更新trie。计算点的geohash,在trie中搜索,直到找到足够的结果。我更喜欢这样,因为考虑到多边形的性质,Map可能有很长的geohash列表。
还有别的办法吗?
我读过像geotrie和polygon geohasher这样的库,但似乎无法将它们与数据库和上述思想结合起来。
有什么线索或出发点吗?

whhtz7ly

whhtz7ly1#

你有没有试过在里面用圣徒?不确定是否符合你的标准,但我相信这是意味着要比圣尤包含更快

相关问题