mysql gps数据查询_Mysql数据库中计算两GPS坐标的距离
Mysql数据库中计算两GPS坐标的距离有两种方式:
1、直接使用SQL语句:#lat为纬度, lng为经度, 一定不要弄错
declare @lng1 float;
declare @lat1 float;
declare @lng2 float;
declare @lat2 float;
set @lng1=116.3899;
set @lat1=39.91578;
set @lng2=116.3904;
set @lat2=39.91576;
select (2*ATAN2(SQRT(SIN((@lat1-@lat2)*PI()/180/2)
*SIN((@lat1-@lat2)*PI()/180/2)+
COS(@lat2*PI()/180)*COS(@lat1*PI()/180)
*SIN((@lng1-@lng2)*PI()/180/2)
*SIN((@lng1-@lng2)*PI()/180/2)),
SQRT(1-SIN((@lat1-@lat2)*PI()/180/2)
*SIN((@lat1-@lat2)*PI()/180/2)
+COS(@lat2*PI()/180)*COS(@lat1*PI()/180)
*SIN((@lng1-@lng2)*PI()/180/2)
*SIN((@lng1-@lng2)*PI()/180/2))))*6378140;
#返回结果: 42.7484246368099
2、定义函数后再调用(适合批量计算):# use aiezu;
drop function getDistance;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `getDistance`(
lng1 float(10,7)
,lat1 float(10,7)
,lng2 float(10,7)
,lat2 float(10,7)
) RETURNS double
begin
declare d double;
declare radius int;
set radius = 6378140; #假设地球为正球形,直径为6378140米
set d = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2)
*SIN((lat1-lat2)*PI()/180/2)+
COS(lat2*PI()/180)*COS(lat1*PI()/180)
*SIN((lng1-lng2)*PI()/180/2)
*SIN((lng1-lng2)*PI()/180/2)),
SQRT(1-SIN((lat1-lat2)*PI()/180/2)
*SIN((lat1-lat2)*PI()/180/2)
+COS(lat2*PI()/180)*COS(lat1*PI()/180)
*SIN((lng1-lng2)*PI()/180/2)
*SIN((lng1-lng2)*PI()/180/2))))*radius;
return d;
end
$$
DELIMITER ;
select getDistance(116.3899,39.91578,116.3904,39.91576); #调用函数
#返回结果:43.045058294389
常见问题及解决方法:
常见问题:
在创建函数前报如下错误:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)解决方法:
在创建函数前执行下面SQL语句:set global log_bin_trust_function_creators=1;或者修改my.cnf文件并重启mysqld服务:log_bin_trust_function_creators=1
PHP计算两个GPS坐标点之间的距离: http://aiezu.com/article/18.html
Javascript计算两个GPS坐标的距离: http://aiezu.com/article/17.html
更多关于GPS计算请参考:http://www.movable-type.co.uk/scripts/latlong.html(被墙)
mysql gps数据查询_Mysql数据库中计算两GPS坐标的距离相关推荐
- mysql 脏数据查询_MySQL数据库02
MySQL数据库 前言: 前面我们了解了什么是数据库,什么是MySQL数据库以及如何运用,接下来我们接着深入学习MySQL. (提前声明,以下所提供的事例不标准,仅供参考) 数据库的备份与还原: 备份 ...
- mysql 查看数据库函数_MySQL数据库中常用查询函数简介
MYSQL中的常用函数 count(*)--- 相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录. select count(*) from yinxiong; Count(列名) ...
- NodeJS同步MySQL上游数据到ElasticSearch数据库中
NodeJS同步MySQL上游数据到ElasticSearch数据库中 项目地址: https://github.com/Miazzy/xdata-elasticsearchs-service.git ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- Android 高德地图根据地址获取经纬度,计算两个坐标的距离
1.到高德开放平台申请,获取key 高德开放平台:https://lbs.amap.com/ 2.下载高德定位及地址搜索SDK:https://download.csdn.net/download/m ...
- mysql 查找数据过程_mysql数据库查询过程探究和优化建议
查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...
- mysql 从库数据损坏_MySQL数据库中数据损坏恢复全过程
MySQL数据库中数据损坏恢复全过程 前几天因为MySQL数据库部分数据损坏原因,我尝试了下恢复数据,之后整理以下文档,供各位参考,以备各位同事以后如有类似问题,可以少走些弯路,尽快解决问题. 环境: ...
- mysql double保留两位小数_mysql数据库中计算时如何保留两位小数呢?
摘要: 下文讲述mysql数据库中数值计算时保留两位小数的方法分享,如下所示: 例: mysql > select convert(9521,decimal(12,2)); +--------- ...
- mysql 性能 数据 指标_MySQL数据库:三个关键性能指标
今天主要介绍MySQL数据库,或者说所有数据库的三个关键性能指标: qps 每秒处理的查询数 tps 每秒处理的事务数 IOPS 每秒磁盘进行的I/O操作次数 一.TPS(适用innodb) 1. 概 ...
最新文章
- 北大成功研发 “忘情水” ,可精准删除特定记忆,有望今年进行人体测试
- mSystem:西农韦革宏组细菌-真菌互作影响微生物多样性-土壤养分循环关系
- db2关闭下一句sql的日志_MySQL 用户和权限管理,日志体系简介
- error: No resource identifier found for attribute ‘backIcon’ in package
- ElasticSearch中distinct,count和group by的实现
- ES6 new syntax of Default Function Parameters
- apicloud使用指南
- sizeof和strlen的区别(其中涉及NUL的讲解)
- android 获取栈顶activity,Android : 如何得到Activities栈顶的Activity名称
- 明显调用的表达式前的括号必须具有指针函数类型_每天三分钟带你搞懂C++基础Day5 处理类型 typedef、auto、decltype...
- C语言学习之插入排序
- vscode同时打开多个文档方法,简直了
- aop实现原理_Spring学习之AOP
- Python常用快捷键整理
- python文件操作快速入门
- 一个屌丝程序猿的人生(十五)
- 关于opencv fitLine直线拟合得斜率及截距
- 解决Maven打包报错:Failed to clean project: Failed to delete
- 笛卡尔坐标系中八个卦限对应的位置
- HTML转义字符表,JavaScript常用转义符