java 如何根据经纬度查询出一千米内的资源数据
使用地理信息系统(GIS)的相关技术和算法来实现根据经纬度查询一定范围内的资源数据。以下是一种基本的实现思路:
获取资源数据:首先,您需要有一组资源数据,每个数据都包含了对应资源的经纬度信息。
计算距离:使用距离计算公式(如haversine公式)来计算两个坐标点之间的距离。这可以帮助您确定资源数据与给定经纬度之间的距离。
过滤结果:遍历资源数据集合,计算给定经纬度与每个资源的距离,并将距离小于一定范围(例如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;
}
}
请注意,这只是一个简单的示例,确切的实现可能因你的需求而有所不同。此外,如果你的资源数据非常庞大,可能需要考虑使用更高效的数据结构或算法来提高查询性能。
java 如何根据经纬度查询出一千米内的资源数据的更多相关文章
- mysql 按类别之用一条SQL语句查询出每个班前10名学生数据
select * from 学生信息表 a where 10 > (select count(*) from 学生信息表 where 班级ID = a.班级ID and 班内名次 > a ...
- mysql通过经纬度查询400公里范围内的小区
mysql距离计算,单位m,以及排序 lng 经度 lat 纬度 一般地图上显示的坐标顺序为,纬度在前(范围-90~90),经度在后(范围-180~180) 传入参数 纬度 40.0497810000 ...
- Mysql 地区经纬度 查询
摘要: Mysql数据库,根据地区的经纬度信息,查询附近相邻的地区 2015-03-27 修改,增加 MySQL的空间扩展(MySQL Spatial Extensions)的解决方案: MySQL的 ...
- Oracle查询出最最近一次的一条记录
需求:从一个表中查询数据,得到的数据为最新的一条记录. -------------建立测试表 --drop table TB ),dtDate date) -------------插入测试数据 ,' ...
- [转]JAVA 根据经纬度算出附近的正方形的四个角的经纬度
csv文件转化为geojson文件中,涉及到路测图的打点生成,打点是由一个个正方形组成,而正方形是由四个点组成的,这四个点根据经纬度和范围生成,具体的实现代码是从网上找来的: /** * * @par ...
- Java基于POI实现excel任意多级联动下拉列表——支持从数据库查询出多级数据后直接生成【附源码】
Excel相关知识点 (1)名称管理器--Name Manager [CoderBaby]首先需要创建多个名称(包含key及value),作为下拉列表的数据源,后续通过名称引用.可通过菜单:&quo ...
- 一个学生分数表,用sql语句查询出各班级的前三名
昨天去一家公司面试,被这道题难住了,哎,又失去一次好的机会. 回来 之后就再想这个问题 表结构及数据如下:
- Java百度地图经纬度纠偏
在国内使用电子地图获取到的经纬度都不是真实的经纬度,而是经过一定的算法在真实的经纬度上添加了一个偏移量,且不同的地图有不同的算法.现在告诉大家在java中怎样对百度地图进行纠偏,主要实现将真实的经纬度 ...
- Saiku根据入参日期查询出对应的数据(二十)
Saiku根据入参日期查询出对应的数据 之前好像有写过一篇博客关于saiku date range的,现在进一步更新啦!!! 这里的日期筛选会更完善一些,需要提供两个参数 开始日期与结束日期(star ...
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...
随机推荐
- [源码系列:手写spring] IOC第四节:Bean属性注入
主要内容 添加PropertyValue类表示Bean的属性. 为Bean定义对象BeanDefinition添加PropertyValues列表用来存储Bean的各种属性. Bean实例化时根据Pr ...
- python API 之 fastapi
为什么选择 FastAPI? 高性能:基于 Starlette 和 Uvicorn,支持异步请求处理 开发效率:自动交互文档.类型提示.代码自动补全 现代标准:兼容 OpenAPI 和 JSON Sc ...
- Codeforces Round 954 (Div. 3)
A. X Axis 1.既然要求每个点到a到距离之和最小,不妨让点a为3个点中的中间点,也就是先对三个数从小到大排序,然后输出首尾数减中间值的绝对值之和即可 #include <bits/std ...
- 使用Python计算并可视化长直导线产生的磁场
引言 大家好,今天我们来探讨一个有趣的话题--长直导线产生的磁场,并通过 Python 来进行计算和可视化.你可能会问,为什么要研究这个问题?其实,这是电磁学中的一个基础问题,理解了它,我们就能更好地 ...
- 详细介绍Mybatis的缓存机制
一.缓存机制 1.缓存概述 缓存:缓存就是一块内存空间,保存临时数据 作用:将数据源(数据库或者文件)中的数据读取出来存放到缓存中,再次获取时直接从缓存中获取,可以减少和数据库交互的次数,提升程序的性 ...
- Redis 持久化——混合持久化
1.Redis 持久化--混合持久化 RDB 和 AOF 持久化各有利弊,RDB 可能会导致一定时间内的数据丢失,而 AOF 由于文件较大则会影响 Redis 的启动速度,为了能同时使用 RDB 和 ...
- Spring的容器创建过程
Spring容器的refresh()[创建刷新] 一.prepareRefresh()刷新前的预处理 1.initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法: ...
- Hangfire Redis 实现秒级定时任务、使用 CQRS 实现动态执行代码
目录 定时任务需求 核心逻辑 使用 Redis 实现秒级定时任务 第一步 第二步 第三步 第四步 业务服务实现动态代码 第一步 第二步 第三步 第四步 第五步 最后 定时任务需求 本文示例项目仓库:w ...
- 9.15CSP-S2022
寄了,51分 单项选择 ok real不知道意思 ok 快排最慢可到达O(n2)O(n^2)O(n2) 数据有误不影响排序,删了就行 小端右,大端左,B 直接画即可(艹,算错了 ok ok 艹,组合计 ...
- async/await Task.Delay 和Thread.Sleep的理解
async/await Task.Delay 和Thread.Sleep的理解 相关学习资料: 第十七节:从状态机的角度async和await的实现原理(新) - Yaopengfei - 博客园 ( ...