2014-01-15 129 views
3

我使用python matplotlib從二維溫度數據數組(存儲在NetCDF文件中)生成等高線圖,我有興趣將等高線多邊形和/或線條導出爲geojson格式,以便我可以在外部使用它們的matplotlib。我已經想通了,在「pyplot.contourf」函數返回「QuadContourSet」對象,它具有包含輪廓的座標的「集合」屬性:matplotlib等高線圖geojson輸出?

contourSet = plt.contourf(data, levels) 
collections = contourSet.collections 

有誰知道matplotlib有辦法出口「集合」中的各種格式的座標,特別是geojson?我已經搜索了matplotlib文檔和網頁,並沒有提出任何明顯的內容。

謝謝!

+0

我想你得寫自己的出口國:/(你一定要與分享MPL社區如果你這樣做) –

回答

2

一個良好的開端,就一定要導出所有的輪廓是使用get_paths方法,當你遍歷Collection對象,然後的Pathto_polygons方法來獲取numpy的數組:

http://matplotlib.org/api/path_api.html?highlight=to_polygons#matplotlib.path.Path.to_polygons

儘管如此,最終的格式取決於你。

import matplotlib.pyplot as plt 
cs = plt.contourf(data, levels) 
for collection in cs.collections: 
    for path in collection.get_paths(): 
     for polygon in path.to_polygons(): 
      print polygon.__class__ 
      print polygon 
2

geojsoncontour是一個將matplotlib輪廓線轉換爲geojson的Python模塊。

它使用以下,簡化但是完整,方法來轉換matplotlib輪廓以GeoJSON:

import numpy 
from matplotlib.colors import rgb2hex 
import matplotlib.pyplot as plt 
from geojson import Feature, LineString, FeatureCollection 

grid_size = 1.0 
latrange = numpy.arange(-90.0, 90.0, grid_size) 
lonrange = numpy.arange(-180.0, 180.0, grid_size) 
X, Y = numpy.meshgrid(lonrange, latrange) 
Z = numpy.sqrt(X * X + Y * Y) 

figure = plt.figure() 
ax = figure.add_subplot(111) 
contour = ax.contour(lonrange, latrange, Z, levels=numpy.linspace(start=0, stop=100, num=10), cmap=plt.cm.jet) 

line_features = [] 
for collection in contour.collections: 
    paths = collection.get_paths() 
    color = collection.get_edgecolor() 
    for path in paths: 
     v = path.vertices 
     coordinates = [] 
     for i in range(len(v)): 
      lat = v[i][0] 
      lon = v[i][1] 
      coordinates.append((lat, lon)) 
     line = LineString(coordinates) 
     properties = { 
      "stroke-width": 3, 
      "stroke": rgb2hex(color[0]), 
     } 
     line_features.append(Feature(geometry=line, properties=properties)) 

feature_collection = FeatureCollection(line_features) 
geojson_dump = geojson.dumps(feature_collection, sort_keys=True) 
with open('out.geojson', 'w') as fileout: 
    fileout.write(geojson_dump) 
+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/13797700) –

+0

@ egor.zhdan,我用一個完整的工作代碼示例改進了我的答案,如何將matplotlib輪廓轉換爲geojson。 –

+0

@ egor.zhdan,請你回顧我的改進的答案?這與我原來的回答非常不同,但仍然有你的刪除建議。 –