当前位置: 首页 > 知识库问答 >
问题:

使用Shapely从四个纬度和经度角创建多边形

谭景福
2023-03-14

我正在尝试使用臭氧监测仪器(OMI)的数据文件,并将该来源的数据与监测类似数据的地面仪器进行比较。

最终,我想知道它们是否在一个特定的多边形内。然而,要做到这一点,我需要创建我想象的多边形。

我有以下变量

latmat

latmat[1] = array([-62.2546, -62.371 , -62.4871, -62.6032], dtype=float32)
latmat[2] = array([-62.7195, -62.8356, -62.9519, -63.0676], dtype=float32)

lonmat

lonmat[1] = array([135.579, 135.606, 135.633, 135.66 ], dtype=float32)
lonmat[2] = array([135.688, 135.717, 135.745, 135.774], dtype=float32)

latmat和lonmat当然都比两个指数大得多,但我尽量保持这些简单。这些值分别表示四角卫星像素的纬度和经度点。

最重要的是,我在表格中也有数据

data[1] = 1E+15
data[2] = 3E+15

我如何着手创建一个地理数据框架与地理平台,识别每个组合的4 lat/lon点作为一个多边形?

共有3个答案

蒋骏
2023-03-14

因此,我最终意识到,我可以用下面的代码将数组重塑为正确的多边形。

temp = pd.concat([pd.Series(np.ravel(latcorners)), pd.Series(np.ravel(loncorners))],axis = 1)
temp['id'] = pd.Series(np.repeat([x for x in range(int(len(temp)/4))], 4))
temp['coord'] = list(zip(temp[1], temp[0]))
temp.columns = ['lat','lon','id','coord']
temp_out = temp.groupby('id').apply(lambda x: Polygon(x['coord'].to_list()))

这段代码为数组中的每个变量指定和“ID”,该变量对应于我希望该值成为其中一部分的特定多边形。然后,我使用最后一行代码按ID分组,并将每组坐标转换为多边形。

谢谢你的帮助!

冯鸿哲
2023-03-14

这对我来说是有效的,我认为你的数据是如何存储的。

from shapely.geometry import Polygon    
import numpy as np

lonmat= [np.array([135.579, 135.606, 135.633, 135.66 ]), np.array([135.688, 135.717, 135.745, 135.774])]
latmat = [np.array([-62.2546, -62.371 , -62.4871, -62.6032]), np.array([-62.7195, -62.8356, -62.9519, -63.0676])]


geom_list = [(x, y) for x, y  in zip(lonmat, latmat)]

geom_list_2 = [Polygon(tuple(zip(x, y))) for x, y in geom_list]
叶鸿振
2023-03-14

你需要使用zip()

from shapely.geometry import Polygon    
import numpy as np

latmat1 = np.array([-62.2546, -62.371 , -62.4871, -62.6032], dtype=np.float32)
latmat2 = np.array([-62.7195, -62.8356, -62.9519, -63.0676], dtype=np.float32)
lonmat1 = np.array([135.579, 135.606, 135.633, 135.66 ], dtype=np.float32)
lonmat2 = np.array([135.688, 135.717, 135.745, 135.774], dtype=np.float32)

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

  • 问题内容: 我很难缠一些三角学。我正在尝试根据起始纬度,对数,距离和方位来推论目标纬度和经度。 幸运的是,我找到了一个令人惊叹的网站,该网站准确地描述了我需要的功能:http : //www.movable- type.co.uk/scripts/latlong.html “给定目标点的距离并与起点保持距离”我尝试了java程序,但对我不起作用。我按照网站所述部署它。这是我的代码: 但它显示的输出

  • 我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不

  • 我有一个程序,其中位置的纬度和经度值存储在我下载的数据库中。 我想得到这些坐标和我当前位置之间的距离。 位置类有一个简单的方法来查找两个位置对象之间的距离,所以我想我应该用坐标创建一个位置对象,然后调用该方法。 有简单的方法吗?另外,如果有另一个可靠的、相当简单的等式,不会把事情弄得太乱,那也可以。谢谢。 (Android。位置。位置)

  • 我正在下载netcdf格式的气候数据。对于每个变量(例如“降水量”),我需要合并9个netcdf,每个都属于一个独特的气候模型。每个netcdf具有相同的大小(time、lat、lon)。如何将9个3D netcdf合并为一个4D netcdf?最后,我想计算每月的累积降水量。这是我的当前代码: 上面的代码有效,但我正在创建一个大的3D netcdf,而不是一个仍然包含气候模型名称的4D。以下代码

  • 问题内容: 我有一个包含两个纬度和经度字段的视图,并且我想创建一个新视图,将这些纬度/经度字段转换为几何/地理字段(不确定哪个最适合ArcGIS)。原始视图中的字段是双重类型,我希望在新视图中将它们转换为空间类型。 目前,我不确定如何将这些字段转换为空间类型。关于Stack Overflow的所有其他类似问题都从来没有给我提供一个可行的解决方案,因此,对于这个问题似乎是重复的,我深表歉意,但希望有