如何从matplotlib图生成shapefile?

时间:2019-04-26 14:27:21

标签: python matplotlib shapefile geopandas hexagonal-tiles

我想在多边形(代表地理区域)内生成一个六边形网格,在那里我可以选择每个六边形的颜色。

我做了什么:

  • 在地图上的Qgis中绘制多边形
  • 在多边形内部创建一个点网格
  • 在需要更高密度的位置添加点
  • 在geopandas数据框中上载所有这些点
  • 绘制这些点的六边形框

这是我想要的网格!

现在我必须将其导出为shapefile,但是我找不到从绘图中获取shapefile的方法?

python代码:

df = gpd.read_file("points.geojson")[['geometry']].to_crs(epsg=3857)

def get_coords(geom, i):
    if type(geom) == MultiPoint:
        geom = Point(geom[0])
    coords = geom.x, geom.y
    return coords[i]

df['X'] = df.apply((lambda x: get_coords(x.geometry, 0)), axis=1)
df['Y'] = df.apply((lambda x: get_coords(x.geometry, 1)), axis=1)

def add_basemap(ax, zoom, url='http://tile.stamen.com/terrain/tileZ/tileX/tileY.png'):
    xmin, xmax, ymin, ymax = ax.axis()
    basemap, extent = ctx.bounds2img(xmin, ymin, xmax, ymax, zoom=zoom, url=url)
    ax.imshow(basemap, extent=extent, interpolation='bilinear')
    # restore original x/y limits
    ax.axis((xmin, xmax, ymin, ymax))

f, ax = plt.subplots(1, figsize=(15, 15))
hexbin = ax.hexbin(df.X, df.Y, gridsize=30, alpha=0.5, cmap='RdYlGn', mincnt=1)
add_basemap(ax, zoom=15)
plt.colorbar(hexbin)
plt.axis('off')
plt.show()

以及生成的地图:

resulting map

或者,如果您有一种更好的方法绘制这种地图而不必创建很多点,那也很好。

0 个答案:

没有答案