如何使用OWSLib获取WMS提取图片的正确GetMap尺寸?
OWSLib WMS GetMap请求size参数设置指南
核心逻辑
size的[Width, Height]是输出PNG的像素宽高,关键要保证像素比例和bbox的地理比例一致,不然地图会拉伸变形。
计算步骤
- 先算bbox的地理范围尺寸:
- 地理宽度 = 80.9 - 72.653 = 8.247(EPSG:4326下单位是度)
- 地理高度 = 22.029 - 15.607 = 6.422
- 算出宽高比例:
8.247 / 6.422 ≈ 1.284 - 设定其中一个像素值,推导另一个:
- 比如设Width=800,那Height≈800 / 1.284 ≈ 623(取整数)
- 或者设Height=600,Width≈600 * 1.284 ≈ 770
修正后的代码示例
from owslib.wms import WebMapService # 初始化WMS服务,替换成你实际的WMS地址 wms = WebMapService("你的WMS服务URL", version="1.1.1") image = wms.getmap( layers=['geomorphology:MH_GM50K_0506'], srs='EPSG:4326', bbox=(72.653, 15.607, 80.9, 22.029), format='image/png', size=[800, 623], # 按比例计算后的像素宽高 transparent=True ) out = open('geomorph_MH.png', 'wb') out.write(image.read()) out.close() # 注意加括号,否则不会执行关闭操作
额外提示
- 要是懒得计算,也可以先设固定值比如
[1000,1000]快速预览,但地图会变形,不适合正式使用。 - 部分WMS会限制最大像素尺寸,如果请求报错,缩小宽高数值就行。
内容的提问来源于stack exchange,提问作者Nexus23
相关产品推荐
相关产品推荐

