2010-07-12 67 views

回答

4

我假設你想爲每個選民單獨的圖像?如果是的話,我會使用python採取如下方法:

閱讀使用GDAL/OGR幾何:

安裝GDAL/OGR tools及其python bindings。下載選舉界限的ESRI shapefile。確保你可以閱讀使用OGR多邊形形狀:

import sys 
import ogr 

ds = ogr.Open("/path/to/boundary/file.shp") 
if ds is None: 
    print "Open failed.\n" 
    sys.exit(1) 

lyr = ds.GetLayer(0) 

lyr.ResetReading() 

feat = lyr.GetNextFeature() 
while feat is not None: 
    geom = feat.GetGeometryRef() 
    if geom is None or geom.GetGeometryType() != ogr.wkbPolygon: 
     print "no poly geometry\n" 

    feat = lyr.GetNextFeature() 

ds.Destroy() 

輸出通過使用勻稱的matplotlib幾何,笛卡爾

安裝matplotlibshapelydescartes。修改上面的腳本通過勻稱和笛卡爾加載每個多邊形到matplob:

import sys 
import ogr 
from shapely.wkb import loads 
from descartes import PolygonPatch 
from matplotlib import pyplot 


ds = ogr.Open("/path/to/boundary/file.shp") 
if ds is None: 
    print "Open failed.\n" 
    sys.exit(1) 

lyr = ds.GetLayer(0) 

lyr.ResetReading() 

feat = lyr.GetNextFeature() 
while feat is not None: 
    geom = feat.GetGeometryRef() 
    if geom is None or geom.GetGeometryType() != ogr.wkbPolygon: 
     print "no poly geometry\n" 
    else: 
     # create matplotlib figure: 
     fig = pyplot.figure(1, figsize = [10,10], dpi = 300) #create 10x10 figure 
     ax = fig.addsubplot(111) #Add the map frame (single plot) 

     # add polygon: 
     patch = PolygonPatch(loads(feature.GetGeometryRef().ExportToWkb()), plus colour and line considerations) 
     ax.addpatch(patch) # simply add the patch to the subplot 

     # set plot vars 
     ax.set_xlim(get xmin and xmax values from data) 
     ax.set_ylim(get ymin and ymax values from data) 
     ax.set_aspect(1) 

     # save as image 
     pyplot.savefig('somefile.png', some arguments you like)¶ 

    feat = lyr.GetNextFeature() 

ds.Destroy() 

顯然,你需要解決這個問題了一點得到它吸引你怎麼想,但一般的做法應該是聲。

2

下載和使用QGIS - www.qgis.org 這個方便的開源工具運行良好,並在本地打開了許多典型格式(即最初由ESRI開發的形狀文件)。它也有一個內置的OGR工具。

加上它只是玩的樂趣,並易於使用。

相關問題