当前位置: 代码网 > it编程>编程语言>Java > Java某个经纬度是否在genjson文件中问题

Java某个经纬度是否在genjson文件中问题

2024年11月16日 Java 我要评论
java某个经纬度是否在genjson文件中geojson是一种对各种地理数据结构进行编码的格式,基于javascript对象表示法(javascript object notation, 简称jso

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));
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com