Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何检查lat/lng坐标是否位于多边形内_Java_Polygon - Fatal编程技术网

Java-如何检查lat/lng坐标是否位于多边形内

Java-如何检查lat/lng坐标是否位于多边形内,java,polygon,Java,Polygon,我想检查地图上的一个给定点(带纬度和经度)是否在某个多边形内。我有多边形的顶点坐标(以lat/long为单位) 我想创建一个多边形并检查点是否在里面,但它告诉我点总是在外面。。。也许多边形不适用于地理参考坐标系 Double[] xCoords = {40.842226, 40.829498, 40.833394, 40.84768, 40.858716} Double[] yCoords = {14.211753, 14.229262, 14.26617, 14.278701, 14.277

我想检查地图上的一个给定点(带纬度和经度)是否在某个多边形内。我有多边形的顶点坐标(以lat/long为单位)

我想创建一个多边形并检查点是否在里面,但它告诉我点总是在外面。。。也许多边形不适用于地理参考坐标系

Double[] xCoords = {40.842226, 40.829498, 40.833394, 40.84768, 40.858716}
Double[] yCoords = {14.211753, 14.229262, 14.26617, 14.278701,  14.27715}
Double[] myPoint = {40.86141, 14.279932};


Path2D myPolygon = new Path2D.Double();
            myPolygon.moveTo(xCoords[0], yCoords[0]); //first point
            for(int i = 1; i < xCoords.length; i ++) {
                myPolygon.lineTo(xCoords[i], yCoords[i]); //draw lines
            }
            myPolygon.closePath(); //draw last line

               if(myPolygon.contains(myPoint{0}, myPoint{1})) {
                //it's inside;
}
Double[]xCoords={40.842226、40.829498、40.833394、40.84768、40.858716}
双[]yCoords={14.211753,14.229262,14.26617,14.278701,14.27715}
Double[]myPoint={40.86141,14.279932};
Path2D myPolygon=新的Path2D.Double();
myPolygon.moveTo(xCoords[0],yCoords[0])//第一点
for(int i=1;i
这就是谷歌地图中的情况


它总是返回false。。。但是它在多边形内部的点…

无论多边形是什么形状,该点都不可能包含在该多边形中

您最右侧的坐标位于
40.858716
,而该点的x值为
40.86141
,这意味着该点位于多边形的右侧。与y相同,多边形中的最大y坐标为
14.278701
,而点位于
14.279932
。这意味着该点在外部

另外,你正在反转坐标,我们钟爱的城市的坐标是
40.8518°N,14.2681°E
,这意味着
40
y
14
x

Path2D
就可以了。我的观察结果只是告诉你,点不在多边形中,但检查极值并不是验证点是否在多边形中的一般解决方案

public class CoordinatesDTO {


private Long id;


private double latitude;


private double longnitude;
}

public static boolean islocationsidefencing(坐标到位置,列出fencingCoordinates){//这是检查点是否存在于围栏内的重要方法。
布尔blnisinder=false;
列表LSCoordinates DTO=fencingCoordinates;
Path2D myPolygon=新的Path2D.Double();
myPolygon.moveTo(lstCoordinatesDTO.get(0.getLatitude(),lstCoordinatesDTO.get(0.getLongnitude());//首先
//点
对于(int i=1;i
看这些数字在我看来,
myPoint
不在多边形中,多边形的最高y坐标是
14.26
,而你的点的y坐标是
14.27
与x坐标相同,多边形中的最高值是
40.85
,而
myPoint
的y坐标是
40.86
,你怎么能说这个点在多边形库里面,我改变了坐标,还添加了谷歌地图的情况,这个点在区域里面,我唯一的一件事是,这个多边形和地理坐标不匹配…我的信使阿比托是一个帕斯夸尔人?sono nel poligono Looooly你在地图上的点是错误的,谷歌地图显示40.86141,14.279932就在poggioreale前面,不是chiaia(超级lol),但是数字也不存在,如果你点的两个坐标的值都大于多边形的任何顶点,这个点怎么可能被包含?这个答案只适用于那个特定点和其他点的子集。对于其他点,它们可能位于周围的矩形中,但不在多边形中。@userunknown我的答案只是指出该点不在多边形中,如果您想检查该点是否在多边形
Path2D
中就可以了。此外,所提供的x和y值是翻转的,我恰巧碰巧活在多边形中,你应该考虑把这个建议的一部分作为答案。@ Urror Un不知对这个建议表示感谢,我看到有人已经认为可以用一个极端坐标来验证一个点是否在多边形内部,这是错误的。
public static boolean isLocationInsideTheFencing(CoordinatesDTO location, List<CoordinatesDTO> fencingCoordinates) { //this is important method for Checking the point exist inside the fence or not.
    boolean blnIsinside = false;

    List<CoordinatesDTO> lstCoordinatesDTO = fencingCoordinates;

    Path2D myPolygon = new Path2D.Double();
    myPolygon.moveTo(lstCoordinatesDTO.get(0).getLatitude(), lstCoordinatesDTO.get(0).getLongnitude()); // first
                                                                                                        // point
    for (int i = 1; i < lstCoordinatesDTO.size(); i++) {
        myPolygon.lineTo(lstCoordinatesDTO.get(i).getLatitude(), lstCoordinatesDTO.get(i).getLongnitude()); // draw
                                                                                                            // lines
    }
    myPolygon.closePath(); // draw last line

    // myPolygon.contains(p);
    Point2D P2D2 = new Point2D.Double();
    P2D2.setLocation(location.getLatitude(), location.getLongnitude());

    if (myPolygon.contains(P2D2)) {
        blnIsinside = true;
    } else {
        blnIsinside = false;
    }

    return blnIsinside;
}