java 经纬度处理、计算两地的距离、获取当前一定距离以内的经纬度值

简介: java 经纬度处理、计算两地的距离、获取当前一定距离以内的经纬度值
package com.fh.util;
import java.util.HashMap;
import java.util.Map;
/**
 * 说明:经纬度处理
 * 作者:FH Admin
 * from:fhadmin.cn
 */
public class MapDistance {  
    private static double EARTH_RADIUS = 6378.137;  
    private static double rad(double d) {  
        return d * Math.PI / 180.0;  
    }
    /**
     * 根据两个位置的经纬度,来计算两地的距离(单位为KM)
     * 参数为String类型
     * @param lat1 用户经度
     * @param lng1 用户纬度
     * @param lat2 商家经度
     * @param lng2 商家纬度
     * @return
     */
    public static String getDistance(String lat1Str, String lng1Str, String lat2Str, String lng2Str) {
      Double lat1 = Double.parseDouble(lat1Str);
      Double lng1 = Double.parseDouble(lng1Str);
      Double lat2 = Double.parseDouble(lat2Str);
      Double lng2 = Double.parseDouble(lng2Str);
      double patm = 2;
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double difference = radLat1 - radLat2;
        double mdifference = rad(lng1) - rad(lng2);
        double distance = patm * Math.asin(Math.sqrt(Math.pow(Math.sin(difference / patm), patm)
                + Math.cos(radLat1) * Math.cos(radLat2)
                * Math.pow(Math.sin(mdifference / patm), patm)));
        distance = distance * EARTH_RADIUS;
        String distanceStr = String.valueOf(distance);
        return distanceStr;
    }
    /**
   * 获取当前用户一定距离以内的经纬度值
   * 单位米 return minLat 
   * 最小经度 minLng 
   * 最小纬度 maxLat 
   * 最大经度 maxLng 
   * 最大纬度 minLat
   */
  public static Map<Object,Object> getAround(String latStr, String lngStr, String raidus) {
    Map<Object,Object> map = new HashMap<Object,Object>();
    Double latitude = Double.parseDouble(latStr);// 传值给经度
    Double longitude = Double.parseDouble(lngStr);// 传值给纬度
    Double degree = (24901 * 1609) / 360.0; // 获取每度
    double raidusMile = Double.parseDouble(raidus);
    Double mpdLng = Double.parseDouble((degree * Math.cos(latitude * (Math.PI / 180))+"").replace("-", ""));
    Double dpmLng = 1 / mpdLng;
    Double radiusLng = dpmLng * raidusMile;
    //获取最小经度
    Double minLat = longitude - radiusLng;
    // 获取最大经度
    Double maxLat = longitude + radiusLng;
    Double dpmLat = 1 / degree;
    Double radiusLat = dpmLat * raidusMile;
    // 获取最小纬度
    Double minLng = latitude - radiusLat;
    // 获取最大纬度
    Double maxLng = latitude + radiusLat;
    map.put("minLat", minLat+"");
    map.put("maxLat", maxLat+"");
    map.put("minLng", minLng+"");
    map.put("maxLng", maxLng+"");
    return map;
  }
    public static void main(String[] args) {
      //济南国际会展中心经纬度:117.11811  36.68484
      //趵突泉:117.00999000000002  36.66123
      System.out.println(getDistance("116.97265","36.694514","116.597805","36.738024"));
      System.out.println(getAround("117.11811", "36.68484", "13000"));
      //117.01028712333508(Double), 117.22593287666493(Double), 
      //36.44829619896034(Double), 36.92138380103966(Double)
  }
}

 

目录
相关文章
|
13天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
36 2
|
18天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
1月前
|
机器学习/深度学习 算法 搜索推荐
让星星⭐月亮告诉你,Java冒泡排序及其时间复杂度计算
冒泡排序是一种简单的排序算法,通过多次遍历数组,每次比较相邻元素并交换位置,将较小的元素逐步移至数组前端。第一轮结束后,最小值会位于首位;第二轮则将次小值置于第二位,依此类推。经过 (n-1) 轮遍历后,数组完成排序。冒泡排序的时间复杂度为 O(n²),在最优情况下(已排序数组)时间复杂度为 O(n)。示例代码展示了如何实现冒泡排序。
51 1
|
18天前
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
23 0
|
1月前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
91 3
|
1月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
47 1
|
3月前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
10天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
7天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
27 9
|
10天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####