geo-region(将地理区域设置转换为GeoHash字符串, 并提供快速查找且节省内存的实现)

源码

GitHub
Gitee
点此进入体验地址

功能介绍

该工具提供了根据经纬度判断所属的行政区域,主要包括:

  1. 通过边界分形的手段将指定的地理围栏栅格化,返回geohash集合,及数据压缩算法。
  2. 提供全球行政区域的高精度围栏,根据功能1生成geohash栅栏格,并提供低时间复杂度与低空间复杂度的根据经纬度判断所属行政区域的方法
  3. 目前提供中国省市区边界及全球国家边界的栅格化数据源 点击下载

核心类介绍

generator

Region2GeoHashUtil

该类提供算法,将指定的地理围栏栅格化,并返回GeoHash字符串

算法简要说明
  • 将geoJson文件转为格式为"lng lat,lng lat,…"的字符串,形成一个封闭区间,如:
    120.7296 30.7488,122.0079 30.8752,121.8756 31.2030,120.8326 31.9219,120.5796 31.2926,120.7296 30.7488,120.7296 30.7488
    

在这里插入图片描述

  • 首先找到此围栏的最大经纬度与最小经纬度,十位geohash分别为wtwv875qw1,wtmwzveksr,两点geohash有相同wt,因此此围栏一定在geohash矩形wt内
    在这里插入图片描述

  • 将wt内32个三位geohash矩形与围栏的位置关系做判断,在围栏内的geohash矩形:无,与围栏相交的geohash矩形有wtm,wtq,wtt,wtw
    在这里插入图片描述

  • 将上一步求出的与围栏相交的矩形wtm,wtq,wtt,wtw内四位geohash矩形与围栏位置做判断
    在这里插入图片描述

  • 此时在围栏内的geohash矩形:wtw0,wtw1,wtw2,wtw3,wtw4
    在这里插入图片描述

  • 与围栏相交的geohash矩形有wtmy,wtmz,wtqp,wtqr,wtqx,wtqz,wtt9,wttb,wttc,wttd,wttf,wttg,wttu,wttv,wtw5,wtw6,wtw7,wtw8,wtw9,wtwd,wtwh,wtwj
    在这里插入图片描述

  • 进一步将上一步求出的与围栏相交的矩形内更精细的geohash矩形与围栏位置做判断

  • 此时在围栏内的geohash矩形:

    wtw0,wtw1,wtw2,wtw3,wtw4,wtmz7,wtmze,wtmzg,wtmzh,wtmzj,wtmzk,wtmzm,wtmzq,wtmzr,wtmzs,wtmzt,wtmzu,wtmzv,wtmzw,wtmzx,wtmzy,wtmzz,wtqp2,wtqp3,wtqp6,wtqp7,wtqp8,wtqp9,wtqpb,wtqpc,wtqpd,wtqpe,wtqpf,wtqpg,wtqpk,wtqpm,wtqpq,wtqpr,wtqps,wtqpt,wtqpu,wtqpv,wtqpw,wtqpx,wtqpy,wtqpz,wtqr8,wtqr9,wtqrb,wtqrc,wtqrd,wtqre,wtqrf,wtqrg,wtqrs,wtqrt,wtqru,wtqrv,wtqrw,wtqrx,wtqry,wtqrz,wtqx8,wtqx9,wtqxb,wtqxc,wtqxf,wtqxg,wtqxu,wtqxv,wtqxy,wttb5,wttb6,wttb7,wttbd,wttbe,wttbf,wttbg,wttbh,wttbj,wttbk,wttbm,wttbn,wttbp,wttbq,wttbr,wttbs,wttbt,wttbu,wttbv,wttbw,wttbx,wttby,wttbz,wttc1,wttc3,wttc4,wttc5,wttc6,wttc7,wttc9,wttcc,wttcd,wttce,wttcf,wttcg,wttch,wttcj,wttck,wttcm,wttcn,wttcp,wttcq,wttcr,wttcs,wttct,wttcu,wttcv,wttcw,wttcx,wttcy,wttcz,wttf1,wttf3,wttf4,wttf5,wttf6,wttf7,wttfd,wttfe,wttff,wttfg,wttfh,wttfj,wttfk,wttfm,wttfn,wttfp,wttfq,wttfr,wttfs,wttft,wttfu,wttfv,wttfw,wttfx,wttfy,wttfz,wttg4,wttg5,wttg7,wttge,wttgh,wttgj,wttgk,wttgm,wttgn,wttgp,wttgq,wttgr,wttgs,wttgt,wttgu,wttgv,wttgw,wttgx,wttgy,wttgz,wttuh,wttuj,wttuk,wttum,wttun,wttup,wttuq,wttur,wttut,wttuv,wttuw,wttux,wttuy,wttuz,wttvn,wtw50,wtw51,wtw52,wtw53,wtw54,wtw55,wtw56,wtw57,wtw58,wtw59,wtw5b,wtw5c,wtw5d,wtw5e,wtw5f,wtw5g,wtw5h,wtw5j,wtw5k,wtw5m,wtw5n,wtw5p,wtw5q,wtw5r,wtw5s,wtw5t,wtw5u,wtw5v,wtw5w,wtw5x,wtw60,wtw61,wtw62,wtw63,wtw64,wtw65,wtw66,wtw67,wtw68,wtw69,wtw6b,wtw6c,wtw6d,wtw6e,wtw6f,wtw6g,wtw6h,wtw6j,wtw6k,wtw6m,wtw6n,wtw6p,wtw6q,wtw6s,wtw6t,wtw70,wtw71,wtw72,wtw74,wtw80,wtw81,wtw82,wtw83,wtw84,wtw85,wtw86,wtw87,wtw88,wtw89,wtw8b,wtw8c,wtw8d,wtw8e,wtw8f,wtw8g,wtw8h,wtw8j,wtw8k,wtw8m,wtw8n,wtw8s,wtw8t,wtw8u,wtw8v,wtw90,wtw91,wtw92,wtw93,wtw94,wtw95,wtw96,wtw97,wtw98,wtw99,wtw9d,wtw9h,wtw9k,wtwd0,wtwh0,wtwh1,wtwh2,wtwh3,wtwh4,wtwh5,wtwh6,wtwh8,wtwh9,wtwhb,wtwhh
    

在这里插入图片描述

  • 与围栏相交的geohash矩形有
    wtmyg,wtmyu,wtmyv,wtmyy,wtmz4,wtmz5,wtmz6,wtmzd,wtmzf,wtmzn,wtmzp,wtqp0,wtqp1,wtqp4,wtqp5,wtqph,wtqpj,wtqpn,wtqpp,wtqr0,wtqr2,wtqr3,wtqr6,wtqr7,wtqrk,wtqrm,wtqrq,wtqrr,wtqx2,wtqx3,wtqx6,wtqxd,wtqxe,wtqxs,wtqxt,wtqxw,wtqxx,wtqxz,wtqz8,wtqzb,wtt9z,wttb1,wttb3,wttb4,wttb9,wttbb,wttbc,wttc0,wttc2,wttc8,wttcb,wttdp,wttf0,wttf2,wttf8,wttf9,wttfc,wttg1,wttg3,wttg6,wttgd,wttgf,wttgg,wttu5,wttu7,wttue,wttus,wttuu,wttvh,wttvj,wttvm,wttvp,wttvq,wttvr,wttvt,wttvw,wtw5y,wtw5z,wtw6r,wtw6u,wtw6v,wtw6w,wtw6x,wtw6y,wtw73,wtw75,wtw76,wtw77,wtw78,wtw79,wtw7b,wtw7h,wtw8p,wtw8q,wtw8r,wtw8w,wtw8y,wtw9b,wtw9c,wtw9e,wtw9f,wtw9g,wtw9j,wtw9m,wtw9n,wtw9s,wtw9t,wtwd1,wtwd2,wtwd3,wtwd4,wtwh7,wtwhc,wtwhd,wtwhe,wtwhf,wtwhj,wtwhk,wtwhm,wtwhn,wtwj0,wtwj1
    

在这里插入图片描述

  • 重复判断与围栏相交的更精细的geohash,直至满足场景所需精度
    在这里插入图片描述

  • 按照行政区域的精度来说,一般最小geohash精确至7~8位即可满足需求
    在这里插入图片描述

lookup (以下相关逻辑描述等有时间完善)

GeoTilesSearch

提供快速查找经纬度所属区域的相关方法

GlobalMapHelper

根据GeoHash(WGS84坐标)判断经纬度是否在哪个国家

GlobalMapHelper

根据GeoHash(WGS84坐标)判断经纬度是否在中国

GeoHashHelper

封装了把经纬度与geohash相互转换的方法

Email: zllclub@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值