一个坐标系中有很多点(坐标),现给出一个参考点,找出参考点范围(xxx米,xxx公里)内的点。
1.现实生活中坐标就是指精度和纬度,每个单位之间距离可以量化(每个单位纬度距离≈111公里;每个单位经度距离≈111cosα公里,赤道≈111公里),给出一个坐标点,找附近的点,可以理解为以该点为圆心,该圆所覆盖的点(方便计算可以理解为矩形覆盖),那么可以根据量化单位和范围得出经度和纬度的范围,比如点[104.292100,30.990100]一公里范围内的点就是(经度范围[104.292049~104.292151],纬度[30.990044~30.990156])
2.每条数据坐标分别保存在数据库表中字段x(经度),y(纬度)里,那么查询条件(where x BETWEEN 104.292049 AND 104.292151 AND y BETWEEN 30.990044 AND 30.990156)
3.另外mysql,mongodb本身就支持坐标计算,直接使用相应查询语句可以实现(具体可以参考相关文档)
4.针对坐标数据存储的问题,如何优化。比如mysql可以采用分表的方法存储,比如分为N个表(例如华东、华北、华南、东北),看你怎么分,每个分区都有x,y的范围,先对点判断分区,匹配相应的存储表做查询,减少检索数据量大小,以及设置x,y联合索引,提高检索速度
5.后面如果有什么想法再补充
转载至链接:https://my.oschina.net/cdcc/blog/1924150