当前位置: 首页 > 面试题库 >

如何使用python计算地球表面上多边形的面积?

杨学真
2023-03-14
问题内容

标题基本上说明了一切。我需要使用Python计算地球表面上的多边形内部的面积。计算地球表面上任意多边形所围成的面积虽然可以说明这一点,但在技术细节上仍然含糊不清:

如果要使用更“
GIS”的样式来执行此操作,则需要为您的区域选择一个度量单位,并找到保留该区域的适当投影(并非全部如此)。由于您正在谈论计算任意多边形,因此我将使用类似Lambert
Azimuthal等面积投影的方法。将投影的原点/中心设置为多边形的中心,将多边形投影到新的坐标系,然后使用标准平面技术计算面积。

那么,如何在Python中做到这一点?


问题答案:

假设您以GeoJSON格式表示了科罗拉多州

{"type": "Polygon", 
 "coordinates": [[
   [-102.05, 41.0], 
   [-102.05, 37.0], 
   [-109.05, 37.0], 
   [-109.05, 41.0]
 ]]}

所有坐标均为经度,纬度。您可以使用pyproj投影坐标,并使用Shapely查找任何投影多边形的面积:

co = {"type": "Polygon", "coordinates": [
    [(-102.05, 41.0),
     (-102.05, 37.0),
     (-109.05, 37.0),
     (-109.05, 41.0)]]}
lon, lat = zip(*co['coordinates'][0])
from pyproj import Proj
pa = Proj("+proj=aea +lat_1=37.0 +lat_2=41.0 +lat_0=39.0 +lon_0=-106.55")

这是一个以关注区域为中心并包围其关注区域的等面积投影。现在制作新的投影GeoJSON表示形式,将其转换为Shapely几何对象,并采用以下区域:

x, y = pa(lon, lat)
cop = {"type": "Polygon", "coordinates": [zip(x, y)]}
from shapely.geometry import shape
shape(cop).area  # 268952044107.43506

这是与被调查区域非常接近的近似值。对于更复杂的特征,您需要沿顶点之间的边缘进行采样,以获取准确的值。上面有关日期变更线等的所有警告均适用。如果您仅对区域感兴趣,则可以在投影之前将特征从日期线移开。



 类似资料:
  • 问题内容: 假设我有一组任意的纬度和经度对,它们代表一些简单的闭合曲线上的点。在笛卡尔空间中,我可以使用格林定理轻松计算出此类曲线所包围的面积。计算球体表面面积的类似方法是什么?我想我所追求的是Matlabareaint函数背后的算法(甚至是近似算法)。 问题答案: 有几种方法可以做到这一点。 1)整合纬度带的贡献。此处每个条带的面积为(Rcos(A)(B1-B0))(RdA),其中A为纬度,B1

  • 这更多的是一个方法问题,而不仅仅是技术问题。 我有一个生成的球体,分解成六边形作为一个网格。每一个六边形瓷砖都是一种不同的地形,例如,山,丘陵,海洋,飞机等。我想在3D中把每一种地形类型画成几个网格的集合,代表一种相应的地形类型。 现在最大的问题是如何在运行时将地形网格调整到每个六边形面,这取决于地形类型,在运行时地形类型也会发生变化,例如,地形变形。同时,考虑到六边形并不是完全正则或相等的。 缩

  • 总结: 我试图在r中计算大量多边形的面积。我读过几篇关于如何做的文章(例1 扩展说明: 我实际上是在计算澳大利亚维多利亚州的房产面积。多边形表示这些属性。我从Spatial Datamart下载了所有维多利亚州的VicMaps简化模型1和2。然而,考虑到形状文件的大小,我不得不将搜索范围缩小到一个地方政府区域(LGA),并计算多边形区域(仅用于测试)。形状文件为15.5MB。 这是有效的,但它不是

  • 问题内容: 我搜索了有关如何计算地球多边形表面积的解释和算法。我发现了这个,这 说我已经凸出了船体点 从第二个链接开始,第一个答案使用Python库,而第二个答案的方法即使我们假设地球是球形,也不会给出非常精确的区域(我是对的)吗?如果我们假设地球是球形,我可以采取什么方法来计算面积(便宜些)? 另外,我寻找了不同的库(geotools.org等),但是在它们有关面积计算的文档中找不到。 问题答案

  • https://stackoverflow.com/a/4682656/7924630这是一个非常有用的答案,帮助我解决这个问题 出于某种原因,这返回的区域值很小,我不明白为什么。例如,我在一个矩形区域上测试了这个。面积应该约为45平方米,但它返回0.0137平方米。我尝试了其他的实现,但没有找到任何对本机JavaScript有用的东西。

  • 我使用Python 3.4和shapely 1.3.2创建一个多边形对象的长/lat坐标对列表,我转换成一个众所周知的文本字符串,以便解析它们。这样的多边形可能看起来像: 由于shapely不处理任何投影并实现carthesian空间中的所有几何体对象,因此对该多边形调用area方法,如: 以平方度为单位给出多边形的面积。为了得到以平方米为单位的平面面积,我想我必须使用不同的投影变换多边形的坐标(