GeoHash在POI的地理围栏定位使用

Location Based Service

LBS英文全称为Location Based Services, 通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。如寻找用户当前位置1公里范围内的宾馆、影院、图书馆、加油站等的名称和地址。包括两层含义:

  • 确定移动设备或用户所在的地理位置;
  • 供与位置相关的各类信息服务。

商业模式

  • 休闲娱乐模式。
    • 签到模式
      • 用户主动签到记录自己所在位置;
      • 通过积分、勋章以及领主等荣誉激励用户;
      • 通过商家合作,对获得特定积分或勋章的用户提供优惠或折扣奖励,同时营销商家品牌;
      • 通过绑定用户其它工具以同步分享用户位置信息;
      • 通过鼓励用户对地点商户评价产生优质内容。
    • 大富翁游戏模式,让用户用手机购买现实地理位置的虚拟房产与道具,并进行消费与互动等将现实和虚拟融合的模式。
      • 特点是趣味性,可玩性与互动性更强,比签到模式更具粘性
      • 商业模式除了联合商家营销外,还可提供增值服务,以及植入广告等。
  • 生活服务模式
    • 周边服务搜索:如大众点评网。主要体验在工具实用,
    • 问题在信息量积累和覆盖面要比较广泛。
    • 与旅游结合:LBS和旅游的结合是十分切合的。分享攻略和心得体现了一定的社交性质,代表是游玩网。
    • 会员卡与票务模式:一卡捆绑多种会员卡,电子会员卡记录消费习惯信息,如Mokard、Eventbee。
  • 社交模式
    • 地点交友,即时通讯:不同用户因为在同一时间处于同一地理位置构建用户关键,如兜兜友。
    • 以地理位置为基础的小型社区:如区区小事
  • 商业型
    • LBS+团购:两者都有地域性,用户到本地签约商家后签到,到达一定数量就可以得到折扣或优惠。
    • 优惠信息推送:提供基于位置的优惠信息推送,盈利模式是通过和线下商家合作利益分成。
    • 店内模式:将用户吸引到指定商场,完成指定行为后便赠送可兑换成商品或礼券的虚拟点数。
  • 其他模式
    • 例如小企业自建地理围栏或者其他定位服务。

GeoHash的使用

给定经纬,获取该位置周围1000米的餐馆或者ip地址。通过遍历计算所有地标与目标点距离,显然效率低下。
GeoHash是二维的空间经纬度数据编码成一个字符串的地址编码方法。
例如,美罗城的经纬度是[31.1932993, 121.43960190000007],下面计算该位置对应的GeoHash值。
安装需要的python包
pip install python-geohash
代码:

import geohash

longitude, latitude = 121.43960190000007, 31.1932993
hashcode = geohash.encode(latitude, longitude, precision=6)  # 编码
print(hashcode)
# 输出 wtw37q
print(geohash.neighbors(hashcode))  # 8个近邻编码
# 输出 ['wtw37n', 'wtw37w', 'wtw37p', 'wtw37r', 'wtw37x', 'wtw37j', 'wtw37m', 'wtw37t']

显示如下图:

meiluocheng.png

wtw37q即为美罗城坐标对应的矩形区域,该区域内所有的经纬度的geohash字符串前6位均为wtw37q
geohash长度与精度对应的关系
geohash精度问题.png

字段越长,精度越高,即对应的矩形范围越小。因此仅需确定大致的精度范围和geoHash字符串对应长度。

POI地理围栏问题

在实际运用中,给定任意的经纬度坐标,要快速定位对应到POI地理围栏中。

方案-:计算围栏范围内所有的GeoHash编码
该场景封装为函数:输入组成围栏的点经纬度坐标集合和指定的geohash长度,输出一组geohash编码。不过该方法存在边界周围部分点缺失情况。

def getHashByFence(point_list,geohash_length):
    ···
    ···
    return geohas_list

算法步骤:

  1. 输入围栏点坐标集合point_list和指定的geohash长度length
  2. 计算围栏的外包矩形的左上角和右下角坐标lat_min、lat_max、lng_min、lng_max
  3. 根据lat_min、lat_max、lng_min、lng_max,计算外包矩形对角定点的距离d
  4. 以外包矩形中心点为圆心,以d/2为半径做一个圆,计算圆覆盖范围内的geohash
    4.1 获取圆的外包矩形左上角和右下角定点坐标经纬度,存储到double[] locs
    4.2 根据geohash字符长度计算该长度geohash编码对应的经纬度间隔(latA,lngA)
    4.3 根据latA和lngA,计算出locs组成的矩形的左上角和右下角定点的经纬度,在geohash划分的网格的索引(也就是第几个),分别记为lat_min,lat_max,lng_min,lng_max
    4.4 计算lat_min,lat_max,lng_min,lng_max对应范围内左右geohash的二进制编码,然后将经纬度二进制编码uncode为geohash字符编码,保存为Set。
  5. 剔除sets中geohash编码对应矩形的中心点不在points围栏范围内的geohash,得到最终的geohash结果集。

方案二:利用GeoHash编码对应的是地理区域属性
利用瓦片思想,大幅减少遍历次数,保证精度。
算法步骤:

  1. 因为poi对应区域较小,对poi中心点计算geohash值,字符串长度为6-8左右即可。
  2. 如果坐标落在区域内,则遍历该区域下所有的poi,使用点是否多边形在多边形内算法判断。

参考资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容

  • 1. 引言 GeoHash本质上是空间索引的一种方式,其基本原理是将地球理解为一个二维平面,将平面递归分解成更小的...
    renzehello阅读 38,456评论 1 17
  • GeoHash算法 涉及到地图的内容,基本都会遇到搜索附近的功能,比如附近的人、附近的店铺等。要实现这样的功能,我...
    小苏c阅读 2,013评论 0 2
  • 1.场景 随着智能手机和传感器技术的发展,LBS(Location based service)类的应用也逐渐多了...
    Daniel_adu阅读 11,466评论 3 13
  • 1.场景 随着智能手机和传感器技术的发展,LBS(Location based service)类的应用也逐渐多了...
    hyperbolaa阅读 3,327评论 3 16
  • 怎么做网上有奖调查赚钱 网上有奖调查就是网上有一些调查平台,专门提供网上问卷小调查的。一般调查都是有奖励的,有的是...
    xiaosongshu66阅读 385评论 0 0