我试图在同一图上从this website的OSMap.tif文件上绘制Pumps.shp数据。
我尝试使用rasterio.plot()和geopandas.plot()方法,以及matplotlibs子图。
问题是图表不匹配,光栅文件在两个轴的范围(0,1000)中绘制,而shp在实际坐标范围内绘制(x轴上约50000并且周围)。
两个对象中的crs相等,坐标在相同的范围内。为什么是这样?我做错了什么?
这是我的代码
import rasterio as rast
import rasterio.plot as rsplot
import geopandas as gpd
src=rast.open("OSMap.tif")
data=gpd.read_file("Pumps.shp")
fig,ax=plt.subplots()
rsplot.show(src,ax=ax)
data.plot(ax=ax)
plt.show()
这是调用src.bounds:
的结果BoundingBox(左= 528765.0,下限= 180466.0,右= 529934.0,上限= 181519.0)
这是data.bounds
的结果(528765.0,180466.0,529934.0,181519.0)
这两者都是:
CRS({' lon_0':-2,' y_0':-100000,' k':0.9996012717,' lat_0': 49,'':' tmerc',' wktext':是的,'数据':' OSGB36',& #39; no_defs':是的,' x_0':400000,'单位':' m'})
答案 0 :(得分:0)
我对rasterio 0.36.0
有同样的问题。我首先尝试平移和缩放栅格,但不喜欢平移shapefile。
我的代码如下:
import geopandas as gpd
import matplotlib.pyplot as plt
import rasterio
image = rasterio.open('input.tif') # with tgw world file
shapefile = gpd.read_file('input.shp')
# coordinates and scaling factors
scale_x = image.transform[1]
scale_y = image.transform[5]
x0 = image.transform[0]
y0 = image.transform[3]
# translates back shapefile
shapefile.geometry = shapefile.translate(-x0, -y0)
shapefile.geometry = shapefile.scale(-1.0/scale_x, -1.0/scale_y, origin=(0, 0, 0))
# plots both elements
fig, ax = plt.subplots()
ax = rasterio.plot.show(image.read(), with_bounds=True, ax=ax)
shapefile.plot(ax=ax)
答案 1 :(得分:0)
使用matplotlib imshow代替rasterio show。将栅格的边界作为imshow的“范围”参数传递。