龙空技术网

[干货]SpringBoot实现RedisGeo 经纬度计算两个位置的距离,附源码

开始自媒体 78

前言:

此刻姐妹们对“经纬度换算距离”大约比较注重,朋友们都需要剖析一些“经纬度换算距离”的相关知识。那么小编在网上收集了一些有关“经纬度换算距离””的相关知识,希望同学们能喜欢,兄弟们快快来了解一下吧!

数据准备

初始化城市的经纬度

cityInfos = new ArrayList<>();cityInfos.add(new CityInfo("济南市",117.000923,36.675807)); // 济南市cityInfos.add(new CityInfo("青岛市",120.369557,36.094406));//cityInfos.add(new CityInfo("淄博市",118.047648,36.814939));//cityInfos.add(new CityInfo("枣庄市",117.557964,34.856424));//cityInfos.add(new CityInfo("东营市",118.4963,37.461266  ));//cityInfos.add(new CityInfo("烟台市",121.391382,37.539297));//cityInfos.add(new CityInfo("潍坊市",119.107078,36.70925 ));//cityInfos.add(new CityInfo("济宁市",116.587245,35.415393));//cityInfos.add(new CityInfo("泰安市",117.129063,36.194968));//cityInfos.add(new CityInfo("威海市",122.116394,37.509691));//cityInfos.add(new CityInfo("日照市",119.461208,35.428588));//cityInfos.add(new CityInfo("莱芜市",117.677736,36.214397));//cityInfos.add(new CityInfo("临沂市",118.326443,35.065282));//cityInfos.add(new CityInfo("德州市",116.307428,37.453968));//cityInfos.add(new CityInfo("聊城市",115.980367,36.456013));//cityInfos.add(new CityInfo("滨州市",118.016974,37.383542));//cityInfos.add(new CityInfo("菏泽市",115.469381,35.246531));//

* geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。

* 测试 saveCityInfoToRedis 方法

@Testpublic void testSaveCityInfoToRedis() {    System.out.println(geoService.saveCityInfoToRedis(cityInfos));}

计算两地相差距离(千米)

geodist:用于返回两个给定位置之间的距离。测试 getTwoCityDistance 方法

@Test    public void testGetTwoCityDistance() {        System.out.println(geoService.getTwoCityDistance("济南市", "菏泽市", null).getValue());        System.out.println(geoService.getTwoCityDistance("济南市", "菏泽市", Metrics.KILOMETERS).getValue());    }

测试结果

附近的城市

附近的城市,也可以是附近以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

    @Test    public void testGetPointRadius() {      // 测试里济南140公里内的城市        CityInfo city = new CityInfo("济南市", 117.000923, 36.675807);        Point center = new Point(city.getLongitude(), city.getLatitude());        Distance radius = new Distance(140, Metrics.KILOMETERS);        Circle within = new Circle(center, radius);        System.out.println(JSON.toJSONString(geoService.getPointRadius(within, null)));        // order by 距离 limit 2, 同时返回距离中心点的距离        RedisGeoCommands.GeoRadiusCommandArgs args =                RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().limit(2).sortAscending();        System.out.println(JSON.toJSONString(geoService.getPointRadius(within, args)));    }

您的关注、点赞、转发是对我最大的支持,源码 ,更多Redis功能持续更新中

标签: #经纬度换算距离