java - 计算一个对象是否在一组坐标内?

标签 java coordinates jts

我有一组 X 和 Y 点来构建一个形状,我需要知道一个对象是否在其中,它的计算是什么?

X 和 Y 坐标示例:

522.56055 2389.885
544.96 2386.3406
554.18616 2369.2385
535.21814 2351.396
497.5552 2355.8396

我的数学不太好:(所以我希望能得到一些支持来理解它是如何完成的。

到目前为止我所拥有但似乎不太可靠的示例:

private boolean isInsideShape(Zone verifyZone, Position object)
{
    int corners = verifyZone.getCorners();
    float[] xCoords = verifyZone.getxCoordinates();
    float[] yCoords = verifyZone.getyCoordinates();

    float x = object.getX();
    float y = object.getY();
    float z = object.getZ();

    int i, j = corners - 1;
    boolean inside = false;

    for(i = 0; i < corners; i++)
    {
        if(yCoords[i] < y && yCoords[j] >= y || yCoords[j] < y && yCoords[i] >= y)
            if(xCoords[i] + (y - yCoords[i]) / (yCoords[j] - yCoords[i]) * (xCoords[j] - xCoords[i]) < x)
                inside = !inside;
        j = i;
    }

    return inside;
}

最佳答案

您可以从这里开始:http://en.wikipedia.org/wiki/Point_in_polygon

您也可以查看 JTS Topology Suite . 特别是使用this function .

编辑:这是使用 JTS 的示例:

import java.util.ArrayList;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;

public class GeoTest {

  public static void main(final String[] args) {

    final GeometryFactory gf = new GeometryFactory();

    final ArrayList<Coordinate> points = new ArrayList<Coordinate>();
    points.add(new Coordinate(-10, -10));
    points.add(new Coordinate(-10, 10));
    points.add(new Coordinate(10, 10));
    points.add(new Coordinate(10, -10));
    points.add(new Coordinate(-10, -10));
    final Polygon polygon = gf.createPolygon(new LinearRing(new CoordinateArraySequence(points
        .toArray(new Coordinate[points.size()])), gf), null);

    final Coordinate coord = new Coordinate(0, 0);
    final Point point = gf.createPoint(coord);

    System.out.println(point.within(polygon));

  }

}

这是使用 AWT 的示例(它更简单,是 Java SE 的一部分):

import java.awt.Polygon;

public class JavaTest {

  public static void main(final String[] args) {

    final Polygon polygon = new Polygon();
    polygon.addPoint(-10, -10);
    polygon.addPoint(-10, 10);
    polygon.addPoint(10, 10);
    polygon.addPoint(10, -10);

    System.out.println(polygon.contains(0, 0));

  }

}

关于java - 计算一个对象是否在一组坐标内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175216/

相关文章:

java - java同时读写

Java:如何定义匿名的 Hamcrest 匹配器?

python - 为什么我的 Python 函数中的坐标变量没有递增和递减?

java - 查找相邻的多边形 Java

java - 有没有办法在 JTS 中将自相交多边形转换为多多边形?

java - 如何将 HTML 嵌入到 Java 自定义对话框中?

java - 内部类、静态嵌套类和局部内部类的成员/方法的存储位置。

php - 获取用户特定半径内的坐标

pdf - 如何使用 .net 从 pdf 中提取带有坐标的单词?