如何解决Geopandas + rasterio:将矢量隔离为 png
我试图将城市的边界隔离为 png 的单个部分。我的目标是将此 png 叠加到非常旧的卫星照片上。
为此,我收集了一个复制照片尺寸的光栅文件和一个带边界的矢量文件。然后,我使用了光栅:
import Rasterio
from Rasterio.plot import show
src = Rasterio.open("my_raster.tiff")
和 geopandas 的等价物:
import geopandas as gpd
GDF = gpd.read_file("boundary.shp")
我检查了 src 和 GDF 之间的坐标参考系统完全相同,然后我使用 matplotlib 正确放置了边界:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(figsize=(20,10))
show(src.read(),transform=src.transform,ax=ax)
GDF.plot(ax=ax,color='white')
plt.show()
显示:
效果很好,但我无法使用 savefig() 仅保存 png 中的边界。我试图将 ax 分开,用 ax1 表示光栅,用 ax2 表示矢量,但没有用...
我可以只保存图的这一部分吗?
解决方法
好的,经过一些搜索,我将我的情节保存如下:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(figsize=(20,10))
show(src.read(),transform=src.transform,ax=ax)
GDF.plot(ax=ax,color='#fff')
ax.set_axis_off()
fig.savefig("test.png",dpi=220,bbox_inches = 'tight')
plt.show()
然后,我在一个小函数中使用了 PIL :
from PIL import ImageTk,Image
def only_boundary(image):
# first,convert picture as RGBA
with Image.open(image).convert("RGBA") as img:
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
# if a pixel is not white...
if pixels[i,j] != (255,255,255):
#it becomes transparent
pixels[i,j] = (0,0)
# then the loops are over,we save
im = img.save(image)
and only_boundary("test.png") 保存了好结果!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。