我有一系列经度 – 纬度点,用于定义区域的边界.我想基于这些点创建一个多边形,并在地图上绘制多边形并填充它.目前,我的多边形似乎由连接所有点的许多补丁组成,但是点的顺序不正确,当我尝试填充多边形时,我得到一个奇怪的外观区域(参见附件).
我根据多边形的中心对经度 – 纬度点(mypolyXY数组)进行排序,但我的猜测是这不正确:
cent=(np.sum([p[0] for p in mypolyXY])/len(mypolyXY),np.sum([p[1] for p in mypolyXY])/len(mypolyXY))
# sort by polar angle
mypolyXY.sort(key=lambda p: math.atan2(p[1]-cent[1],p[0]-cent[0]))
我使用绘制点位置(黑色圆圈)和我的多边形(彩色贴片)
scatter([p[0] for p in mypolyXY],[p[1] for p in mypolyXY],2)
p = Polygon(mypolyXY,facecolor=colors,edgecolor='none')
ax.add_artist(p)
我的问题是:如何根据经度 – 纬度点数组关闭多边形?
更新:
我测试了一些关于如何绘制多边形的更多信息.我删除了排序例程,只是按照它们在文件中出现的顺序使用了数据.这似乎改善了结果,但正如@tcaswell所提到的,多边形形状仍然在削弱自己(见新图).我希望可能有一个路径/多边形例程可以解决我的问题,并在多边形的边界内合并所有形状或路径.建议非常欢迎.
更新2:
我现在有一个基于@Rutger Kassies和Roland Smith建议的脚本的工作版本.我最后使用org阅读了Shapefile,它工作得相当好.它适用于标准的lmes_64.shp文件但是当我使用更详细的LME文件时,每个LME可能包含多个多边形,这个脚本崩溃了.我必须找到一种方法来合并相同的LME名称的各种多边形,以使其工作.我附上了我的剧本,以防万一有人会看一下.我非常感谢有关如何改进此脚本或使其更通用的评论.此脚本创建多边形并提取我从netcdf文件中读取的多边形区域内的数据.输入文件的网格为-180到180和-90到90.
import numpy as np
import math
from pylab import *
import matplotlib.patches as patches
import string, os, sys
import datetime, ty