使用地图经纬度及范围查询坐标点信息的场景,在现实开发中还是有很多机会遇到的,比如地图导航类应用计算两点之间的距离及范围、大众点评美团等点餐按照买家和商家的坐标点进行计算距离,等等。

最近在项目中的一个需求和以上问题类似,需要按照用户的地图坐标经纬度查询一定范围内的商户信息。静下心来思考下,把问题拆解分析下就是,已知一个坐标点,按照距离求设定范围的所有坐标点集合。

1、知识准备

计算两点之间的直线距离,想到的最朴素的计算方法就是使用勾股定理,即:

如果把两个坐标点放置在同一平面内,按照地图坐标(x1,y1)到(x2,y2)的距离求解,即:

sqrt((x2-x1)² + (y2-y1)²)

然而众所周知,地球是一个不规则的球体并不是一个平面,因此除了勾股定理之外,还要充分考虑球面弧度带来的距离变化,如下图:

把上面的立体图横切成切面来观察会更加直观,如下图:

通过上面的图例,我们可以把这个问题再转换下,变成了一道数学题。

A、B是两个目标坐标点,已存在A的坐标经纬度(lngA,latA),B的坐标经纬度(lngB,latB)

c是A、B同一平面内最短直线距离,这个可以通过勾股定理获取,即sqrt((lngA - lngB)² + (latA - latB)²)

2、实现方法

当我们通过知识储备弄清了问题的本质,掌握了原理,也就解决了问题,接下来我们还需要通过具体实现和途径来解决它。

按照勾股定理自己实现业务逻辑

简单计算平面两点之间的距离,比较简单忽略

使用mysql自带函数st_distance实现

select st_distance(POINT (#latitude#,#longitude#),POINT(latitude,longitude))*111195 from table

利用mysql自带函数计算结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米即可

借助redis提供的地理空间计算能力实现

还没研究,再有复杂的再去研究下。#TODO

3、参考文章:

https://segmentfault.com/a/1190000016237750

https://blog.csdn.net/YoungLee16/article/details/88540436

【实战总结】根据地图经纬度及范围查询坐标点信息相关推荐

  1. 使用百度地图Web服务API查询地点的经纬度信息

    使用百度地图Web服务API查询地点的经纬度信息 API地理编码服务 数据 结果 API地理编码服务 地理编码服务(又名Geocoder)是一类Web API接口服务: 地理编码服务提供将结构化地址数 ...

  2. Android MVVM框架搭建(八)高德地图定位、天气查询、BottomSheetDialog

    Android MVVM框架搭建(八)高德地图定位.天气查询.BottomSheetDialog 前言 正文 一.集成SDK 二.基础配置 ① 权限配置 ② 配置Key 三.显示地图 ① MapFra ...

  3. 【MapBox实战】生成地图+绘制区域+纠偏

    [MapBox实战]生成地图+绘制区域+纠偏 mapbox介绍 生成地图过程 基础配置 坐标 在地图上绘制一块区域 在地图上画上点 瓦片地图原理理解 原理 瓦片地图背景理解 编码方式 谷歌xyz 百度 ...

  4. 高德地图API实现天气查询

    核心: 1.在高德地图注册开发者账号,获取key,取得调用API权限(用于个人学习的话,不用花钱的) 2.查看官方文档和demo,学习使用方法 --通过调用API,高德的服务器会传回一些带有天气数据的 ...

  5. 地图经纬度纠偏-所有高德系地图纠偏

    Autonavi,高德系地图(google地图.mapabc地图.腾讯的soso地图等,在地图下方有autonavi.mapabc版权信息的) 高德为互联网/移动互联网用户和网站提供互联网地图(Map ...

  6. amap高德地图poi附近地址查询

    通过给定一个经纬度,获取附近的地理位置信息(附近地址) 1.首先初始化地图 private var aMap: AMap? = nulloverride fun initView() {//初始化地图 ...

  7. 百度地图经纬度,转换为地图上的点

    <!doctype html> <html lang="en"> <head> <title>根据地址查询经纬度</title ...

  8. 高德根据经纬度,查询所在位置信息

    第一步.去申请高德的key 第二步.引入下面的工具类 第三步.创建协议了,映射想要拿到的数据 package com.fangzhou.common.utils;import java.io.Buff ...

  9. uniapp调用地图,进行位置查询,标记定位

    这周开会又新增一个小功能,就是需要通过身份证号/手机号在地图查询(后台返回经纬度),标记位置,想着挺麻烦,做的时候发现没啥技术,分享给大家. <map class="map" ...

最新文章

  1. 新的微芯片MCU增加了来自外部闪存的安全引导保护
  2. 【ES6】JS第7种数据类型:Symbol
  3. opengl光照效果_【图形学基础 | Shader】Blinn-Phong 光照模型
  4. Java 流(Stream)、文件(File)和IO -- Java ByteArrayOutputStream类
  5. php -- 检查是否存在
  6. 十七、深入Python异常处理
  7. 类加载器的概述和分类
  8. formidable处理提交的表单或文件的简单介绍
  9. 自动化测试的概念及工具
  10. Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)
  11. 《企业软件交付:敏捷与高效管理精要》——2.1 引言
  12. 冒泡排序java jsp_冒泡排序实现原理
  13. appinventor贪吃蛇制作步骤_旋转RGB制作指导
  14. 无法为jsp编译类_《刺激战场》改名为《和平精英》,有2类玩家或可能无法登陆游戏...
  15. db2 matlab实现,MATLAB MIMO-OFDM无线通信技术及 实现一书的源码和配套英文书267万源代码下载- www.pudn.com...
  16. Fabric 1.0源代码分析(39) policy(背书策略)
  17. 嵌入式lab3——自行车码表
  18. JAVA之假克隆、浅克隆、深克隆
  19. 参赛必备 | “互联网+”大赛参赛攻略
  20. 直播预告|无监督学习的公平性研究——美国布兰迪斯大学助理教授刘洪甫

热门文章

  1. Sqldbx连接OracleX64位
  2. matlab怎么画map图,用MATLAB自带的worldmap及相关函数画地图
  3. arch linux键盘布局,达内培训之更改ArchLinux终端下的键盘布局
  4. postman测试Excel文件导入导出功能
  5. 手势识别整体设计流程方案
  6. mysql ipv6 字段_MySQL中ipv6地址用什么类型存储?
  7. layui前端项目打包方法_layui封装模块基础教程
  8. vuepress-theme-reco主题相关配置 + gitee pages 部署
  9. mybaties学习笔记
  10. gtx1660是什么级别的_显卡天梯图秒懂GTX1660Ti性能 GTX1660Ti相当于什么显卡