坐标系中找一个参考点某个范围内坐标点的问题

一个坐标系中有不少点(坐标),现给出一个参考点,找出参考点范围(xxx米,xxx千米)内的点。mysql

1.现实生活中坐标就是指经度和纬度,每一个单位之间距离能够量化(每一个单位纬度距离≈111千米;每一个单位经度距离≈111cosα千米,赤道≈111千米),给出一个坐标点,找附近的点,能够理解为以该点为圆心,该圆所覆盖的点(方便计算能够理解为矩形覆盖),那么能够根据量化单位和范围得出经度和纬度的范围,好比点[104.292100,30.990100]一千米范围内的点就是(非球面计算法,经度范围[104.282200~104.302000],纬度[30.981010~30.999190])算法

2.每条数据坐标分别保存在数据库表中字段x(经度),y(纬度)里,那么查询条件(where x BETWEEN 104.282200 AND 104.302000 AND y BETWEEN 30.981010 AND 30.999190)sql

3.另外mysql,mongodb自己就支持坐标计算,直接使用相应查询语句能够实现(具体能够参考相关文档)mongodb

4.针对坐标数据存储的问题,如何优化。好比mysql能够采用分表的方法存储,好比分为N个表(例如华东、华北、华南、东北),看你怎么分(其中涉及到临界点范围点跨表的问题以及点范围的判断,具体分析业务逻辑来划分处理这个问题),每一个分区都有x,y的范围,先对点判断分区,匹配相应的存储表作查询,减小检索数据量大小,以及设置x,y联合索引,提升检索速度数据库

5.后面若是有什么想法再补充优化

相关文章
相关标签/搜索