Сделайте так, чтобы график DataFrame на геопанде был правильно размещен.
Я пытаюсь нанести данные Pumps.shp поверх файла OSMap.tif с этого сайта на тот же рисунок.
Я попытался использовать методы rasterio.plot() и геопандас.plot () с подзаговорами matplotlibs.
Проблема заключается в том, что графики не совпадают, растровый файл отображается в диапазоне (0,1000) для обеих осей, а shp отображается в фактическом диапазоне координат (около 50000 по оси x и вокруг).
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:
BoxingBox(слева =528765.0, снизу =180466.0, справа =529934.0, сверху =181519.0)
Это результат data.bounds
(528765.0, 180466.0, 529934.0, 181519.0)
Это CRS обоих:
CRS ({'lon_0': -2, 'y_0': -100000, 'k': 0.9996012717, 'lat_0': 49, 'proj': 'tmerc', 'wktext': True, 'datum': 'OSGB36', 'no_defs': True, 'x_0': 400000, 'units': 'm'})
0 ответов
У меня была такая же проблема с rasterio 0.36.0
. Сначала я попытался перевести и масштабировать растр, но затем предпочел перевести шейп-файл.
Мой код выглядит так:
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)
Используйте matplotlib imshow вместо rasterio show. Передайте границы растра как параметр "размер" в imshow.