news 2026/6/4 11:29:24

手把手教你用Python调用天地图WMS/WFS服务,5分钟获取地理数据并可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用Python调用天地图WMS/WFS服务,5分钟获取地理数据并可视化

Python实战:5分钟调用天地图WMS/WFS服务实现地理数据可视化

第一次接触地理信息服务时,我被各种缩写搞晕了——WMS、WFS、WMTS这些OGC标准接口文档读起来像天书。直到用Python实际调用了一次天地图服务,才发现原来获取专业地图数据可以如此简单。本文将带你用最少的代码,快速实现从数据获取到可视化的完整流程。

1. 环境准备与基础概念

在开始编码前,我们需要明确几个关键概念。WMS(Web Map Service)提供的是地图图片,适合作为底图;WFS(Web Feature Service)则返回矢量地理要素数据,适合做进一步分析。天地图作为国内权威的地理信息服务,其接口符合OGC标准,但需要注意坐标系统一使用CGCS2000。

安装必要的Python库:

pip install requests geopandas matplotlib folium

核心工具说明:

  • requests:用于发送HTTP请求获取服务数据
  • geopandas:处理地理空间数据的利器
  • matplotlib:基础可视化工具
  • folium:生成交互式Leaflet地图

注意:所有示例基于福州天地图公开接口,实际使用时请遵守其服务条款。

2. 获取WMS底图并显示

WMS服务最常用的操作是GetMap,我们需要构造包含以下关键参数的URL:

  • layers:指定地图图层
  • bbox:地图范围(左下角经度,左下角纬度,右上角经度,右上角纬度)
  • size:图片尺寸(width x height)
  • srs:坐标参考系统(EPSG代码)
import requests from PIL import Image from io import BytesIO # 福州天地图WMS服务地址 wms_url = "http://tdt.fuzhou.gov.cn/serviceaccess/WMS/DMDZ" params = { "service": "WMS", "request": "GetMap", "version": "1.1.1", "layers": "1", "styles": "default", "bbox": "119.28,26.08,119.30,26.10", # 福州某区域 "width": "800", "height": "600", "srs": "EPSG:4490", # CGCS2000坐标系 "format": "image/png" } response = requests.get(wms_url, params=params) img = Image.open(BytesIO(response.content)) img.show()

常见问题处理:

  1. 图片显示为空白:检查bbox参数是否超出服务范围
  2. 坐标系统错误:确保srs参数与服务支持的坐标系一致
  3. 请求被拒绝:可能需要添加token等认证参数

3. 调用WFS服务获取矢量数据

WFS的GetFeature操作可以获取地理要素的详细信息。以下示例获取福州市某区域的地名点数据:

import geopandas as gpd wfs_url = "http://tdt.fuzhou.gov.cn/serviceaccess/WFS/DMDZ_WFS-G" params = { "service": "WFS", "request": "GetFeature", "version": "1.0.0", "typeName": "DMDZ:地名", "bbox": "119.28,26.08,119.30,26.10", "srsname": "EPSG:4490", "outputFormat": "application/json" } response = requests.get(wfs_url, params=params) features = gpd.read_file(response.text) print(features.head())

关键参数说明:

  • typeName:要素类型名称(格式为"命名空间:要素类型")
  • outputFormat:指定返回格式(GML/JSON)
  • maxFeatures:限制返回要素数量(避免数据量过大)

4. 数据叠加可视化实战

将WMS底图与WFS矢量数据结合展示,是地理分析的常见需求。我们使用matplotlib实现:

import matplotlib.pyplot as plt from matplotlib.offsetbox import OffsetImage, AnnotationBbox # 创建画布 fig, ax = plt.subplots(figsize=(10, 8)) # 显示WMS底图 ax.imshow(img, extent=[119.28, 119.30, 26.08, 26.10]) # 叠加WFS数据 features.plot(ax=ax, color='red', markersize=50, alpha=0.7) # 添加标注 for idx, row in features.iterrows(): ax.annotate(row['名称'], (row.geometry.x, row.geometry.y), xytext=(3,3), textcoords="offset points", bbox=dict(boxstyle="round", fc="w")) plt.title("福州市地名点分布") plt.xlabel("经度") plt.ylabel("纬度") plt.grid() plt.show()

进阶技巧:使用folium创建交互式地图

import folium # 创建底图 m = folium.Map(location=[26.09, 119.29], zoom_start=15) # 添加WMS图层 folium.WmsTileLayer( url=wms_url, name='福州底图', fmt='image/png', layers='1', transparent=True, attribution="天地图" ).add_to(m) # 添加WFS要素 for idx, row in features.iterrows(): folium.Marker( location=[row.geometry.y, row.geometry.x], popup=row['名称'], icon=folium.Icon(color='red') ).add_to(m) # 添加图层控制 folium.LayerControl().add_to(m) m.save('fuzhou_map.html')

5. 性能优化与实用技巧

实际项目中,我们还需要考虑以下问题:

缓存策略优化

from requests_cache import install_cache install_cache('ogc_cache', expire_after=3600) # 缓存1小时

坐标系转换示例

from pyproj import Transformer # CGCS2000转WGS84 transformer = Transformer.from_crs("EPSG:4490", "EPSG:4326") lon, lat = transformer.transform(119.29, 26.09)

参数自动编码处理

from urllib.parse import quote bbox = "119.28,26.08,119.30,26.10" encoded_bbox = quote(bbox) # 处理特殊字符

错误处理最佳实践

try: response = requests.get(wms_url, params=params, timeout=10) response.raise_for_status() except requests.exceptions.RequestException as e: print(f"请求失败: {e}") if hasattr(e, 'response') and e.response is not None: print(f"错误详情: {e.response.text}")

最后分享一个实用技巧:天地图服务通常有QPS限制,在循环请求时建议添加延迟:

import time time.sleep(0.1) # 每次请求间隔0.1秒
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 11:29:06

实战应用开发:使用快马平台构建win11桌面环境综合管理系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请开发一个win11桌面环境综合管理应用,核心功能包括:1、完整的我的电脑图标管理模块,支持显示隐藏和自定义图标,2、系统设置故障诊断…

作者头像 李华
网站建设 2026/6/4 11:28:03

AFSIM框架完整讲义(1):框架概述与核心架构

1.1 AFSIM框架的起源与战略定位 Advanced Framework for Simulation, Integration and Modeling(AFSIM)即高级仿真、集成与建模框架,是由美国波音公司最初开发、现由美国空军研究实验室(Air Force Research Laboratory, AFRL&…

作者头像 李华
网站建设 2026/6/4 11:27:07

AI 第十二周学习计划 全栈 AI 项目打包上线 商业化落地复盘

恭喜你来到了整个进阶路线的最后一周——第 12 周:全栈 AI 项目打包上线 & 商业化落地复盘。如果说前 11 周你是在精心打磨一把锋利的宝剑,那么这一周,你要做的就是给这把剑配上剑鞘,并把它推向市场。从“能跑的代码”到“能交…

作者头像 李华
网站建设 2026/6/4 11:25:59

新手也能懂的逆向工程:用IDA Pro和OllyDbg破解CraMe1.exe的完整流程

新手也能懂的逆向工程:用IDA Pro和OllyDbg破解CraMe1.exe的完整流程 逆向工程就像一场数字世界的侦探游戏,而CraMe1.exe就是我们今天的"案件"。不需要任何专业背景,只要跟着这份指南,你就能亲手体验破解程序的成就感。我…

作者头像 李华
网站建设 2026/6/4 11:25:58

如何快速解决洛雪音乐播放问题:六音音源修复完整指南

如何快速解决洛雪音乐播放问题:六音音源修复完整指南 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 洛雪音乐1.6.0版本升级后,许多用户遇到了音源失效的困扰——点击播放…

作者头像 李华