0

WMS サービスから高度 GeoTIFFS を読み取ろうとしています。出力形式がJPEGの場合、BytesIOでこれを行う方法は知っていますが、rasterioに同じトリックを適用してもうまくいかないようです。誰か提案はありますか?

url = 'http://geodata.nationaalgeoregister.nl/ahn3/wms?service=wms&version=1.3.0'
wms = WebMapService(url)

x1new= 51
x2new = 51.1
y1new = 5
y2new = 5.1

layer= 'ahn3_05m_dtm'



img = wms.getmap(layers = [layer], srs = 'EPSG:3857', bbox = [x1new,y1new,x2new,y2new] , size = (width,height), format= 'image/GeoTIFF')


r = rasterio.open(BytesIO(img.read()))
#this last step produces an error
r.read()

最後のステップでエラーが発生しました

AttributeError: '_GeneratorContextManager' object has no attribute 'read'
4

2 に答える 2

1

rasterio のMemoryFileクラスを使用できます。

from owslib.wms import WebMapService
from rasterio import MemoryFile
from rasterio.plot import show

url = 'https://services.terrascope.be/wms/v2?'
wms = WebMapService(url)

x_min = 556945.9710290054
y_min = 6657998.9149440415
x_max = 575290.8578174476
y_max = 6663655.255037144

layer = 'CGS_S2_RADIOMETRY'

img = wms.getmap(
    layers = [layer],
    srs = 'EPSG:3857',
    bbox = (x_min, y_min, x_max, y_max),
    size = (1920, 592),
    format = 'image/png',
    time = '2020-06-01'
)

with MemoryFile(img) as memfile:
     with memfile.open() as dataset:
            show(dataset)
            print(dataset.profile)

私はあなたの例を再現することができませんでした。緯度と経度の座標を使用しているように見えますが、EPSG:3857. 上記の例の出力は次のとおりです。

ここに画像の説明を入力

PS: この種の GIS 固有の質問には、おそらくgis.stackexchangeの方が適切です。

于 2020-06-05T09:03:59.750 に答える