Сделайте так, чтобы график Geopandas DataFrame поверх растрового графика соответствовал правильному расположению

Я пытаюсь построить данные Pumps.shp поверх файла OSMap.tif из этот веб-сайт на том же рисунке.

Я пробовал использовать методы rasterio.plot () и geopandas.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:

BoundingBox (левый = 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'})


person Absalon Castañon    schedule 06.12.2017    source источник
comment
Я не могу найти два входных файла на странице, на которую вы ссылаетесь.   -  person ImportanceOfBeingErnest    schedule 06.12.2017
comment
Он находится в первом zip-архиве, где написано: ZIP-файл с векторными данными в виде шейп-файлов ... @ImportanceOfBeingErnest   -  person Absalon Castañon    schedule 06.12.2017
comment
stackoverflow.com / questions / 34458251 /   -  person Paul H    schedule 06.12.2017
comment
Какую версию rasterio вы используете? Не то чтобы это могло быть проблемой, но rasterio.plot.show только начал использовать экстент растра в 0.32.   -  person jdmcbr    schedule 07.12.2017
comment
@jdmcbr Я использую версию 0.36   -  person Absalon Castañon    schedule 07.12.2017
comment
@ AbsalonCastañon Я загрузил данные примера и смог правильно построить график. Можете ли вы подтвердить, что with_bounds=True (который изменяет экстент построения в соответствии с растровым экстентом) является для вас значением по умолчанию в rasterio.plot.show?   -  person jdmcbr    schedule 07.12.2017


Ответы (2)


У меня была такая же проблема с 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)
person kogexo    schedule 15.10.2019

Используйте matplotlib imshow вместо rasterio show. Передайте границы растра как параметр "размер" в imshow.

person cass    schedule 19.02.2020