最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)緯度去比較,需要提前導(dǎo)入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)文章

  • Java中List轉(zhuǎn)換成Map的兩種實現(xiàn)方式

    Java中List轉(zhuǎn)換成Map的兩種實現(xiàn)方式

    Java中List轉(zhuǎn)Map常用Stream API,通過collect(Collectors.toMap())實現(xiàn),需明確鍵值規(guī)則并處理重復(fù)鍵沖突,支持靈活擴展
    2025-09-09
  • spring boot整合Shiro實現(xiàn)單點登錄的示例代碼

    spring boot整合Shiro實現(xiàn)單點登錄的示例代碼

    本篇文章主要介紹了spring boot整合Shiro實現(xiàn)單點登錄的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java有序的Map LinkedHashMap用法詳解

    Java有序的Map LinkedHashMap用法詳解

    LinkedHashMap是Java提供的一個集合類,它繼承自HashMap,并在HashMap基礎(chǔ)上維護一條雙向鏈表,本文給大家介紹java 有序的Map LinkedHashMap簡介,感興趣的朋友一起看看吧
    2024-01-01
  • Java微信公眾號開發(fā)之通過微信公眾號獲取用戶信息

    Java微信公眾號開發(fā)之通過微信公眾號獲取用戶信息

    這篇文章主要介紹了Java微信公眾號開發(fā)之通過微信公眾號獲取用戶信息,需要的朋友可以參考下
    2017-05-05
  • 簡單介紹java中equals以及==的用法

    簡單介紹java中equals以及==的用法

    這篇文章主要介紹了簡單介紹java中equals以及==的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • springboot使用Mybatis-plus分頁插件的案例詳解

    springboot使用Mybatis-plus分頁插件的案例詳解

    這篇文章主要介紹了springboot使用Mybatis-plus分頁插件的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • java在網(wǎng)頁上面抓取郵件地址的方法

    java在網(wǎng)頁上面抓取郵件地址的方法

    這篇文章主要介紹了java在網(wǎng)頁上面抓取郵件地址的方法,是比較典型的Java正則匹配應(yīng)用實例,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • Java 如何快速實現(xiàn)一個連接池

    Java 如何快速實現(xiàn)一個連接池

    有沒有一個通用的庫可以快速實現(xiàn)一個線程池呢?得益于 Java 完善的生態(tài),前人們針對這種需要開發(fā)了一個通用庫:Apache Commons Pool(下文簡稱 ACP)。本質(zhì)上來說,ACP 庫提供的是管理對象池的通用能力,當(dāng)然也可以用來管理連接池了!
    2021-05-05
  • 探討Java中最常見的十道面試題(超經(jīng)典)

    探討Java中最常見的十道面試題(超經(jīng)典)

    本篇文章是對Java中最常見的十道面試題進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • 深入了解SpringAOP中的jdk動態(tài)代理與CGlib

    深入了解SpringAOP中的jdk動態(tài)代理與CGlib

    這篇文章主要介紹了深入了解SpringAOP中的jdk動態(tài)代理與CGlib,一般我們編寫程序的思想是縱向的,也就是一個方法代碼從該方法第一行開始往下一步一步走,直到走完最后一行代碼,也就是說很多業(yè)務(wù)都需要的比如用戶鑒權(quán),資源釋放等,需要的朋友可以參考下
    2023-12-12

最新評論

龙胜| 合江县| 常州市| 安阳县| 宁河县| 曲水县| 东阿县| 荣昌县| 鹤庆县| 阳原县| 京山县| 墨脱县| 石柱| 讷河市| 德令哈市| 浦城县| 江永县| 桃源县| 兴山县| 铜陵市| 登封市| 佛学| 西安市| 萨迦县| 建始县| 桓台县| 西贡区| 宁化县| 龙南县| 四子王旗| 南涧| 化州市| 台北县| 额尔古纳市| 墨江| 漠河县| 通城县| 林周县| 金平| 榆社县| 宜兴市|