如何使用带有lat,longs的Javas Polygon类

时间:2009-07-03 10:10:19

标签: java

我有两个地理空间简单的凸多边形区域,在纬度和经度(十进制度),我想用Javas Polygon类计算。我基本上想看看这两个lat,long多边形是否相交,并计算两者的面积(以平方米为单位)。 现在java.awt.Polygon类只使用x,y坐标系,但我需要使用lats,longs。 我该怎么做,和/或是否还有其他类/库?

5 个答案:

答案 0 :(得分:0)

在这里脱掉我的直觉。

如果多边形与行星大小的比例很小,则可以将它们视为平面多边形。所涉及的步骤是将纬度/长度转换为绝对x / y / z,取任意三个点并找到多边形所在平面的法线,然后使用它将点投影到二维。一旦获得了2D点,就可以很容易地计算出该区域或它们是否相交。

可能不是最好的答案,但希望它会激励一些人做出更好的答案,因为这是一个很好的问题。

答案 1 :(得分:0)

如果您认为真的很重要,您只需转换from spherical to rectangular coordinates即可。

我不确定它是否存在,因为java.awt.Polygon只是一个包含值对的数据结构。如果您阅读javadocs,他们会说

  

Polygon类封装了坐标空间内封闭的二维区域的描述。该区域由任意数量的线段限定,每个线段都是多边形的一侧。在内部,多边形包括(x,y)坐标对的列表,其中每对定义多边形的顶点,并且两个连续的对是作为多边形的一侧的线的端点。第一个和最后一对(x,y)点由关闭多边形的线段连接。

他们碰巧将这些点标记为x和y,这使我们所有人都想到了直角坐标,但它们不一定是你的观点。球体服务的错误会将其视为2D空间。你的半径很大且不变。你不能指望使用任何Polygon的方法(例如,contains(),getBounds2D()等。)

在这种情况下,重要的是你的面积计算。只要您将Polygon视为数据结构,就可以使用Polygon进行面积计算,存储lats和longs。

你也可能放弃这个想法并编写自己的想法。对于球面坐标创建自己的Point和Polygon并且从一开始就考虑到该坐标系统并不是很难。更好的抽象,更少猜测客户。您尝试重用java.awt.Polygon是令人钦佩的,但不是必需的。

您可以通过将面积计算转换为轮廓积分并使用高斯求积法沿每个直线边界线段进行积分来轻松执行面积计算。您甚至可以在每个积分点包含每个曲线的曲率,因为您知道公式。

答案 2 :(得分:0)

也许您可以使用GeoTools。它允许您创建几何对象,并检查它们是否相交(see: Geometry Relationships

答案 3 :(得分:0)

为什么不使用Polygon类乘以10 ^ n的坐标使它们成为整数? Polygon接受int数组作为点。

只是一个想法

答案 4 :(得分:0)

这是一种像魅力一样的解决方案:

net.sf.geographiclib中的PolygonArea类

请参考下面的链接和示例代码: https://geographiclib.sourceforge.io/html/java/net/sf/geographiclib/PolygonArea.html

等级依赖性: 编译组:“ net.sf.geographiclib”,名称:“ GeographicLib-Java”,版本:“ 1.42”