geohash

安装geohash库

删除回忆录丶 提交于 2019-12-01 15:43:15
摩拜杯数据挖掘比赛,赛方给的数据里地理位置是用geohash表示的,因此需要安装geohash库进行解析 pip install geohash可以直接安装这个库,可是装好之后import geohash却报错 在网上找了半天,最后解决办法是去Lib/site-packages/目录下,把Geohash文件夹重命名为geohash,然后修改该目录下的__init__.py文件,把from geohash改为from .geohash 然后解决问题 来源: https://www.cnblogs.com/ceeyo/p/11691283.html

基于公共子序列的轨迹聚类(c#)

无人久伴 提交于 2019-12-01 06:17:14
前言 如今的世界中,想要研究人们的出行活动,可以利用智能手机或智能手环等个人设备生成的 GPS 数据进行研究。而在众多的研究方向中,出行的热点路线或者说经常出行的路线也比较受欢迎。采用热力图的方式对其进行研究具有许多优点。热力图给使用者的感觉就是特别直观,一眼便看出来哪些路径属于热迹(我们把热点路线,也就是重复度高的路线称为热迹)。如下图所示: (图片来自网上,侵删) 从图中我们一眼便能够找出两条粗壮的热迹。这表示有某种物体经常沿着两条路线运动。但对于计算机来说,要从图中找出这两条热迹,并加以区分形成两条完整的路线可不是一件容易的事。所以我们只能直接从轨迹上入手。接下来将介绍利用公共子序列进行轨迹聚类的方法。 该聚类方法的核心思想是相似的轨迹在地理空间中占有的位置基本一致,轨迹越相似其共有的位置占原轨迹空间的比重越大,并且随着我们划分轨迹的精度降低而提高。 数据准备 Gps 数据准备 研究轨迹聚类,最基本的要求就是拥有大量的轨迹数据。幸运的,我从网上的项目中找到了公开的 Gps 数据。为什么说是幸运的?在此之前,我曾写过一个 App,以期收集自己的出行轨迹进行研究。该应用的确达到了预期,但困难的是手机要开启 Gps 才能得到比较精准的轨迹数据,这显然提高了手机电量的要求。除此之外,收集众多的轨迹需要大量时间、上班族轨迹相对固定等一系列因素导致收集自己的轨迹计划夭折

redis GEO的使用

时光毁灭记忆、已成空白 提交于 2019-11-29 09:51:22
一、概念 redis的GEO特性在Redis3.2版本发布,这个功能可以将用户给定的地理位置信息储存起来,并对这些信息进行操作。 GEO常用语LBS(Location Based Service),基于位置的服务。 二、GEO相关命令 命令名称: geoadd 语法:geoadd key longitude latitude member [longitude latitude member……] 功能: 将给定的空间元素(维度、经度、名字)添加到指定的键里面。 有效的经度介于-180度至180度之间。 有效的维度介于-85.05112878度至85.05112878度之间。 返回值: 新添加到键里面的空间元素数量,不包括那些已经存在但是被更新的元素。 命令名称: geopos 语法:geopos key member [member……] 功能: 从键里面返回所有给定位置元素的位置(经度和维度) 返回值: 返回一个数组,数组中的每个项都由两个元素组成:第一个元素为给定位置元素的经度,第二个元素为给定位置元素的纬度。 命令名称: geodist 语法:geodist key member1 member2 [unit] 功能: 返回两个给定位置之间的距离。 如果两个位置之间的其中一个不存在,那么返回空值。 指定单位的参数unit必须是一下单位的其中一个:(默认m,km,mi,ft)

Redis高级数据结构GEO用法

给你一囗甜甜゛ 提交于 2019-11-28 18:23:34
需求 怎么实现一个“附件的人”或者附近的“商店”功能? 需求分析 可以基于数据库去做,给定一个坐标,以这个坐标为半径r, j使用sql选出近似圆的的元素进行展示。 select id from positions where x > x0-r and x < x0+r and y < y0+r and y> y0-r 但是如果访问量非常大,那数据库就无能为力,幸好Redis提供了GEO模块,直接可以使用。 业界比较通用的地理位置距离排序算法是 GeoHash 算法,Redis 也使用 GeoHash 算法。GeoHash 算法将二维的经纬度数据映射到一维的整数,这样所有的元素都将在挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。 GeoHash 算法会继续对这个整数做一次 base32 编码 (0-9,a-z 去掉 a,i,l,o 四个字母) 变成一个字符串。在 Redis 里面,经纬度使用 52 位的整数进行编码,放进了 zset 里面,zset 的 value 是元素的 key,score 是 GeoHash 的 52 位整数值。zset 的 score 虽然是浮点数,但是对于 52 位的整数值,它可以无损存储。 在使用 Redis 进行 Geo 查询时,我们要时刻想到它的内部结构实际上只是一个 zset(skiplist)。通过 zset 的 score

Geohash精度和原理

落爺英雄遲暮 提交于 2019-11-27 22:25:36
转自: https://blog.csdn.net/u011497262/article/details/81210634     https://www.jianshu.com/p/1ecf03293b9a geohash基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度的检索 目录: 经纬度常识 认识geohash geohash算法 geohash原理 对照表 经纬度常识 经线是纵的,经度是横的,用于表示不同的经线,纬线是横的,纬度是纵的,用于表示不同的纬线,如下图 纬线:地球仪上的横线,lat,赤道是最大的纬线,从赤道开始分为北纬和南纬,都是0-90°,纬线是角度数值,并不是米; 经线:地球仪上的竖线,lng,子午线为0°,分为西经和东经,都是0-180°,经线也是角度数值; 经纬线和米的换算:经度或者纬度0.00001度,约等于1米,这个在GPS测算距离的时候可以体会到,GPS只要精确到小数点后五位,就是10米范围内的精度 经度0度的位置为本初子午线,在180度的位置转为西经,数字由大到小依次经过北美洲到达西欧.纬度0度的位置为赤道 为了便于理解,将地球看成一个基于经纬度线的坐标系。纬线就是平行于赤道平面的那些平面的周线,经线就是连接南北两极的大圆线的半圆弧

必看!如何让你的LBS服务性能提升十倍!

左心房为你撑大大i 提交于 2019-11-27 14:46:10
本文由云+社区发表 作者:腾讯云数据库团队 随着国内服务共享化的热潮普及,共享单车,共享雨伞,共享充电宝等各种服务如雨后春笋,随之而来的LBS服务定位问题成为了后端服务的一个挑战。MongoDB对LBS查询的支持较为友好,也是各大LBS服务商的首选数据库。腾讯云MongoDB团队在运营中发现,原生MongoDB在LBS服务场景下有较大的性能瓶颈,经腾讯云团队专业的定位分析与优化后,云MongoDB在LBS服务的综合性能上,有10倍以上的提升。 腾讯云MongoDB提供的优异综合性能,为国内各大LBS服务商,例如摩拜单车等,提供了强有力的保障。 LBS业务特点 以共享单车服务为例,LBS业务具有2个特点,分别是时间周期性和坐标分布不均匀。 一.时间周期性 高峰期与低谷期的QPS量相差明显,并且高峰期和低峰期的时间点相对固定。 二.坐标分布不均匀 坐地铁的上班族,如果留意可能会发现,在上班早高峰时,地铁周围摆满了共享单车,而下班 时段,地铁周围的共享单车数量非常少。如下图,经纬度(121,31.44)附近集中了99%以上 的坐标。此外,一些特殊事件也会造成点的分布不均匀,例如深圳湾公园在特殊家假日涌入大量的客户,同时这个地域也会投放大量的单车。部分地域单车量非常集中,而其他地域就非常稀疏。 MongoDB的LBS服务原理 MongoDB中使用2d_index 或2d_sphere

Redis-查询附近人

强颜欢笑 提交于 2019-11-26 21:16:39
一、查询附近人:Geo指令,底层是普通的zst结构,提供7个命令 1)添加指令:geoadd 指令携带集合名称以及多个经纬度名称三元组,注意这里可以加入多个三元组 geoadd company 116.48105 39.996794 juejin 2)计算距离:geodist 指令可以用来计算两个元素之间的距离,携带集合名称、2 个名称和距离单位 geodist company juejin ireader km 3)获取元素位置:geopos 指令可以获取集合中任意元素的经纬度坐标,可以一次获取多个 geopos company juejin 5)获取元素的 hash 值:geohash 可以获取元素的经纬度编码字符串,上面已经提到,它是 base32 编码。 你可以使用这个编码值去 geohash.org/${hash}中进行直… geohash 的标准编码值 geohash company ireader 计算编码值网址:http://geohash.org/ 6)查询附近的公司:georadiusbymember 指令是最为关键的指令,它可以用来查询指定元素附近的其它元素,它的参数非常复杂 georadiusbymember company ireader 20 km count 3 asc 7)根据坐标查询附近的元素:它可以根据用户的定位来计算「附近的车」,「附近的餐馆

Redis 到底是怎么实现“附近的人”这个功能的呢?

你离开我真会死。 提交于 2019-11-26 21:14:35
作者简介 万汨,饿了么资深开发工程师。iOS,Go,Java均有涉猎。目前主攻大数据开发。喜欢骑行、爬山。 前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。 要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。 操作命令 自Redis 3.2开始,Redis基于 geohash 和 有序集合 提供了地理位置相关功能。 Redis Geo模块包含了以下6个命令: GEOADD : 将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS: 从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST: 返回两个给定位置之间的距离; GEOHASH: 返回一个或多个位置对象的Geohash表示; GEORADIUS : 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的所有位置对象; GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的所有位置对象。 其中