Сделайте так, чтобы график 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.

Другие вопросы по тегам