python - 订购用于绘图的多边形坐标

标签 python polygon matplotlib-basemap shapely

我有一个由许多单元格组成的模型网格,我想在 matplotlib basemap 上为其绘制阴影多边形。

使用 pyproj,我首先投影点,然后使用 shapely.geometryPolygon 类创建多边形以提取网格的外部坐标从。然后我将它们还原为 WGS84 以传递给我的绘图函数:

grid_x_mesh, grid_y_mesh = pyproj.transform(wgs84, nplaea, grid_lons, grid_lats)
grid_x = grid_x_mesh.ravel()
grid_y = grid_y_mesh.ravel()
grid_poly = Polygon(zip(grid_x, grid_y))
grid_x, grid_y = grid_poly.exterior.coords.xy
grid_plons, grid_plats = pyproj.transform(nplaea, wgs84, grid_x, grid_y)

然后,使用 matplotlib.basemap 方法,我将 WSG84 坐标投影到 map 投影(在本例中为 nplaea)和

grid_poly_x, grid_poly_y = m(grid_plons, grid_plats)
grid_poly_xy = zip(grid_poly_x, grid_poly_y)
grid_poly = Polygon(grid_poly_xy, facecolor='red', alpha=0.4)
plt.gca().add_patch(grid_poly)

尝试这样做时,我得到了一个十字交叉图案,我认为它必须对我提供给多边形函数的坐标进行排序。

我认为这与我提取外部坐标的方式有关,或者与我创建要绘制的最终多边形时坐标列表的顺序有关。

如果这是问题所在,是否有一种聪明的方法可以正确地对这些进行排序?

绘制的多边形 enter image description here

特写 enter image description here

最佳答案

我同意网格坐标有一些排列错误。 grid_lons 是如何创建的?将 Pyproj 与 Shapely 几何一起使用的一种更简洁的方法可能是使用相对较新的函数 shapely.ops.transform。例如:

import pyproj
from shapely.geometry import Polygon, Point
from shapely.ops import transform
from functools import partial

project = partial(
    pyproj.transform,
    pyproj.Proj(init='epsg:4326'),  # WGS84 geographic
    pyproj.Proj(init='epsg:3575'))  # North Pole LAEA Europe

# Example grid cell, in long/lat
poly_g = Polygon(((5, 52), (5, 60), (15, 60), (15, 52), (5, 52)))

# Transform to projected system
poly_p = transform(project, poly_g)

应该通过转换保持坐标的健全性(假设它们一开始是健全的)。

关于python - 订购用于绘图的多边形坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21630177/

相关文章:

与start()相关的Python多线程性能问题

c - GPC 多边形初始化

python - 使用 Voronoi 图查找多边形的中线

c# - 获取最少数量的点来创建相同的多边形

python - 使用 matplotlib 移动网格

python - (Python) 无法查看 Matplotlib 图

python - Google App Engine 的排序问题

python - Flask 和 PyJWT 检索授权 header

python - file() 方法属于哪个 Python 模块?

python - 将Basemap转换为Cartopy,是否有等价的函数,例如Basemap的shiftgrid()?