Go语言计算两个经度和纬度之间的距离 package main import ( "fmt" "math" ) func main() { lat1 := 29.490295
php代码:转载 http://www.cnblogs.com/caichenghui/p/5977431.html 1 /** 2 * 求两个已知经纬度之间的距离,单位为米 3 * 4...* @param lng1 $ ,lng2 经度 5 * @param lat1 $ ,lat2 纬度 6 * @return float 距离,单位米 7 * @author www.Alixixi.com
上周有一个“收银台”的业务需要重构,其中有一个需求: 收益计算的结果,取小数点后两位但不进行四舍五入,若不足则补0。...但是当看到以前同事的方法时,感觉这个方法并不能完全满足: /*** 截断小数点后几位* @val 数值* @pos 小数点后截断的位置*/cutOffDecimal(val, pos) { //...把数字转换成字符串 val = val.toString() let len = val.length let index = val.indexOf('.')...number but not a NaN'); return; } return number.toFixed(prec + 1).slice(0,-1);} 1.类型判断,非数字以及...NaN的则报错; 2.toFixed我没有直接取到目标位置,而是取到目标位置的下一个位置,这样就避免了该方法的四舍五入对结果造成的影响,然后再用slice截取字符串。
上次总结的第四条: 当传入的参数小于数字的整数位时,返回指数形式表示的字符串。...let numObj = 12345.6numObj.toPrecision(2) // '1.2e+4' 在JavaScript中有一个专门返回数字的指数形式的方法:toExponential() numObj.toExponential...大意: 返回一个小数点前有一位数字且已按照小数点后指定的位数(fractionDigits)四舍五入后的指数形式的字符串。...7.71234e+1console.log(77 .toExponential()); // logs 7.7e+1 注意: fractionDigits 取 0~20之间,其实就是小数点后有几个数字...若numObj是一个没有小数点或者非指数形式的数字字面量,在调用时需要加一个空格,以防止解释器将"点"解释为小数点。 下篇将探究一下,经典问题:0.1 + 0.2 != 0.3。
这篇是精度问题的最后一篇,要是想看前面的,请看微信历史记录。 做前端的都感觉JS这语言巨坑无比,兼容性让你摸不到头脑,甚至还会让你脱发。...其实和JS采用的数值存储 IEEE754 规范有关,所有采用此规范的语言都会有此问题并不是JS的"锅"。...JS采用64位(双精度)存储数据,在 IEEE 标准中,浮点数是将所有二进制位分割为特定宽度的符号域(S),指数域(E)和尾数域(F)三个域, 其中保存的值分别用于表示给定二进制浮点数中的符号,指数和尾数...M表示有效数字,大于等于1,小于2,但整数部分的1可以省略。 2^E表示指数位。 对于十进制的5.25对应的二进制为:101.01,相当于: 1.0101*2^2。...最后0.1实际存储为: 0.0001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1010 同理计算出0.2的实际存储值(同样也存在精度丢失
to precision significant digits 大意: 返回一个定点和指数表示的同时四舍五入到指定位数的字符串。...PI.toPrecision(6)) // 3.14159console.log(PI.toPrecision(4)) // 3.142console.log(PI.toPrecision(2)) // 3.1 1.按指定的数字截取数字位数...numObj.toPrecision(2)); // '0.00012'console.log(numObj.toPrecision(1)); // '0.0001' 2.没有传入参数时,返回数字的字符串形式...,3.截取的位置从左边第一个非0的数字开始算起,不足补0。...let numObj = 12345.6numObj.toPrecision(2) // '1.2e+4' 4.当传入的参数小于数字的整数位时,返回指数形式标识的字符串。
: InnoDB的事务日志,又称Redo log - aria_log*: aria存储引擎的控制文件和日志 - mysql/: mysql系统库的存储目录 - performance_schema.../: performance_schema系统库的存储目录 - test/: test库的存储目录 每个库目录下存储每张表的数据和索引、表定义、数据库选项定义。...慢查询是数据库系统响应变慢的最主要原因,当你的业务遇到问题时,应该优先排查慢查询优化不合理的业务SQL。...关于MySQL存储空间的常见问题 1. 为什么用SQL查询出来的文件大小和整个数据库存储占用空间有差异?...当表的大小超过了参数指定的大小时,会使用临时文件存储。 场景2:在执行查询SQL时,根据生成的执行计划(explain查看),mysql会自动创建内部临时表.
MySQL的存储过程,没错,看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单,需要开通一些权限。...本来是一个很正常的操作,但在我来看是比较着急且紧迫的,说来惭愧,忙着方向规划和开发的事情,这个基础的操作功能竟然给忽略了,所以看到目前的一些实现方式,还是希望能够做一些细小的事情把这些重复性的工作给解放了...因为我们没有select procedure或者view procedure的权限,所以我们几乎再无从干预了。 使用命令行的方式能够复现出这个问题: ? 没有存储过程的实质性内容。...在那儿折腾了好一会,发现是个老问题了,10多年前的老问题了。 https://bugs.mysql.com/bug.php?...id=20235 问题的解决其实很简单,就是需要这样一句: grant select on mysql.proc to xxxx@'xxxx'即可 所以细粒度的权限控制就是这么纠结,但是确实有效。
答案就是 geohash geohash通过算法将1个定位的经度和纬度2个数值,转换成1个hash字符串。如果2个地方距离越近,那么他们的hash值的前缀越相同。...地球铺平面图 以赤道和本初子午线为界,将地球分为经度和纬度。赤道是在0度,本初子午线也在0度。以赤道作为经度X横坐标,以本初子午线作为纬度 Y 竖坐标。...指定一个位置的经纬度坐标值。 根据十字坐标图和二分法,将纬度和经度划分成1和0的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度和纬度这2个二进制数字串。..." 现在需要按照”偶数位放经度,奇数位放纬度”,将这2个数字串,合二为一。...B距离我们更近一点,但是,由于A 和腾大在一个hash区块内,所以,就得出了A是最佳的选择。这就是边界的问题。 边界问题 如何解决边界问题 那么如何解决这个边界问题,给出最近最优的算法方案呢?
geohash通过算法将1个定位的经度和纬度2个数值,转换成1个hash字符串。如果2个地方距离越近,那么他们的hash值的前缀越相同。...以赤道作为经度X横坐标,以本初子午线作为纬度Y竖坐标: 经度(longitude)和纬度(latitude)简称lng和lat。...指定一个位置的经纬度坐标值。 根据十字坐标图和二分法,将纬度和经度划分成1和0的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度和纬度这2个二进制数字串。..." 现在需要按照"偶数位放经度,奇数位放纬度",将这2个数字串,合二为一。...B距离我们更近一点,但是,由于A和腾大在一个hash区块内,所以,就得出了A是最佳的选择。这就是边界的问题。 六、如何解决边界问题 那么如何解决这个边界问题,给出最近最优的算法方案呢?
mysql存储过程设置: delimiter // #将mysql的结束符设置为// create procedure name(IN | OUT |INOUT str STRING) #定义存储过程名字...begin #开始存储过程 select * from tables; #执行过程 end // #结束存储过程 delimiter ; #将mysql的结束符设置为; call name(); #存储过程调用...drop procedure if exists name #存储过程删除 mysql储存函数设置: delimiter // #将mysql的结束符设置为// create function name...DELIMITER ; #将mysql的结束符设置为; call add_id(@num); #存储过程调用 select @num,@sum; #查询结果 mysql定义处理程序的方式: #捕获sqlstate_value...sqlexception declare exit handler for sqlexception set @info='ERROR'; 使用sqlexception,捕获没有被sqlwarning和not
image.png 我们在开发中经常会使用MySQL作为数据库,通常在存储文章或者评论时会遇到表情符号无法存储的问题 原因 经过分析原因是因为字符串包含emoji表情,这个emoji表情用的是4个字节的数据...,而MySQL默认的数据是3个字节的,3个字节的空间肯定无法存储4个字节的数据的。...解决 这时候我们只需要修改字符集为utf8mb4将对应的表修改排序方式为utf8mb4_general_ci。
结语: ---- 一、概念 在MySQL数据库中,存储程序可以分为存储过程和存储函数。...5.能够提高系统性能 由于存储过程和函数是经过编译后保存到MySQL数据库中的,首次执行存储过程和函数后,存储过程和函数会被保存到相关的内存区域中。...MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。...若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可: DELIMITER ; 接下来是创建存储过程更详细的说明和介绍: ---- CREATE PROCEDURE...1)右键新建函数 2)打开函数向导,这里可以看到有过程和函数两个类型 3)指定参数名 最后保存即可。 结语: 本节主要给大家介绍 Mysql 存储过程和存储函数的初步认知。
拟地理编码含义 输入位置信息(经度和维度)获取地球上位置。...步和第12步的广播流结果进行关联,并应用拉宽操作 14)将拉宽后的结果数据写入到mysql数据库中 15)启动作业 需要获取地理位置对象,可以作为ItcastDataPartObj的父类 @Data @...private Double lat = -999999D; //经度 private Double lng = -999999D; } 实现合并流数据在redis存储的地理位置数据拉宽操作...、经度,返回32编码字符串 * @param lat 纬度 * @param lon 经度 * @return base32的字符串 */ public...、经度,返回32编码字符串 * @param lat 纬度 * @param lon 经度 * @return base32的字符串 */ public
事情到这里,总体方案就比较明朗了:就是将一个人经纬度的geohash字符串保存到MySQL数据库里,然后通过MySQL的like去模糊匹配geohash前缀就可以了。...(0度,-180度) 纬度的0度就是赤道;经度的0度就是本初子午线,转半圈后180度处就是东经和西经的交界线 下面我们利用geohash算法给经纬度(104.07642,38.6518)换算一下字符串(...104.07642是经度,38.6518是纬度),你们感受一下过程。...主要我特么快吐了,算不下去了 我们将上述过程的标记依次记录下来:11001。 ---- 纬度 人类的本质是什么?复读机 请按照纬度(-90,0)(0,90)范围,结合人类本质去搞定经度的算法。...---- 然后我们按照偶数位置放经度,奇数位置放纬度(注意位置从0开始而不是1)的规则将上面标记位组装起来,形成一个最终的数字字符串(注意第二行是数字位置,第一行是数字字符串): ?
一、为什么要用GEO先使用MySQL存储各个地铁的经纬度的方案,来实现寻找最近地铁口的需求。...都知道地球上的地理位置是使用二维的经纬度表示,经度范围(-180,180],纬度范围(-90,90],只要我们确定一个点的经纬度就可以得他在地球的位置。...精准度的问题,我们知道地球不是平面坐标系,而是一个圆球,这种矩形计算在长距离计算时会有很大误差所以使用MySQL的方案处理地理位置相关问题是有问题,所以引入Redis的GEO。...哈希表用于存储地理位置的元数据,例如地点名称、地址等;有序集合用于存储地理位置的坐标信息,例如经度和纬度。坐标编码GEO数据结构使用经纬度表示地理位置的坐标信息。...经纬度是一种常用的地理坐标系统,它使用经度和纬度来表示地球上的位置。在GEO数据结构中,经度和纬度被编码为一个64位的整数,以便进行高效的计算和比较。
在当今数字化的世界中,地理数据的处理和分析变得越来越重要。当我们面对一个包含地理坐标数据的表时,经常会遇到需要计算两点之间距离的需求。...常见的地理坐标表示方式有经纬度,经度表示东西方向的位置,纬度表示南北方向的位置。在数据库中,通常以浮点数的形式存储这些坐标值。...在大多数主流的数据库系统中,如 MySQL、PostgreSQL 和 SQL Server 等,都提供了一些函数和方法来处理地理坐标数据和计算距离。...但需要注意的是,不同的数据库系统可能具有略微不同的实现方式和函数名称。 以 MySQL 为例,我们可以使用 ST_Distance_Sphere 函数来计算两点之间基于球面的距离。...假设我们有一个名为 locations 的表,其中包含 latitude1 (纬度 1)、 longitude1 (经度 1)和 latitude2 (纬度 2)、 longitude2 (经度
文章目录 经纬度常识 基本原理 Geohash算法 问题 代码实现 geohash在mysql中的使用 最近需要实现一个功能,查找车辆附近的加油站,如果车和加油站距离在200米以内,则查找成功...; 经纬线和米的换算:经度或者纬度0.00001度,约等于1米,这个在GPS测算距离的时候可以体会到,GPS只要精确到小数点后五位,就是10米范围内的精度 经度0度的位置为本初子午线,在180度的位置转为西经...,数字由大到小依次经过北美洲到达西欧.纬度0度的位置为赤道 基本原理 GeoHash是一种地址编码方法。...GeoHash用一个字符串表示经度和纬度两个坐标。...相邻区域内的绿点明显离红点更近。但因为黄点的编码和红点一样,最终找到的将是黄点。这就有问题了。 要解决这个问题,很简单,只要再查找周边8个区域内的点,看哪个离自己更近即可。 另外就是曲线突变问题。
*/ public function combination($latitude_str, $longitude_str) { $result = ''; //循环经度数字 作为偶数位置...用的不是很多 注意:单单基于 mysql 实现 “附近的人”;优点:简单,一张表存储经纬度即可;缺点:数据量比较小时可以使用,同时可以配合redis缓存查询结果集,效果也是ok的;但是数据量比较大的时候...(不推荐使用了) 基于mysql + GeoHash实现附近人查询 ① 设计思路 在原本存储用户经纬度的表中:入库时计算经纬度对应的geohash字符串存储到表中;那么存储时需要我们明确字符串的长度。...获取指定key里返回所有指定名称的位置(经度和纬度);时间复杂度O(log(n)),n是排序集中的元素数 注意事项: ① geopos命令返回的是一个数组,每个数组中的都由两个元素组成:第一个是位置的经度...,中心点是由给定的位置元素决定的,不是使用经度和纬度来决定中心点。