欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java某個經(jīng)緯度是否在genjson文件中問題

 更新時間:2024年11月15日 10:26:07   作者:Liu.jie  
GeoJSON是一種用于地理空間信息數(shù)據(jù)交換的格式,基于JSON,要判斷某個經(jīng)緯度是否在某個區(qū)域內(nèi),首先需要解析GeoJSON文件,確定區(qū)域邊界,然后使用經(jīng)緯度進行比較

Java某個經(jīng)緯度是否在genjson文件中

GeoJSON是一種對各種地理數(shù)據(jù)結(jié)構(gòu)進行編碼的格式,基于Javascript對象表示法(JavaScript Object Notation, 簡稱JSON)的地理空間信息數(shù)據(jù)交換格式。

如果我們要用某個經(jīng)緯度是否在某個區(qū)域的時候,首先是要用到genjson文件,因為省份地圖是一個不規(guī)則的圖形,需要通過描邊來確定是否在區(qū)域內(nèi)部。

我們需要先解析genjson文件

然后在用經(jīng)緯度去比較,需要提前導入GenJSON的庫

      <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-geojson</artifactId>
            <version>23.5</version>
        </dependency>

創(chuàng)建一個對象

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 經(jīng)度
     * @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; //在區(qū)域內(nèi)部
        }catch (Exception e){

        }
        return false; //不在區(qū)域內(nèi)部

    }

    public static void main(String[] args) {
        String filePath = "C:\\Users\\Administrator\\Desktop\\林長制\\shanxi.geojson";
        System.out.println(getGenjsonPosition(filePath,39.34727,108.94647));
    }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用SpringBoot跨系統(tǒng)調(diào)用接口的方案

    使用SpringBoot跨系統(tǒng)調(diào)用接口的方案

    這篇文章主要介紹了使用SpringBoot跨系統(tǒng)調(diào)用接口的方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java中幾種常用加密算法盤點

    Java中幾種常用加密算法盤點

    隨著互聯(lián)網(wǎng)的發(fā)展,信息安全問題日益受到重視,加密算法在保證信息安全傳輸方面發(fā)揮著重要作用,本文將簡要盤點幾種常用的Java加密算法,介紹它們的基本原理、特點及應(yīng)用情況,以幫助讀者全面了解當前加密算法的發(fā)展狀況,需要的朋友可以參考下
    2023-11-11
  • JVM:晚期(運行期)優(yōu)化的深入理解

    JVM:晚期(運行期)優(yōu)化的深入理解

    今天小編就為大家分享一篇關(guān)于JVM:晚期(運行期)優(yōu)化的深入理解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序判斷

    java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序判斷

    對靜態(tài)代碼塊以及構(gòu)造函數(shù)的執(zhí)行先后順序,一直很迷惑,直到最近看到一段代碼,發(fā)現(xiàn)終于弄懂了,所以這篇文章主要給大家介紹了關(guān)于如何判斷java中靜態(tài)代碼塊與構(gòu)造方法的執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • Mybatis-plus一對多分頁數(shù)據(jù)條數(shù)不正確的處理

    Mybatis-plus一對多分頁數(shù)據(jù)條數(shù)不正確的處理

    這篇文章主要介紹了Mybatis-plus一對多分頁數(shù)據(jù)條數(shù)不正確的處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解Spring系列之@ComponentScan批量注冊bean

    詳解Spring系列之@ComponentScan批量注冊bean

    本文介紹各種@ComponentScan批量掃描注冊bean的基本使用以及進階用法和@Componet及其衍生注解使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02
  • 淺析SpringBoot自動裝配的實現(xiàn)

    淺析SpringBoot自動裝配的實現(xiàn)

    springboot開箱即用,其實實現(xiàn)了自動裝配,本文重點給大家介紹SpringBoot是如何做到自動裝配的,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • java多線程編程之使用Synchronized關(guān)鍵字同步類方法

    java多線程編程之使用Synchronized關(guān)鍵字同步類方法

    JAVA中要想解決“臟數(shù)據(jù)”的問題,最簡單的方法就是使用synchronized關(guān)鍵字來使run方法同步,看下面的代碼,只要在void和public之間加上synchronized關(guān)鍵字
    2014-01-01
  • Spring?Boot自定義Starter組件開發(fā)實現(xiàn)配置過程

    Spring?Boot自定義Starter組件開發(fā)實現(xiàn)配置過程

    SpringBoot中的starter是一種非常重要的機制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進?starter,應(yīng)用者只需要在maven中引入starter依賴,這篇文章主要介紹了Spring?Boot自定義Starter組件開發(fā)實現(xiàn),需要的朋友可以參考下
    2022-06-06
  • Java順序查找算法詳解

    Java順序查找算法詳解

    順序查找又稱線性查找,主要用于在線性表中進行查找。順序查找通常分為對一般的無序線性表的順序查找和對按關(guān)鍵字有序的順序表的順序查找,下面我們來一探究竟
    2022-08-08

最新評論