将geopandas DataFrame绘图放在正确拟合的栅格图上

时间:2017-12-06 17:53:49

标签: python matplotlib geopandas rasterio

我试图在同一图上从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'})

2 个答案:

答案 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的“范围”参数传递。