Geometry.getarea()和Polygon.getarea()是什么单位



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

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.666441-086.345082,+30.662783-086.342750我在找这4点之间的区域
我从.getArea()中得到的值是1.31039680000139E-5这些点实际上很接近,所以我认为它的单位是1310.4米

如果不知道底层坐标系是什么,这很难判断。快速浏览了一下您链接的Javadoc API后,我怀疑您的几何软件包可能是在处理原始笛卡尔坐标,并且对所使用的测量单位是不可知的。如果是这样的话,你就处在一个非常滑的斜坡上。问题是:

并非所有学位都是平等的

纬度都具有相同的空间分辨率。每一个纬度对应大约111公里的距离。经度的情况并非如此。在赤道,经度相当于111公里的距离,但在两极,经度1度的距离为零公里。换句话说,如果有一个左上角为10:0、右下角为0:10的Lat/Lon长方体,则它的表面积将大于左上角在20:0、右下方在10:10的Lat/long长方体,即使这些长方体的边都是10度长。

第二个问题是地球的曲率。由于地球的曲率,地球表面100公里乘100公里的正方形的表面积将超过10000平方公里,因为从地球表面的一点到另一点的最短距离实际上不是直线,而是弧。

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

换言之,球面(或实际上,椭球)表面积不是一个容易解决的问题,至少不如映射到笛卡尔坐标并使用它们来寻找表面积的欧几里得测量值那么容易。如果你处理的表面区域跨越了一个很小的角距离,你可以逃脱惩罚,但你的lat/lon框越大,你得到的失真就越多。

可能的解决方案

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

topLat:*leftLon*,bottomLat:*rightLon*

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

区域=((topLat-bottomLat)*111km)*(右Lon-左Lon)*kmPerLon

你从中得到的面积将以平方公里为单位进行测量,但我想再次重申,只有当你的图像与平行纬度成直角对齐,并且没有跨越太多的角距离时,这种方法才能相当好地工作。

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

com.vividsolutions.jts.geom.Geometry类中的距离单位是多少?

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

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

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

相关内容

  • 没有找到相关文章

最新更新