我試圖在Python中的shapefile中繪製一些區域的地圖。我的基本做法是這樣的:在shapefile中找到補丁子集的地圖邊界(Python)
shp = fiona.open("C:/Users/nils/Documents/Maps/my_shapefile.shp")
bds = shp.bounds
ll = (bds[0], bds[1])
ur = (bds[2], bds[3])
coords = list(ll + ur)
w, h = coords[2] - coords[0], coords[3] - coords[1]
# Make figure instance, add Basemap and CCG boundaries from shapefile
fig, ax = plt.subplots(figsize=(12,10))
m = Basemap(projection="tmerc", lon_0 = -2., lat_0 = 49., ellps="WGS84",
llcrnrlon = coords[0], llcrnrlat = coords[1],
urcrnrlon = coords[2], urcrnrlat = coords[3],
lat_ts = 0, resolution="i", suppress_ticks=True)
m.readshapefile("C:/Users/nils/Documents/Maps/my_shapefile.shp", "Regions")
# Extract polygon coordinates of and names of regions to plot from shapefile
to_plot = ["region_A", "region_B", "region_C"]
poly = []; name = []
for coordinates, region in zip(m.Regions, m.Regions_info):
if any(substr in region["name"] for substr in to_plot):
poly.append(Polygon(coordinates))
name.append(region["name"])
# Turn polygons into patches using descartes
patches = []
for i in poly:
patches.append(PolygonPatch(i, facecolor='#006400', edgecolor='#787878', lw=0.25, alpha=0.5))
# Add PatchCollection to basemap
ax.add_collection(PatchCollection(patches, match_original=True))
現在我的這個問題是,shape文件覆蓋更大的地域範圍,但我只是想繪製該區域的子集(想如我有一個英國shape文件,但希望繪製威爾士所有地區的地圖)。現在,我可以識別正確的區域,並只添加上述示例中的那些補丁,但matplotlib仍然會繪製shapefile中所有區域的邊界,並且由fiona的bounds
方法標識的邊界顯然獨立於補丁I'已經選擇。
我有兩個問題與此:
我怎樣才能得到matplotlib只繪製在shape文件中定義補丁的一個子集的邊界?
如何獲得補丁子集的邊界,類似於fiona的
bound
方法對整個shapefile的作用?