当前位置: 首页 > article >正文

java springboot项目如何计算经纬度在围栏内以及坐标点距离

在Maven项目中,你可以通过向`pom.xml`文件中的`<dependencies>`部分添加以下内容,来添加GeoTools和JTS的依赖:

```xml

<dependencies>

<!-- JTS Topology Suite -->

<dependency>

<groupId>org.locationtech.jts</groupId>

<artifactId>jts-core</artifactId>

<version>1.18.1</version>

</dependency>

<!-- GeoTools -->

<dependency>

<groupId>org.geotools</groupId>

<artifactId>gt-referencing</artifactId>

<version>25.1</version>

</dependency>

</dependencies> ```

注意,版本号可能会有所不同,你需要选择最适合你的项目的版本。 添加完依赖之后,你需要运行`mvn clean install`来下载和安装新的依赖。如果你在IDE(如IntelliJ IDEA或Eclipse)中工作,IDE通常会自动完成这个操作。

如果你在中国,可能会遇到下载依赖速度慢的问题。这种情况下,你可以考虑更换Maven的镜像源到国内的镜像,如阿里云。

更换Maven镜像源的方法是修改`settings.xml`文件,路径一般在`{maven安装目录}/conf/settings.xml`,在`<mirrors>`标签内添加镜像源,

例如阿里云的镜像:

```xml <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> ```

不妨假设我们定义一个多边形以及一个圆,并且我们要检查经度为104,纬度为30的点是否在这些区域内。同时,我们也会计算这个点到另一个点(例如,北纬31°,东经105°)的距离。代码片段可能如下:

```java import org.locationtech.jts.geom.Coordinate;

import org.locationtech.jts.geom.GeometryFactory;

import org.locationtech.jts.geom.Point;

import org.locationtech.jts.geom.Polygon;

import org.geotools.referencing.GeodeticCalculator;

import org.geotools.referencing.crs.DefaultGeographicCRS;

public class GeospatialTest { public static void main(String[] args) {

GeometryFactory gf = new GeometryFactory();

// 创建多边形

Coordinate[] coordinates = new Coordinate[]{ new Coordinate(103, 29), new Coordinate(103, 31), new Coordinate(105, 31), new Coordinate(105, 29), new Coordinate(103, 29) };

Polygon polygon = gf.createPolygon(coordinates);

// 创建点 Point point = gf.createPoint(new Coordinate(104, 30));

// 检查点是否在多边形内

boolean within = point.within(polygon);

System.out.println("Point within polygon: " + within);

// 检查点是否在圆内

Point circleCenter = gf.createPoint(new Coordinate(104, 30));

double radius = 1.0; // 单位与坐标系相同,这里设为1度

double distanceToCenter = point.distance(circleCenter);

boolean withinCircle = distanceToCenter <= radius;

System.out.println("Point within circle: " + withinCircle);

// 计算两个坐标之间的地面距离

GeodeticCalculator calculator = new GeodeticCalculator(DefaultGeographicCRS.WGS84); calculator.setStartingGeographicPoint(104, 30);

calculator.setDestinationGeographicPoint(105, 31);

double distance = calculator.getOrthodromicDistance();

System.out.println("Distance: " + distance + " meters"); } }

```

在这个示例中,我们的多边形是一个矩形,覆盖从103到105度的经度和从29到31度的纬度。我们的圆形区域有一个半径是1度的圆心在104度经度,30度纬度的位置。我们的目标点是104度经度和30度纬度的位置。我们也计算了这个点到105度经度,31度纬度的距离。 请注意,这个示例没有处理异常或错误的输入,而且它也没有检查点是否在圆的边界上。在实际的代码中,你可能需要处理这些问题。


http://www.kler.cn/news/365947.html

相关文章:

  • 构建高效评奖系统:SpringBoot在教育领域的应用
  • 入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法
  • 批量修改YOLO格式的标注类别
  • GD32学习知识点累计
  • DMVPN协议
  • 使用 Python 和 Pandas 处理 Excel 数据:合并单元格示例
  • SMT 生产可视化:提升电子组装流程效率
  • 常用排序算法总结
  • GPS/北斗时空安全隔离装置(卫星时空防护装置)使用手册
  • 计算机视觉篇---图像分类实战+理论讲解(6)Mobilenet
  • 数据结构入门之复杂度
  • 数据结构与算法:贪心与相关力扣题455.分发饼干、376.摆动序列、53.最大子数组和(贪心+动态规划dp)、122.买卖股票的最佳时机Ⅱ
  • 25届电信保研经验贴(自动化所)
  • 基于 STM32 单片机的智能门禁系统创新设计
  • Java从List中删除元素的几种方式
  • 【C语言刷力扣】441.排列硬币
  • 基于行业分类的目标检测与跟踪系统
  • .NET 8 Web API从基础到提高全面示例
  • 电脑技巧:Rufus——最佳USB启动盘制作工具指南
  • 【代码随想录Day51】图论Part03
  • 第五十五章 安全元素的详细信息 - ReferenceList 详情
  • 可能是NextJs(使用ssr、api route)打包成桌面端(nextron、electron、tauri)的最佳解决方式
  • 浅谈人工智能之基于LLaMA-Factory进行Llama3微调
  • 2024.7最新子比主题zibll7.9.2开心版源码+授权教程
  • 08 设计模式-结构型模式-过滤器模式
  • Qt之hello world