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

标签 python numpy scipy gis postgis

我有数千个以表格格式存储的多边形(给定它们的 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/

相关文章:

python - weakref (WeakKeyDictionary) 来框架 (FrameType) 对象

python - 使用python自动发布到facebook页面

python - Scipy ODR python

python - 如何在 Python 中制作相同大小的数组

python - Paypal API 错误 paypal.exceptions.PayPalAPIResponseError : u'Security header is not valid' (Error Code: 10002)

python - 替换 Pandas 数据框中每个单元格值的有效方法

python - 如何将 numpy 数组转换为 gif?

python - 使用optimize.curve_fit函数的结果不是正确的 float 组

python : generating random numbers from a power law distribution

python - NumPy ,1 :M joins on Arrays