我有一组代表多边形的纬度/经度坐标对。我正在尝试确定该多边形内的总面积。我将如何在Ruby中做到这一点?
这是多边形的示例数组:
[[37.7663613767094, -122.452969210084], [37.7674219449606, -122.444718340349], [37.7701838510542, -122.445330289514], [37.7709974013834, -122.439159589248], [37.7700761930893, -122.438861402472], [37.7703501163684, -122.436868738421], [37.7712650571321, -122.437078116573], [37.7736056746515, -122.437533130227], [37.7714671036087, -122.453964210266], [37.7663613767094, -122.452969210084]]
答案 0 :(得分:2)
您可以使用这个包装GEOS的库(C地理空间库本身是JTS的一个端口)。 https://github.com/dark-panda/ffi-geos
该库可以处理坐标空间中的计算并处理近似值。
根据您需要多少准确度,我会先将数据投影到适当的投影(不是墨卡托)。然后计算你的面积
答案 1 :(得分:2)
语言无关解决方案:
GIVEN:多边形总是可以由不重叠的n-2个三角形组成(n =点数或边数)。 1个三角形= 3个边多边形= 1个三角形; 1平方= 4边多边形= 2个三角形;等令人厌恶的QED
因此,可以通过“切掉”三角形来减少多边形,并且总面积将是这些三角形的面积之和。尝试使用一张纸和一把剪刀,最好是在跟踪之前可以看到这个过程。如果你在多边形路径中取任何3个连续点并使用这些点创建一个三角形,那么你将只有三个可能场景中的一个:
我们只对第一个选项(完全包含)中的情况感兴趣。
每当我们找到其中之一时,我们将其切掉,计算其面积(容易腻,不会在这里解释公式)并制作一个新的多边形,少一边(相当于多边形,这个三角形被切掉)。直到我们只剩下一个三角形。
如何以编程方式实现:
创建一个点数组。运行数组从点x,x + 1和x + 2制作三角形。将每个三角形从一个形状转换为一个区域,并将其与从多边形创建的区域相交。如果得到的交点与原始三角形相同,则所述三角形完全包含在多边形中并且可以被切断。从数组中删除x + 1并从x = 0重新开始。否则,移到阵列中的下一个点x + 1。
另外,如果您希望与mappping集成并从geopoints开始,则必须从geopoints转换为screenpoints。这需要决定地球形状的建模和公式(虽然我们倾向于认为地球是一个球体,它实际上是一个不规则的卵形(蛋形),有凹痕。有很多模型,为了进一步的信息维基。
答案 2 :(得分:1)
这种语言可能并不重要。您可以使用此处提到的公式计算多边形的面积:
http://mathworld.wolfram.com/PolygonArea.html
假设你的点是(x1,y1)(x2,y2)..(xn,yn)并且它们包含一个小区域:
Area = 0.5 * (x1 * y2 - x2 * y1 + x2 * y3 - x3 * y2 ..... + xn * y1 - x1 * yn)
注意:这不适用于较大的区域,您需要使用更复杂的方法来计算区域,这涉及角度坐标。但是,这适用于小区域,可以假设是平面的。
编辑:
要获得平方英里的区域,您可以执行以下操作,从那里转换为您想要的任何单位。
areaInSqMiles = Area * (60 * 60 * 1.15 * 1.15)
答案 3 :(得分:0)
有一个很好的例子来说明如何相乘顶点。基本上就是你想做的!!
答案 4 :(得分:0)
这方面的一些技术包括整合(将多边形划分为横向条带并进行整合。您还可以投影到平面上并计算该区域。