一 说明
本模块主要开发“面到面”、“面到点”,“点到面”跑腿时可选择地址的查询、储存等功能。
注:点到线本期不做【后序实习增加】
运营前提:在运营前,学校内部的核心地点是要提前录入;但是考虑到周边商家会有一定的变化;地点会周期性审核
二 亮点说明
1 【小亮点】开通某学校的初始化距离(一次性,运营触发)
学校数量上限500,每个学校初始化数据上限100
直接计算每个建筑直线100米的建筑
并且,相连数据是小数固定项,使用id,id的方式存储,减少查询量
2 【小亮点】用户增加地点
(1)确定地点在可用区域内
(2)因为提交信息需要人工审核,但是用户却需要实时的返回周边建筑id,所以解决方案是找到50米内最近的已有建筑id(虽然只有100个建筑,也可以考虑一下“最近”的实现)
如果50米内没有,则返回错误“50米内没有已有地点,等待审核数据”
3 【大亮点】审核时,对增加建筑周边建筑计算的优化
因为用户提高地址是人工审核,一个学校可能堆积上百个地址,那500个学校,就有上万个地点。
如果依然使用原来的全量计划的方案,会对计算性能和类实时的要求造成影响
所以采用增量更新的方法:
(1)先计算新增地点周遍100米的地址,并记录ids
(2) 对1中的每个ids里的id,增加本地址id
(3)更新本学校redis
注意,因为学校地址固定,基本都是一次性计算,不需要使用其它的geo组件
三 服务设计
四 数据表设计
1 学校地址表 xzvip_paitui_college_location
2 xzvip_paotui_location_nearby 周边建筑表
字段 | 类型 | 可空 | 备注 |
id | int(11) | 自增 | |
CollegeId | int(11) | 学校id | |
LocationId | int(11) | 当前id | |
LocationNearbyIds | varchar(100) | 范围内地址的所有id,使用,分割 | |
Status | tinyint(1) | 0-; 1- | |
AddTime | dateTime | ||
UpdateTime | dateTime | 更新时间 |
3 学校边界表 xzvip_paotui_college_edge
字段 | 类型 | 可空 | 备注 |
id | int(11) | 自增 | |
CollegeId | int(11) | 学校id | |
TopLeftX | decimal(9,6) | 左上角点经度 | |
TopLeftY | decimal(9,6) | 左上角点维度 | |
BottomRightX | decimal(9,6) | 右下角点经度 | |
BottomRightY | decimal(9,6) | 右下角点维度 | |
Status | tinyint(1) | 0-; 1- | |
AddTime | dateTime | ||
UpdateTime | dateTime | 更新时间 |