python教程 | 最标准的地图调用方式(国家测绘局提供数据)
时间:2022-07-26
本文章向大家介绍python教程 | 最标准的地图调用方式(国家测绘局提供数据),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
天地图是国家测绘地理信息局建设的地理信息综合服务网站,是国家地理信息公共服务平台的公众版。 与常用的谷歌地图、腾讯地图、百度地图、微软地图、必应地图相比,天地图有什么不同呢?主要体现在数据的权威性和准确性。天地图发布的国界线、九段线等是准确无误的;另外国内只有天地图影像的坐标是无偏移的,其余地图的坐标都进行过加密处理。 Cartopy是一个基于Python的制图模块,其提供了加载在线地图的功能,那么如何添加调用天地图服务功能呢? 其实前期已有相关的工作,但是由于天地图服务升级,原先的方法都不再适用,这里给出的是最新的调用方法。
准备工作
网站:天地图 首先需要注册账号,然后选择开发资源→地图API
进入控制台,点击创建新应用,选择服务器端,这样可以得到一个密钥(key)
天地图地图服务采用OGC WMTS标准,但是该方法目前没有试成功,故采用了瓦片地图(XYZ Tiles)的形式。
添加调用方法
添加以下代码,注意把代码中的'your_key'替换成之前得到的key
import cartopy.io.img_tiles as cimgt
# 天地图矢量
class TDT_vec(cimgt.GoogleWTS):
def _image_url(self, tile):
x, y, z = tile
key = 'your_key'
url = 'http://t0.tianditu.gov.cn/DataServer?T=vec_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, key)
return url
# 天地图遥感
class TDT_img(cimgt.GoogleWTS):
def _image_url(self, tile):
x, y, z = tile
key = 'your_key'
url = 'http://t0.tianditu.gov.cn/DataServer?T=img_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, key)
return url
# 天地图地形
class TDT_ter(cimgt.GoogleWTS):
def _image_url(self, tile):
x, y, z = tile
key = 'your_key'
url = 'http://t0.tianditu.gov.cn/DataServer?T=ter_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, key)
return url
调用演示
1、矢量底图、影像底图、地形底图
# 导入模块
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter
import cartopy.io.shapereader as shpreader
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
fig = plt.figure(figsize=(18, 12))
ax = fig.add_subplot(1, 3, 1, projection=ccrs.PlateCarree())
ax.set_extent([118, 122, 28, 32],crs=ccrs.PlateCarree())
request = TDT_vec()
ax.add_image(request, 9)
ax.set_title('天地图矢量底图',fontsize=15)
gl = ax.gridlines(draw_labels=True, linewidth=1, color='k', alpha=0.5, linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
ax = fig.add_subplot(1, 3, 2, projection=ccrs.PlateCarree())
ax.set_extent([118, 122, 28, 32],crs=ccrs.PlateCarree())
request = TDT_img()
ax.add_image(request, 9)
ax.set_title('天地图影像底图',fontsize=15)
gl = ax.gridlines(draw_labels=True, linewidth=1, color='k', alpha=0.5, linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
ax = fig.add_subplot(1, 3, 3, projection=ccrs.PlateCarree())
ax.set_extent([118, 122, 28, 32],crs=ccrs.PlateCarree())
request = TDT_ter()
ax.add_image(request, 9)
ax.set_title('天地图地形底图',fontsize=15)
gl = ax.gridlines(draw_labels=True, linewidth=1, color='k', alpha=0.5, linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
plt.show()
2、不同层级的底图
fig = plt.figure(figsize=(18, 12))
for i in range(6,9):
ax = fig.add_subplot(1, 3, i-5, projection=ccrs.PlateCarree())
ax.set_extent([120.4, 122.1, 30.6, 32.1],crs=ccrs.PlateCarree())
request = TDT_img()
ax.add_image(request, i)
ax.set_title('Level='+str(i),fontsize=15)
gl = ax.gridlines(xlocs=np.arange(120.5, 122.5, 0.5),
ylocs=np.arange(30, 32.5, 0.5),
draw_labels=True,linewidth = 0.5,color='k',
alpha=0.5,linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
plt.show()
参考:
- https://my.oschina.net/u/4581316/blog/4396806
- http://bbs.06climate.com/forum.php?mod=viewthread&tid=89165
- Java实现的一个编号生成器工具类——5种方法
- 【机器学习】有趣的机器学习:最简明入门指南
- 不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD
- 海量数据处理利器之布隆过滤器
- ORM查询语言(OQL)简介--概念篇
- Discuz! 任意文件删除漏洞重现及分析
- .NET DLR 上的IronScheme 语言互操作&&IronScheme控制台输入中文的问题
- Java中Map相关的6大问题——每个开发人员都要注意
- android service 学习(下)
- 混淆漏洞CVE-2017-0213技术分析
- android service 学习(上)
- 黑帽SEO剖析之隐身篇
- Java中如何判断一个字符串是Java代码还是英文呢?
- 将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【LeetCode两题选手】算法类题目(7.27)
- 【奇技淫巧】-- 走地图的不同路径
- 【奇技淫巧】-- 搜索旋转数组
- 【奇技淫巧】-- 原地旋转链表
- 【奇技淫巧】-- 盛水最多的容器
- 【leetcode两题选手】MySQL类题目(八)
- 【leetcode两题选手】MySQL类题目(七)
- 【leetcode两题选手】MySQL类题目(六)
- 【leetcode两题选手】MySQL类题目(五)
- 【leetcode两题选手】MySQL类题目(四)
- 【leetcode两题选手】MySQL类题目(三)
- 【leetcode两题选手】MySQL类题目(二)
- 剑指offer(01-03)题解
- mybatis动态sql之分支选择(学习choose、when、otherwise标签)
- 前后端分离使用pagehelper