首页 > 编程语言 >java 如何根据经纬度查询出一千米内的资源数据

java 如何根据经纬度查询出一千米内的资源数据

时间:2023-08-22 19:44:25浏览次数:35  
标签:Resource 经纬度 出一 资源 new java 数据 resources

  使用地理信息系统(GIS)的相关技术和算法来实现根据经纬度查询一定范围内的资源数据。以下是一种基本的实现思路:

  1. 获取资源数据:首先,您需要有一组资源数据,每个数据都包含了对应资源的经纬度信息。

  2. 计算距离:使用距离计算公式(如haversine公式)来计算两个坐标点之间的距离。这可以帮助您确定资源数据与给定经纬度之间的距离。

  3. 过滤结果:遍历资源数据集合,计算给定经纬度与每个资源的距离,并将距离小于一定范围(例如1000米)的资源筛选出来。

下面是一个简单的Java代码示例,演示了如何实现上述思路:

import java.util.ArrayList;
import java.util.List;

public class ResourceLocator {
    public static void main(String[] args) {
        // 给定经纬度
        double latitude = 39.909736;  
        double longitude = 116.397478;

        // 资源数据集合
        List<Resource> resources = new ArrayList<>();
        resources.add(new Resource(39.913753, 116.403663, "Resource 1"));
        resources.add(new Resource(39.911234, 116.390768, "Resource 2"));
        resources.add(new Resource(39.908765, 116.392345, "Resource 3"));
        resources.add(new Resource(39.906543, 116.409876, "Resource 4"));

        // 查询一千米内的资源数据
        List<Resource> nearbyResources = new ArrayList<>();

        for (Resource resource : resources) {
            double distance = calculateDistance(latitude, longitude, resource.getLatitude(), resource.getLongitude());
            if (distance <= 1000) {
                nearbyResources.add(resource);
            }
        }

        // 输出结果
        for (Resource nearbyResource : nearbyResources) {
            System.out.println(nearbyResource.getName());
        }
    }

    // 计算两个坐标点之间的距离(haversine公式)
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        double earthRadius = 6371; // 地球半径(单位:千米)

        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lon2 - lon1);

        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                   Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
                   Math.sin(dLon / 2) * Math.sin(dLon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        double distance = earthRadius * c;
        return distance;
    }
}

class Resource {
    private double latitude;
    private double longitude;
    private String name;

    public Resource(double latitude, double longitude, String name) {
        this.latitude = latitude;
        this.longitude = longitude;
        this.name = name;
    }

    public double getLatitude() {
        return latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public String getName() {
        return name;
    }
}

  请注意,这只是一个简单的示例,确切的实现可能因你的需求而有所不同。此外,如果你的资源数据非常庞大,可能需要考虑使用更高效的数据结构或算法来提高查询性能。

 

标签:Resource,经纬度,出一,资源,new,java,数据,resources
From: https://www.cnblogs.com/banxia-boke/p/17649534.html

相关文章

  • java经典50道编程题(很好练逻辑思维的题)
    【程序21】题目:求1+2!+3!+…+20!的和程序分析:此程序只是把累加变成了累乘。1、先求该项阶乘的值*2、累加求求publicclassProgramme21{publicstaticvoidmain(String[]args){intsum=0;//总和for(inti=1;i<=20;i++){sum+=factorial(i);//累加}System.out......
  • JavaSE学习笔记
    Java基础数据类型扩展及面试题讲解整数拓展: 进制、二进制0b、十进制、八进制0、十六进制0x浮点数拓展:银行业务怎么表示?钱——最好完全避免使用浮点数进行比较使用BigDecimal数学工具类float:有限、离散、舍入误差、大约、接近但不等于double:精度问题字符拓......
  • Java Web中出现的一些乱码问题总结(详解)
    三、JavaWeb中出现的一些乱码问题总结(详解) 一、response.getWriter().write()和response.getWriter().print()的区别response.getWriter()返回的是PrintWriter,这是一个打印输出流response.getWriter().write()和response.getWriter().print()是响应给客户端的东西,如果不用......
  • 20230618 java.util.concurrent.CompletableFuture
    介绍java.util.concurrent.CompletableFuturepublicclassCompletableFuture<T>implementsFuture<T>,CompletionStage<T>APIstaticsupplyAsync<U>CompletableFuture<U>supplyAsync(Supplier<U>supplier)<U>Comple......
  • 20230618 java.util.concurrent.CompletionStage
    介绍java.util.concurrent.CompletionStagepublicinterfaceCompletionStage<T>java.util.concurrent.CompletableFuture的父接口API注意事项:所有方法都有类似的xxAsync以及重载,只详细列一下thenApply,其他不列出来有无返回值,可以通过看函数类型处理单个Future......
  • 20230713 java.util.concurrent.ExecutorService
    介绍java.util.concurrent.ExecutorServicepublicinterfaceExecutorServiceextendsExecutorAPIshutdownshutdownNowisShutdownisTerminatedawaitTerminationsubmitFuture<?>submit(Runnabletask);<T>Future<T>submit(Runna......
  • 20230713 java.util.concurrent.ScheduledExecutorService
    介绍java.util.concurrent.ScheduledExecutorServicepublicinterfaceScheduledExecutorServiceextendsExecutorServiceAPIschedulepublicScheduledFuture<?>schedule(Runnablecommand,longdelay,TimeUnitunit);public<V>ScheduledFuture<......
  • 20230713 java.util.concurrent.ThreadPoolExecutor
    介绍java.util.concurrent.ThreadPoolExecutorpublicclassThreadPoolExecutorextendsAbstractExecutorServiceAPI构造器ThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue)Thr......
  • 20230618 java.util.stream.BaseStream
    介绍java.util.stream.BaseStreampublicinterfaceBaseStream<T,SextendsBaseStream<T,S>>extendsAutoCloseableAPIiterator返回流的迭代器终结操作spliterator返回可拆分迭代器终结操作isParallel是否并行流sequential返回一个等效的串行流中......
  • 20230619 java.util.IntSummaryStatistics
    介绍java.util.IntSummaryStatisticspublicclassIntSummaryStatisticsimplementsIntConsumer统计的指标:count,sum,min,average,maxAPI构造器IntSummaryStatistics()IntSummaryStatistics(longcount,intmin,intmax,longsum)publiccombinevoidcombi......