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

在多边形网格中计算每条线的交叉点

江德海
2023-03-14

我有一个超过40年的过去Storm的大数据集(约20000),其中有一个3小时间隔的中心点列表。我试图覆盖一个网格网格到一个大的区域,我想从其中计数的次数每次Storm已经通过任何给定的网格单元,但是我目前的实现只跟踪在这三个小时的时间间隔的位置,导致一些情况当轨道也应该被计算时,它会跳过网格空间。

我尝试使用geopandas来解决这个问题,为每个Storm轨迹创建一个线系列,然后对网格网格执行交集,但是,我找不到任何允许我这样做的功能实现。

为了在geopandas中创建网格,我使用了上一个问题中的以下解决方案:

lonCount = ((plotExtent[1]+360) - (plotExtent[0]+360)) * gridResolution
latCount = ((plotExtent[3]) - (plotExtent[2])) * gridResolution

lons = np.linspace(plotExtent[0], plotExtent[1], lonCount)
lats = np.linspace(plotExtent[2], plotExtent[3], latCount)
# Store the meshgrid in polygon format
xlines = [((x1, yi), (x2, yi)) for x1, x2 in zip(lons[:-1], lons[1:]) for yi in lats]
ylines = [((xi, y1), (xi, y2)) for y1, y2 in zip(lats[:-1], lats[1:]) for xi in lons]
# Save as a Shapely object, then store in geopandas
grids = list(polygonize(MultiLineString(xlines + ylines)))
polyFrame = gpd.GeoDataFrame(grids)

这将创建一系列约5600个多边形对象的地理数据库。然后,我循环遍历我的每个storm对象,以剥离lat/lon列表对,并将其转换为一个shapely LineSeries对象,然后将其读入geopandas,如下所示:

polyLine = LineString(list(zip(storm_lons, storm_lats)))
coord_tests = gpd.GeoSeries(polyLine)

我的目标是简单地做如下事情:

I = coord_tests.intersects(polyFrame)

但是,若要收集线条字符串与之相交的多边形列表,将提示以下错误:

AttributeError: No geometry data set yet (expected in column 'geometry'.)

我想知道这里是否有格式不正确的东西,是否将调用错误地传递给了这个函数,或者是否有更有效的方法来完成我在这里尝试做的事情。

如蒙协助,将不胜感激。

谢谢

共有1个答案

阴禄
2023-03-14
polyFrame = gpd.GeoDataFrame(geometry=grids)

:-)

 类似资料:
  • 我有一个横跨各种多边形的线串,存储为GeoJsons。我想在每个多边形区域内将线条分割成单独的部分。然而,我还没能做到这一点。这是我到目前为止的一个可复制的例子: 然后我尝试通过多边形分割直线,如下所示: 但我得到了以下输出,这似乎不正确: 我期望有三条线,一条存在于正方形多边形内,然后两条分别存在于多边形外。

  • 我要做的是找出在一个六角网格上,两点之间有多少个六边形。我试着在网上搜索一个公式,但我无法找到一个匹配类型的十六进制网格我正在使用。

  • 我试图优化我的地形,减少三角形计数,同时保持尽可能多的细节。减少工作很好,我削减了五分之一顶点的数量没有太多的视觉损失。在这个新的非对称网格上法线的计算有一个问题。 每个顶点都有法线,下面是计算法线的片段: 其中三角形是与顶点(点)相连的三角形。我把所有的三角形法线加在一起(不进行归一化以使最终的向量以三角形面积加权),然后最后对最终结果进行归一化。 我相信计算是正确的,但结果中有一些讨厌的伪影(

  • 我被一个似乎很容易解决的问题所困扰,但我似乎找不出正确的公式。 我有一个立方体坐标系中六边形群的列表。我知道群的立方体坐标,但我需要计算给定群中一个小六边形的“全局”坐标。 例如,在下图中,我知道和的坐标。如果每个组都有相同的半径(在本例中半径为1),并且它们之间不重叠(让我们把它看作是从0、0、0开始的组的平铺,从而创建一个十六进制网格),那么我如何计算GroupB中心平铺的坐标呢? 任何帮助都

  • 我有一个六边形网格,就像图中的一样,我试图找到最简单的方法(也许是一个公式)来计算这个网格内两个六边形之间的距离。当然,我的网格的大小比这更大,但是当我们计算规则网格(有水平和垂直轴)中两个节点之间的距离时,我试图找到一个类似于欧几里得距离公式的公式。 我读了一些方法,但他们都说Y轴应该是60度,然后他们提供了一些公式(六角网格中瓷砖之间的曼哈顿距离)。是否有一种方法来计算距离使用“坐标系”相同,

  • 本文向大家介绍Java多边形重心计算,包括了Java多边形重心计算的使用技巧和注意事项,需要的朋友参考一下 多边形重心计算 三角形重心 顶点为a,b,c的三角形重心为x = (xa + xb + xc) / 3,y = (ya + yb + yc) / 3 多边形重心 x = (x1w1 + x2w2 + … + xnwn)/W y = (y1w1 + y2w2 + … + ynwn)/W 总结