5

所以我正在处理一组图像,其中角落是地图上的纬度。我正在创建多边形来检查给定图像是否重叠。我需要知道与多边形和几何的 .getarea() 方法相关的单位。我正在使用以下对象来创建我的多边形和几何图形

http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/geom/Geometry.html#getArea() http://www.vividsolutions.com/jts/javadoc/com/vividsolutions/jts/geom/Polygon .html

当使用上述两个对象时,我得到了一个数字,但是我没有发现与数字相关的单位是什么。那么我们是在说米、公里、英里吗?

我正在使用的坐标样本是 +30.658739 -086.345670、+30.659997 -086.34002、+30.664041 -086.345082、+30.662783 -086.342750 我正在寻找这 4 个点之间的区域。
我从 .getArea() 得到的值是 1.31039680000139E-5 这些点实际上很接近,所以我认为它以米为单位,即 1310.4 米

4

3 回答 3

11

如果不知道底层坐标系是什么,这很难说清楚。在快速浏览了您链接到的 Javadoc API 后,我怀​​疑您的几何包可能正在处理原始笛卡尔坐标,并且不知道所使用的测量单位。如果是这种情况,那么您将处于非常滑的斜坡上。这是问题所在:

并非所有度数都是平等的

纬度度数都具有相同的空间分辨率。每个纬度对应大约111公里的距离。经度不是这种情况。在赤道,经度对应于 111 公里的距离,但在两极,经度 1 度对应的距离为零。换句话说,如果您有一个左上角为 10:0 且右下角为 0:10 的纬度/经度框,它的表面积将比左上角为 20:0 及以下的纬度/经度框更大- 就在 10 点 10 分,尽管这些盒子的边都是 10 度长。

第二个问题是地球的曲率。由于地球的曲率,地球表面100km×100km的正方形的表面积将大于10000 km^2,因为地球表面上一点到另一点的最短距离实际上不是直线,而是弧线。

第三个经常被忽视但不太重要的问题是地球实际上不是一个球体,而是一个椭球体。它倾向于在赤道附近凸出,这打破了我们的假设,即地球上任何一个纬度的距离与其他任何地方的另一个纬度的距离相同。然而,这个问题并没有像前两个问题那样在我们的表面积估计中引入那么多的错误。

换句话说,球形(或实际上是椭圆形)表面积不是一个容易解决的问题,至少不像映射到笛卡尔坐标并使用它们来查找表面积的欧几里德测量值那么容易。如果您正在处理的表面区域跨越一个非常小的角距离,您可以摆脱它,但是您的纬度/经度框越大,您得到的失真就越多。

可能的解决方案

这仅适用于您的图像是矩形并且图像的顶部/底部从左到右具有恒定纬度的情况。这仍然会在更大的纬度范围内引入更多误差,因为它仍然忽略了地球的曲率,但比假设在笛卡尔坐标系中创建的所有度数都相等要好。如果是这种情况,那么您的图像的交点将由以下坐标限定:

topLat :*leftLon*, bottomLat :*rightLon*

计算平均纬度,然后用它来查找该平均纬度处每经度的距离kmPerLon。我们现在有以下等式:

面积= (( topLat - bottomLat ) * 111km) * ( rightLon - leftLon ) * kmPerLon )

您从中获得的面积将以平方公里为单位,但我想再次重申,只有当您的图像与平行纬度呈矩形对齐并且不跨越太多角距离时,这才有效。

于 2013-07-11T18:35:54.743 回答
0

CodeBlind 是正确的,该库与单元无关。这些单元不在 Javadoc 中,因为 JTS 对此主题没有意见。你可以使用任何你想要的单位。如果您的单位是英寸,则面积将以平方英寸为单位。如果你使用英尺,面积将以平方英尺为单位......等等。如果你的数字是度数,那么你的面积是度数的平方。

于 2016-05-04T20:55:47.717 回答
0

com.vividsolutions.jts.geom.Geometry 类中的距离单位是什么?

从那篇文章距离是弧度的(我已经证明了这一点)。然后我想知道该区域是否也是弧度。所以我尝试了这个:

Math.toRadians(polygon1.getArea()) * 6371000 * 100 => this one become square kilometers.

我不知道这是否准确。但它非常接近

于 2017-12-13T08:24:25.570 回答