Java某个经纬度是否在genjson文件中问题
更新时间:2024年11月15日 10:26:07 作者:Liu.jie
GeoJSON是一种用于地理空间信息数据交换的格式,基于JSON,要判断某个经纬度是否在某个区域内,首先需要解析GeoJSON文件,确定区域边界,然后使用经纬度进行比较
Java某个经纬度是否在genjson文件中
GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间信息数据交换格式。
如果我们要用某个经纬度是否在某个区域的时候,首先是要用到genjson文件,因为省份地图是一个不规则的图形,需要通过描边来确定是否在区域内部。
我们需要先解析genjson文件
然后在用经纬度去比较,需要提前导入GenJSON的库
<dependency> <groupId>org.geotools</groupId> <artifactId>gt-geojson</artifactId> <version>23.5</version> </dependency>
创建一个对象
import lombok.Data; @Data public class LatLng { double lat; double lng; public LatLng(double lat,double lng){ this.lat = lat; this.lng = lng; } }
工具类
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; public class GeojsonUtils { /** * * @param path genjson 位置 * @param lat 纬度 * @param lng 经度 * @return */ public static Boolean getGenjsonPosition(String path,Double lat,Double lng){ try{ String jsonString = new String(Files.readAllBytes(Paths.get(path))); ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = objectMapper.readTree(jsonString); JsonNode coordinatesNode = jsonNode.path("features").get(0).path("geometry").path("coordinates").get(0); List<LatLng> coordinatesList = new ArrayList<>(); for (JsonNode coordinate : coordinatesNode) { double rlng = coordinate.get(0).asDouble(); double rlat = coordinate.get(1).asDouble(); LatLng point = new LatLng(rlat,rlng); coordinatesList.add(point); } LatLng targetPoint = new LatLng(lat, lng); boolean isInArea = false; int j = coordinatesList.size() - 1; for (int i = 0; i < coordinatesList.size(); i++) { LatLng point1 = coordinatesList.get(i); LatLng point2 = coordinatesList.get(j); if ((point1.getLng() < targetPoint.getLng() && point2.getLng() >= targetPoint.getLng() || point2.getLng() < targetPoint.getLng() && point1.getLng() >= targetPoint.getLng()) && (point1.getLat() <= targetPoint.getLat() || point2.getLat() <= targetPoint.getLat())) { if (point1.getLat() + (targetPoint.getLng() - point1.getLng()) / (point2.getLng() - point1.getLng()) * (point2.getLat() - point1.getLat()) < targetPoint.getLat()) { isInArea = !isInArea; } } j = i; } if (isInArea) return true; //在区域内部 }catch (Exception e){ } return false; //不在区域内部 } public static void main(String[] args) { String filePath = "C:\\Users\\Administrator\\Desktop\\林长制\\shanxi.geojson"; System.out.println(getGenjsonPosition(filePath,39.34727,108.94647)); }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot如何使用logback-spring配置日志格式,并分环境配置
这篇文章主要介绍了springboot如何使用logback-spring配置日志格式,并分环境配置的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07Spring学习笔记之RedisTemplate的配置与使用教程
这篇文章主要给大家介绍了关于Spring学习笔记之RedisTemplate配置与使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2018-06-06举例说明JAVA调用第三方接口的GET/POST/PUT请求方式
在日常工作和学习中,有很多地方都需要发送请求,这篇文章主要给大家介绍了关于JAVA调用第三方接口的GET/POST/PUT请求方式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-01-01
最新评论