常见移动应用怎么获取你周围1公里范围的商铺

GeoHash是一种编码地理位置的方法,它将地球表面的位置转化为一个简短的字符串。这个字符串的长度可以变化,并且其精度也随着字符串长度的增加而增加。GeoHash非常适合用于位置索引和空间索引,可以快速检索出一定范围内的地理信息。

GeoHash基础知识

编码与解码:GeoHash通过递归地将纬度和经度区间进行二分,将地理位置转换成一个由字母和数字组成的字符串。字符串越长,定位就越精确。

长度与精度:GeoHash的长度决定了它的精度。例如,长度为5的GeoHash大约能表示1.9km x 1.9km的区域;长度为6时,精度提升到0.61km x 0.61km

空间索引:由于GeoHash的特性,较短的前缀可以表示更大的区域,因此在数据库中使用GeoHash作为索引可以快速缩小搜索范围。

GeoHash长度和经度对应关系

查询数据库中的数据在我附近一公里范围内,常见的三种实现方法​:

1)直接sql中进行计算和目标经纬度的距离进行查询。

​2)首先计算目标经纬度1公里内,经度的最大和最小值,纬度的最大和最小值,然后在sql中直接判断经纬度分别在​最小值和最大值之间。

3)首先需要数据表中加一个geohash字符串字段存储,然后计算目标地点的经纬度的geohash,然后在sql语句中like​查询。​适合数据量大的情况。

详细介绍GeoHash方法

引入依赖

<dependency>
    <groupId>ch.hsr</groupId>
    <artifactId>geohash</artifactId>
    <version>1.3.0</version>
</dependency>

1、首先确保数据库中有geohash字符串字段,默认是长度为12的GeoHash​字符串。

public static void main(String[] args) {
    String geoHashStr = GeoHash.geoHashStringWithCharacterPrecision(39.96429451442876, 116.47551449510183, 12);
    System.out.println(geoHashStr);
}
//打印结果:wx4g67qbuhqq

2、首先获取目标地点的经纬度,

3、确定精度,选择GeoHash合适的长度,结合上面图,使它可以表示1公里内的区域,选择长度5即可,范围为2.4km。

public static void main(String[] args) {
    String geoHashStr = GeoHash.geoHashStringWithCharacterPrecision(39.96429451442876, 116.47551449510183, 12);
    System.out.println(geoHashStr);
    String geoHash5Str = GeoHash.geoHashStringWithCharacterPrecision(39.96434144610943, 116.47536141255637, 5);
    System.out.println(geoHash5Str);
}
//geoHashStr打印结果:wx4g67qbuhqq
//geoHash5Str打印结果:wx4g

4、查询数据库,通过GeoHash过滤筛选范围内数据,获取2.4km范围内的数据。geostr是数据经纬度对应的GeoHash的字符串​,value是目的地经纬度对应的GeoHash的值,长度为5​。

select lat,lng,geostr from site_data where geostr like value+'%';

5、获取数据后再和当前地点内的经纬度进行计算,获取和当前地点的距离,然后筛选出​1公里内的数据进行排序。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StruggleRookie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值