我正在使用的数据的一些背景知识。我正在从NCEP NOMADS数据服务器(特别是00p25度GFS)绘制2米温度等高线。
我发现了geojsoncontour python3模块,它运行得非常好,但它创建了一个带有LineFeatures集合的geojson文件。我对阴影轮廓之间的区域感兴趣...所以好像我需要一组多边形才能完成这个... geojsoncontour不支持。
我已经尝试使用geojson python包从matplotlib等高线图中的顶点数据创建一个geojson文件......但事实证明这比我想象的要困难。例如。在某些区域中,数据中存在最小值......并且多个多边形在彼此之上(see attached image)。我不知道如何检查多边形中是否有多边形,这样我就可以从另一个多边形创建一个带有“洞”的多边形,这样就可以对数据进行适当的样式化。
像我说的那样,这被证明是相当复杂的。有没有人有关于如何从matplotlib轮廓数据创建多边形要素集合的任何建议?也许有一种不同的方法可以从我的数据文件创建着色,这可以直接在浏览器中完成...也许使用画布(我也无法找到很多帮助)。谢谢!
#Code attempting to create polygons from contour data
#Code is only complete for the case where there are minima in the data
#(eg. where the contour is closed)
def contour_to_geojson(contour, geojson_filepath, contour_levels):
collections = contour.collections
contour_index = 0
assert len(contour_levels) == len(collections)
poly_features = []
for collection in collections:
paths = collection.get_paths()
for path in paths:
vert = path.vertices
#Check to see if the path is already closed
#There are issues with comparing floats, so set up a cutoff
#threshold instead of directly comparing values
bounds_lon = abs(vert[0][0]-vert[len(vert)-1][0])
bounds_lat = abs(vert[0][1]-vert[len(vert)-1][1])
#print(bounds_lon)
#0.000001 is essentially 0
coordinates = []
if bounds_lon < 0.00001 and bounds_lat < 0.00001:
compliant_vert = []
for v in vert:
lat = np.asscalar(vert[v][1])
lon = np.asscalar(vert[v][0])
compliant_vert.append((lon, lat))
coordinates.append(compliant_vert)
else:
#Still need to write code for this section
#Will create polygon coords using contours on either side as bounds
if contour_index < len(contour.collections):
poly = Polygon(coordinates)
properties = {
"title": "%.2f" % contour_levels[contour_index]
}
poly_features.append(Feature(geometry=poly, properties=properties))
contour_index += 1
feature_collection = FeatureCollection(poly_features)
dump = geojson.dumps(feature_collection, sort_keys=True)
with open(geojson_filepath, 'w') as fileout:
fileout.write(dump)