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
正文: Redis中命令应用: 进入正题,用redis实现地理位置信息,我们可以使用redis(3.2版本以上支持)中的GeoHash的结构去实现。...112 25 KFC (小面随机选的深圳的随机KFC地址地址) //想要查看我们添加的地址的经纬度 // GEOPOS: 从key⾥⾯返回所有给定位置对象的位置(经度和纬度); GEOPOS...KFC (此处可以添加距离参数,不添加默认m,可以是km,mi) //查看以我们的地址为中心,给一个半径内的位置 // GEORADIUS: 以给定的经纬度为中⼼,返回⽬标集合中与中⼼的距离不超过给定最...⼤距离的所有位置对象; // GEORADIUSBYMEMBER: 以给定的位置对象为中⼼,返回与其距离不超过给定最⼤距离的所有位置对象。...kfc维度的计算结果为101001,经度的计算结果为110011 合并:此时我们就做合并操作,我们把经度放在偶数位置上,纬度放在奇数位置上,用这样子的方法去组成新的字符串,最终得到:110110000111
(latitude BETWEEN minlat(最小纬度) AND maxlat(最大纬度)) 查询之后结果集之后,通过经纬度计算距离 ② 第二种方案:直接通过复杂的sql语句计算结果(实习时用过...用的不是很多 注意:单单基于 mysql 实现 “附近的人”;优点:简单,一张表存储经纬度即可;缺点:数据量比较小时可以使用,同时可以配合redis缓存查询结果集,效果也是ok的;但是数据量比较大的时候...(不推荐使用了) 基于mysql + GeoHash实现附近人查询 ① 设计思路 在原本存储用户经纬度的表中:入库时计算经纬度对应的geohash字符串存储到表中;那么存储时需要我们明确字符串的长度。...获取指定key里返回所有指定名称的位置(经度和纬度);时间复杂度O(log(n)),n是排序集中的元素数 注意事项: ① geopos命令返回的是一个数组,每个数组中的都由两个元素组成:第一个是位置的经度...,中心点是由给定的位置元素决定的,不是使用经度和纬度来决定中心点。
计算经纬度的代码网上一搜一大把,通常是单点距离的计算,无法实现批量计算,本文将利用pandas实现亿级经纬度距离代码的实现。 最短距离计算建议参考下文,mapinfo能够很好的实现。...由于地球是球形,不同纬度下,同一经度差值对应的距离不同,纬度相同且纬度越大时,同一经度对应的距离越小,中国经纬度跨度约为73°33′E至 135°05′E;纬度范围:3°51′N至53°33′N,此处为了计算最大经度差值...,我们选取纬度为54.0;不同经度下,同一纬度差异对应的距离相同 ?...pandas分别导入源表和目标表,两个表关联得到原点与目标点的所有配对 1file_name = r'D:\python\geo\sTable.csv' 2df1=pd.read_csv(file_name...,我们选取纬度值54.0获取了最大的经度差值,随着纬度减小,此时计算的距离会大于该阈值,所以要对初次计算结果进行过滤,得出满足阈值的条目: 1distance = distance.append(nn[
计算经纬度的代码网上一搜一大把,通常是单点距离的计算,无法实现批量计算,本文将利用pandas实现亿级经纬度距离代码的实现。 最短距离计算建议参考下文,mapinfo能够很好的实现。...由于地球是球形,不同纬度下,同一经度差值对应的距离不同,纬度相同且纬度越大时,同一经度对应的距离越小,中国经纬度跨度约为73°33′E至 135°05′E;纬度范围:3°51′N至53°33′N,此处为了计算最大经度差值...,我们选取纬度为54.0;不同经度下,同一纬度差异对应的距离相同 ?...pandas分别导入源表和目标表,两个表关联得到原点与目标点的所有配对 1file_name = r'D:\python\geo\stable.csv' 2df1=pd.read_csv(file_name...,我们选取纬度值54.0获取了最大的经度差值,随着纬度减小,此时计算的距离会大于该阈值,所以要对初次计算结果进行过滤,得出满足阈值的条目: 1distance=distance.append(n[n.distance
MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近的其他数据,按照距离排序,如何下手呢?...” 多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的附近的人。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度和纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...在一个地图应用中,车的数据、餐馆的数据、人的数据可能会有百万千万条,如果使用 Redis 的 Geo 数据结构,它们将全部放在一个 zset 集合中。
三、基于Mysql 此种方式是纯基于mysql实现的,未使用GeoHash算法。...GEOADD:将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS:从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST:返回两个给定位置之间的距离; GEOHASH...:返回一个或多个位置对象的Geohash表示; GEORADIUS:以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象; GEORADIUSBYMEMBER:以给定的位置对象为中心...,获取目标集合中与中心的距离不超过给定最大距离(500米内)的所有位置对象,也就是“附近的人”。...WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。
MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近的其他数据,按照距离排序,如何下手呢?...“可是总不能遍历所有的「女神」经纬度与自己的经纬度数据计算在根据距离排序,这个计算量也太大了。...” 多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的附近的人。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度和纬度编码,最后再把经纬度各自的编码组合成一个最终编码。
计算经纬度坐标间的距离 3. 根据经纬度坐标距离排序 4. 经纬度范围查询 1....计算经纬度坐标间的距离 计算经纬度坐标间的距离 功能函数 (前四个参数为两组经纬度坐标) /** * 计算经纬度坐标间的距离 * @param $lng1 经度 * @param $lat1 纬度 *...$km; } return $distance; // 返回单位转换后的距离} 使用示例: 我在 九方广场,手机上的高德地图导航至 中海九号公馆 显示的距离为 3.6公里,计算结果还是很准确的...根据经纬度坐标距离排序 项目中经常有距离显示数据的场景,根据距离排序,越近越靠前显示;比如: 店铺地址、房源信息等。...首先,根据当前位置获取 3 公里内的经纬度范围,然后带上查询条件查询数据库即可 $longitude = 113.869205; //经度$latitude = 22.583286; //纬度$radius
三、基于Mysql 此种方式是纯基于mysql实现的,未使用GeoHash算法。...GEOADD:将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS:从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST:返回两个给定位置之间的距离; GEOHASH...:返回一个或多个位置对象的Geohash表示; GEORADIUS:以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象; GEORADIUSBYMEMBER:以给定的位置对象为中心...获取目标集合中与中心的距离不超过给定最大距离(500米内)的所有位置对象,也就是“附近的人”。...WITHDIST:在返回位置对象的同时,将位置对象与中心之间的距离也一并返回。距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。
一提到索引,大家脑子里马上浮现出B树索引,因为大量的数据库(如MySQL、oracle、PostgreSQL等)都在使用B树。...但是对于空间上的一个点(二维,包括经度和纬度),如何排序呢?又如何索引呢?解决的方法很多,下文介绍一种方法来解决这一问题。...每个POI都有经纬度信息,用图1b的SQL语句在mySQL中建立了POI_spatial的表,其中lat和lng两个字段来代表纬度和经度。为后续分析方便起见,我人造了40万个POI数据。...根据这个思路我们执行SQl查询(图5)(注:经度或纬度每隔0.001度,距离相差约100米,由此推算出矩形左下角和右上角坐标),发现过滤后正好剩下两个POI。...POI(图6a),个数为m(m<40万),复杂度为Log(40万)*过滤函数; 在步骤a过滤得到的m个POI中查找某经度范围的POI(图6b),个数为n(n<m),复杂度为m*过滤函数; 用球面距离公式计算位置与步骤
GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素的位置(经度和纬度) GEODIST 返回两个给定位置之间的距离...2.1 写入地理信息 那么如何实现目标单位半径内的所有元素呢?我们可以将所有的位置的经纬度通过上表中的GEOADD将这些地理信息转换为 52 位的Geohash写入Redis。...纬度为39.08的地点tianjin和经度为114.29纬度为38.02的地点shijiazhuang加入key为cities:locs的 sorted set集合中。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。距离的单位和查询单位一致,非必选。...例如,我们在 cities:locs 中查找以(115.03,38.44)为中心,方圆200km的城市,结果包含城市名称、对应的坐标和距离中心点的距离(km),并按照从近到远排列。
GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素的位置(经度和纬度) GEODIST 返回两个给定位置之间的距离...2.1 写入地理信息 那么如何实现目标单位半径内的所有元素呢?我们可以将所有的位置的经纬度通过上表中的GEOADD将这些地理信息转换为 52 位的Geohash写入Redis。...纬度为39.08的地点tianjin和经度为114.29纬度为38.02的地点shijiazhuang加入key为cities:locs的 sorted set集合中。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。 距离的单位和查询单位一致,非必选。...例如,我们在 cities:locs 中查找以(115.03,38.44)为中心,方圆200km的城市,结果包含城市名称、对应的坐标和距离中心点的距离(km),并按照从近到远排列。
这就要用到GEO类型中的GeoHash编码。 工作原理 sorted set 使用一种称为 Geohash 的技术进行填充。经度和纬度的位是交错的,以形成一个独特的 52 位整数....工作原理 sorted set 使用一种称为 Geohash 的技术进行填充。经度和纬度的位是交错的,以形成一个独特的 52 位整数....字符串越长,表示的范围越精确。 GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)。..., 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。...GEORADIUS 使用输入的经度和纬度来决定中心点 指定成员的位置被用作查询的中心 使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。
: 全球经纬度的取值范围为: 纬度-9090,经度-180180 中国的经纬度范围大约为: 纬度3.8653.55,经度73.66135.05 北京行政中心的纬度为39.92,经度为116.46...越北面的地方纬度数值越大,越东面的地方经度数值越大 度分转换: 将度分单位数据转换为度单位数据,公式:度=度+分/60 分秒转换: 将度分秒单位数据转换为度单位数据,公式:度 = 度...+ 分 / 60 + 秒 / 60 / 60 在纬度相等的情况下: 经度每隔0.00001度,距离相差约1米 在经度相等的情况下: 纬度每隔0.00001度,距离相差约1.1米 mysql函数计算...纬度3.86~53.55,经度73.66~135.05。...limit 10 耗时:18.0s explain:全表扫描 我测试了从1万到10万间隔1万和从10万到90万每间隔10万测试的结果变化 ?
文章目录 经纬度常识 基本原理 Geohash算法 问题 代码实现 geohash在mysql中的使用 最近需要实现一个功能,查找车辆附近的加油站,如果车和加油站距离在200米以内,则查找成功...; 经纬线和米的换算:经度或者纬度0.00001度,约等于1米,这个在GPS测算距离的时候可以体会到,GPS只要精确到小数点后五位,就是10米范围内的精度 经度0度的位置为本初子午线,在180度的位置转为西经...GeoHash用一个字符串表示经度和纬度两个坐标。...其中0111和1000两个编码非常相近,但它们的实际距离确很远。所以编码相近的两个单位,并不一定真实距离很近,这需要实际计算两个点的距离才行。...中的使用 mysql中有四个内置函数跟geohash相关。
一、为什么要用GEO先使用MySQL存储各个地铁的经纬度的方案,来实现寻找最近地铁口的需求。...都知道地球上的地理位置是使用二维的经纬度表示,经度范围(-180,180],纬度范围(-90,90],只要我们确定一个点的经纬度就可以得他在地球的位置。...哈希表用于存储地理位置的元数据,例如地点名称、地址等;有序集合用于存储地理位置的坐标信息,例如经度和纬度。坐标编码GEO数据结构使用经纬度表示地理位置的坐标信息。...经纬度是一种常用的地理坐标系统,它使用经度和纬度来表示地球上的位置。在GEO数据结构中,经度和纬度被编码为一个64位的整数,以便进行高效的计算和比较。...GEOPOS命令返回的结果包括地铁口的ID、经纬度和距离。
常见的地理坐标表示方式有经纬度,经度表示东西方向的位置,纬度表示南北方向的位置。在数据库中,通常以浮点数的形式存储这些坐标值。...在大多数主流的数据库系统中,如 MySQL、PostgreSQL 和 SQL Server 等,都提供了一些函数和方法来处理地理坐标数据和计算距离。...但需要注意的是,不同的数据库系统可能具有略微不同的实现方式和函数名称。 以 MySQL 为例,我们可以使用 ST_Distance_Sphere 函数来计算两点之间基于球面的距离。...假设我们有一个名为 locations 的表,其中包含 latitude1 (纬度 1)、 longitude1 (经度 1)和 latitude2 (纬度 2)、 longitude2 (经度...总之,使用 SQL 计算地理坐标两点之间的距离虽然具有一定的复杂性,但通过了解数据库系统提供的相关函数和方法,并结合实际需求进行灵活运用,我们能够有效地解决地理数据处理中的距离计算难题,为各种基于地理位置的应用提供强大的支持