在安卓系统中测试多边形内部的点

2022-09-04 23:42:55

前几天,我用Java上了一门课,计算一个是否在多边形内。(和 是 ,因为将是地理坐标)。point(X,Y)XYdouble

我知道Java有这个类,但我不得不使用和,因为不允许,只是整数:(PolygonPath2DPoint2DPolygondouble

一旦我完成了多边形,我就使用了这种方法(有它),我的问题就解决了。Path2DcontainsPath2D

但是现在,我想导入到Android,问题就在这里,因为需要导入:Path2D

import java.awt.geom.Path2D;
import java.awt.geom.Point2D;

而且在Android中不存在awt,所以我不能使用。

那么,有没有类似于方法的类呢?还是我必须自己计算?Path2Dcontains

以下是我在Java中使用:Path2D

private void ConstructPolygon(Vector<Point2D> coodinates)
{       
    this.polygon.moveTo(coodinates.get(0).getX(), coodinates.get(0).getY());        

    //System.out.println(coodinates.get(0).getX() + "   " + coodinates.get(0).getY());
    //System.out.println("asda");

    for(int i = 1; i < this.num_points; i++)
    {
        //System.out.println(coodinates.get(i).getX() + "   " + coodinates.get(i).getY());
        this.polygon.lineTo(coodinates.get(i).getX(), coodinates.get(i).getY());
    }
    this.polygon.closePath();
}
public boolean InsideCity(Point2D punto)
{
    return this.polygon.contains(punto);                
}

答案 1

你可以完全使用我的简单库:https://github.com/snatik/polygon-contains-point

准备多边形:

Polygon polygon = Polygon.Builder()
    .addVertex(new Point(1, 3))
    .addVertex(new Point(2, 8))
    .addVertex(new Point(5, 4))
    .addVertex(new Point(5, 9))
    .addVertex(new Point(7, 5))
    .addVertex(new Point(6, 1))
    .addVertex(new Point(3, 1))
    .build();

并检查该点在多边形内:

Point point = new Point(4.5f, 7);
boolean contains = polygon.contains(point);

它适用于浮点型和包含孔的多边形:)


答案 2

您可以使用Google Maps PolyUtil:

import com.google.maps.android.PolyUtil;

boolean inside = PolyUtil.containsLocation(new LatLng(...), poly, true);

推荐