使用RGeo和Geojson计算面积

使用RGeo和Geojson计算面积,geojson,rgeo,Geojson,Rgeo,我在geojson中定义了一个多多边形。我正在计算它的面积 当我遍历表面上的代码路径时,会得到非常混乱的结果。我怀疑这是因为我不正确地使用了某些元素 bounders={…有效的geojson…} field\u feature\u collection=RGeo::GeoJSON.decode(边界,地理工厂:RGeo::Geographic.simple\u mercator\u工厂) 第一个要素=字段要素集合[0] 第一个特征.geometry.area # => 1034773.6727

我在geojson中定义了一个多多边形。我正在计算它的面积

当我遍历表面上的代码路径时,会得到非常混乱的结果。我怀疑这是因为我不正确地使用了某些元素

bounders={…有效的geojson…}
field\u feature\u collection=RGeo::GeoJSON.decode(边界,地理工厂:RGeo::Geographic.simple\u mercator\u工厂)
第一个要素=字段要素集合[0]
第一个特征.geometry.area
# => 1034773.6727743163 
我知道我的特征面积约为602982平方米。我不知道如何使这与上面的结果相一致

我怀疑我错过了一些明显的投影


有人知道哪里出了问题吗?

这很可能是因为在GeoJSON解码器中使用了
simple\u mercator\u factory
作为您的
geo\u factory
simple_mercator_工厂
从lon/lat坐标系解析几何图形,但使用几何图形的mercator投影(EPSG:3857)执行所有计算(长度、面积等)

墨卡托投影离赤道越远,扭曲程度越大,这就是为什么你得到的面积是你预期的两倍

根据项目的范围,可能更适合使用不同的投影,尤其是当面积是您的关键指标时。如果您选择不同的投影,则刚刚更新了rgeo-proj4gem,以便与较新版本的PROJ一起使用,因此您可以在应用程序中创建适当的转换


另一种选择是使用
RGeo::Geographic.spheremic\u factory
,它使用地球的球形近似,将提供比墨卡托投影更真实的面积,但它比使用GEOS支持的笛卡尔工厂慢(这正是
simple\u Mer卡托\u factory
使用的)。

太棒了!非常感谢。一个小提示是,
RGeo::Geographic.spheremic\u factory
返回一个
RGeo::Geographic::sphereicalmultipolygonimpl
(我的输入是一个multipoly),它不实现
区域
。我肯定会用
proj4
来解决这个问题。你说得对,谢谢你指出这一点。球形实现缺少笛卡尔实现所具有的功能量。