诚信求教地图缓存的相关知识

2024-01-16 16:16:33 +08:00
 main1234

是 N 多年前京东后端开发的 3 面面试题:

有一个平面地图,可以理解成高德地图、百度地图这种效果,当前所在经纬为 X 和 Y ,以 X 和 Y 为圆点可以查看当前地图范围内的店铺,可以拖动地图改变当前所在经纬,经纬改变后当前范围内的店铺也会改变

请设计一个店铺缓存系统实现上述功能

2011 次点击
所在节点    程序员
15 条回复
gadfly3173
2024-01-16 16:28:33 +08:00
Elissa
2024-01-16 16:59:41 +08:00
话说这不是前端相关的吗

arcgis 用户,arcgis for js 中有个视口对象 view ,view 可以监听拖动、缩放事件,回调函数会返回视口范围 extent ,extent 和点、线、面一样属于 geometry ,可以将 extent 作为条件 new 一个 query 对象,通过图层查询传入查询条件 query ,实现仅查询视口范围内的要素
shinsekai
2024-01-16 17:01:08 +08:00
用 kdtree 解决,不知道是不是正确答案。
Elissa
2024-01-16 17:04:31 +08:00
https://developers.arcgis.com/javascript/latest/sample-code/highlight-features-by-geometry/

这个示例是通过查询鼠标点击位置处的正方形进行查询
jiangwei2222
2024-01-16 20:52:14 +08:00
纯算法的话 geohash ,Google S2

工程实现的话
ES GEO 查询
Redis GeoHash 查询
PG postgis
rabbbit
2024-01-16 21:35:00 +08:00
想问的是后端如何缓存已经查询过的店铺数据吧,例如某些热门地点频繁查数据库可能不太好。
redis geo +postgis ?
kuituosi
2024-01-16 23:13:59 +08:00
楼上几位没有理解全题干,人家问的是缓存 geo 实现,不仅仅是问的 geo 查找
其实里面有一些细节需要处理,毕竟 jd 也算是大厂了也要考虑高并发问题
Maboroshii
2024-01-17 00:27:40 +08:00
视野范围内的关键建筑 id 作为索引,查找关联的店铺数据。 比如大型商场,小区。
hapeman
2024-01-17 09:34:52 +08:00
redis 3.2 有一个数据类型是 GEO ,可以存储经纬度信息,并且也可以根据指定的经纬度信息获取指定范围内的信息集合,不知道可以不可以用于这个问题?
jiangwei2222
2024-01-17 11:53:10 +08:00
@kuituosi 缓存的话,直接用 Redis 的 Geo 查询,如果是自己手撸的话,用前缀树存储 GeoHash
main1234
2024-01-17 13:53:17 +08:00
看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
main1234
2024-01-17 13:53:39 +08:00
@rabbbit 看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
main1234
2024-01-17 13:54:09 +08:00
@hapeman 看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
main1234
2024-01-17 13:54:23 +08:00
@jiangwei2222 看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
jiangwei2222
2024-01-17 14:01:35 +08:00
@main1234 自己构建 GeoHash 索引呗,只要做过 gis 开发,都应该能说出 GeoHash

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1009104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX