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

一个坐标系中有很多点(坐标),现给出一个参考点,找出参考点范围(xxx米,xxx公里)内的点。

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)

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

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

5.后面如果有什么想法再补充

转载于:https://my.oschina.net/cdcc/blog/1924150

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值