gpt4 book ai didi

python - 数据装箱 : irregular polygons to regular mesh

转载 作者:太空狗 更新时间:2023-10-29 17:34:33 25 4
gpt4 key购买 nike

我有数千个以表格格式存储的多边形(给定它们的 4 个角坐标),代表地球的小区域。此外,每个多边形都有一个数据值。该文件看起来像这样:

lat1,  lat2,  lat3,  lat4,  lon1,   lon2,   lon3,   lon4,   data
57.27, 57.72, 57.68, 58.1, 151.58, 152.06, 150.27, 150.72, 13.45
56.96, 57.41, 57.36, 57.79, 151.24, 151.72, 149.95, 150.39, 56.24
57.33, 57.75, 57.69, 58.1, 150.06, 150.51, 148.82, 149.23, 24.52
56.65, 57.09, 57.05, 57.47, 150.91, 151.38, 149.63, 150.06, 38.24
57.01, 57.44, 57.38, 57.78, 149.74, 150.18, 148.5, 148.91, 84.25
...

许多多边形相交或重叠。现在我想创建一个 n*m 矩阵,范围从 -90° 到 90° 纬度和 -180° 到 180° 经度,步长为 0.25°x0.25° 以存储(面积加权)平均数据落在每个像素内的所有多边形的值。

因此,规则网格中的一个像素应获得一个或多个多边形的平均值(如果没有多边形与该像素重叠,则无)。每个多边形都应根据其在该像素内的面积分数对该平均值做出贡献。

基本上规则网格和多边形看起来像这样:

enter image description here

如果您查看像素 2,您会发现该像素内有两个多边形。因此,考虑到它们的面积分数,我必须取两个多边形的平均数据值。然后应将结果存储在常规网格像素中。

我环顾了整个网络,到目前为止还没有找到令人满意的方法。因为我在日常工作中使用 Python/Numpy,所以我想坚持使用它。这可能吗?包裹shapely看起来很有希望,但我不知道从哪里开始......将所有内容移植到 postgis 数据库需要付出大量的努力,我想我的道路上会有很多障碍。

最佳答案

有很多方法可以做到这一点,但是,Shapely 可以提供帮助。看起来你的多边形是四边形的,但我将要描述的方法并不依赖于此。除了 box(),您不需要任何其他东西和 Polygon()来自 shapely.geometry.

对于每个像素,通过将像素边界与每个多边形的最小边界框进行比较,找到与其大约重叠的多边形。

from shapely.geometry import box, Polygon

for pixel in pixels:
# say the pixel has llx, lly, urx, ury values.
pixel_shape = box(llx, lly, urx, ury)

for polygon in approximately_overlapping:
# say the polygon has a ``value`` and a 2-D array of coordinates
# [[x0,y0],...] named ``xy``.
polygon_shape = Polygon(xy)
pixel_value += polygon_shape.intersection(pixel_shape).area * value

如果像素和多边形不相交,它们相交的面积将为 0,并且该多边形对该像素的贡献消失。

关于python - 数据装箱 : irregular polygons to regular mesh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com