Hyp*_*ube 13 python gis postgis numpy scipy
我有数千个以表格形式存储的多边形(给定它们的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
...
Run Code Online (Sandbox Code Playgroud)
许多多边形相交或重叠.现在我想创建一个*m矩阵,范围从-90°到90°纬度和-180°到180°经度,例如0.25°x0.25°,以存储(面积加权)平均数据落在每个像素内的所有多边形的值.
因此,常规网格中的一个像素将获得一个或多个多边形的平均值(如果没有多边形与像素重叠,则为无).每个多边形应该根据其在该像素内的面积分数贡献该平均值.
基本上常规网格和多边形看起来像这样:

如果查看像素2,您会看到这个像素中有两个多边形.因此,我必须考虑它们的面积分数来取两个多边形的平均数据值.然后应将结果存储在常规网格像素中.
我环顾网络,到目前为止找不到令人满意的方法.由于我使用Python/Numpy进行日常工作,我想坚持下去.这可能吗?该软件包匀称看起来很有希望,但我不知道从哪里开始......一切移植到PostGIS的数据库的努力一个可怕的量,我想还会有我的方式相当多的障碍.
有很多方法可以做到这一点,但是 Shapely 可以提供帮助。看来您的多边形是四边形,但我将绘制的方法并不依赖于此。除了 shapely.geometry 中的box()和Polygon()之外,您不需要任何其他东西。
对于每个像素,通过将像素边界与每个多边形的最小边界框进行比较,找到与其近似重叠的多边形。
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
Run Code Online (Sandbox Code Playgroud)
如果像素和多边形不相交,则它们相交的面积将为 0,并且该多边形对该像素的贡献消失。
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |