请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2270|回复: 24

[经验总结] python如何调用天地图来绘制底图

[复制链接]

新浪微博达人勋

 成长值: 23280
发表于 2019-2-22 18:04:46 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 葫芦爷儿 于 2019-10-22 14:26 编辑

现在已经找到了解决办法,将求助帖改为经验总结在python调用这类地图作为底图,核心思路是:下载瓦片地图,拼接,当图片加载到figure中。

具体实现思路是:主要为两部分 1地图的使用 ;2python的使用
在1 地图的使用中分为: 1.1 利用说明、google浏览器开发者工具找到不同底图的瓦片调用方式 ;1.2 根据调用方式,申请api接口的key
在2 python的使用中分为:2.1 查找获取方式; 2.2 拼接方法; 2.3加载;但是发现cartopy已经有该功能,最简单的方式是在cartopy的基础上调整。

现在介绍1:
通过开发者工具发现了几类地图的调用, 具体看网址
天地图:
key:需要通过天地图官网申请 http://www.tianditu.gov.cn ,具体看网址
  1.         url = 'http://t1.tianditu.gov.cn/DataServer?T=vec_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, key)
复制代码
OSM: https://www.openstreetmap.org/#map=6/29.591/122.198
  1.         url = 'https://a.tile.openstreetmap.org/%s/%s/%s.png' % (z, x, y)
复制代码
Google:需要换成国内的
  1.         url = 'http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x=%s&y=%s&z=%s'% (x, y, z)
复制代码
海鸥地图:https://cn.gullmap.com
  1.         url = 'https://cn.gullmap.com/rt/%s/%s/%s.png'% (z,x, y, )
复制代码

现在介绍2:
在cartopy中增加函数调用,1找到修改哪里 2参考OSM()进行修改,建议在pycharm或git上先看该函数;3若在linxu里, conda env list 查看环境的路径即可
2019 1022修改:可以知道在 ../env/casename/lib/python3.6/site-packages/cartopy/io/img_tiles.py
'2019 1022修改前:可以知道在/lib/cartopy/io/img_tiles.py脚本中‘
可以在终端中,用
  1. >>> python
复制代码
现在找到img_tiles.py增加天地图的函数TDT
  1. class TDT(GoogleWTS):
  2.     def _image_url(self, tile):
  3.           x, y, z = tile
  4.           key = '自己申请'
  5.           # 文字 url = 'http://t1.tianditu.gov.cn/DataServer?T=cva_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, key)
  6.           url = 'http://t1.tianditu.gov.cn/DataServer?T=vec_w&x=%s&y=%s&l=%s&tk=%s' % (x, y, z, key)
  7.         return url
复制代码

类似的:
  1. class GoogleCN(GoogleWTS):
  2.      def _image_url(self, tile):
  3.           x, y, z = tile
  4.           url = 'http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x=%s&y=%s&z=%s'% (x, y, z)
  5.         return url
复制代码
现在就可以调用了,参考 https://ocefpaf.github.io/python4oceanographers/blog/2015/06/22/osm/参考网:https://github.com/SciTools/cartopy/blob/e2bbaa85b17e1c76cb6cc75c352a84dd387fc17b/lib/cartopy/io/img_tiles.py
各种地图的汇总参考:https://github.com/yaosailor/raster-collection 因为较早,有些有一定的调整。

GoogleMap.png



-------------2019 0223 以下是之前的求助----------
求助:因为作图需要行政区域作为底图,如何利用python调用天地图或百度地图,绘制底图。
       我尝试了cartopy,他利用开源地图的方式核心如下代码。但是有时候下载速度太慢,导致不能满足需要。
  1. class OSM(GoogleWTS):
  2.     # http://developer.mapquest.com/web/products/open/map for terms of use
  3.     def _image_url(self, tile):
  4.         x, y, z = tile
  5.         url = 'https://a.tile.openstreetmap.org/%s/%s/%s.png' % (z, x, y)
  6.         return url
复制代码
参考:https://github.com/SciTools/cart ... opy/io/img_tiles.py



下面是为了找画高精度地图参考的网址:
1 下载数据网址 https://www.naturalearthdata.com/downloads/10m-raster-data/10m-cross-blend-hypso/
2 如何调用Google osm shp绘制高精度地图,参考 https://ocefpaf.github.io/python4oceanographers/blog/2015/06/22/osm/
3  如何更换底图 参考: http://www.thomasguymer.co.uk/blog/2018/2018-01-15/
下载数据,将tif转换为png,写一个json说明文件

cartopy默认地图的地址
~/.local/share/cartopy/shapefiles/natural_earth/physical



评分

参与人数 2金钱 +20 贡献 +4 收起 理由
ytj584684235 + 20 + 2 很给力!
自行车大大爷 + 2 很给力!

查看全部评分

密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2019-2-24 19:25:01 来自手机 | 显示全部楼层
楼主真的太厉害了
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2019-2-25 09:25:25 | 显示全部楼层
不错不错
密码修改失败请联系qq:937062711
回复

使用道具 举报

新浪微博达人勋

发表于 2019-2-25 09:27:13 来自手机 | 显示全部楼层
学习了,感谢楼主分享
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2019-2-26 13:26:02 | 显示全部楼层
一头雾水,大神
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2019-2-27 00:38:55 | 显示全部楼层
这个上面可以叠加等值线或者阴影图嘛?
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2019-2-27 04:19:53 | 显示全部楼层
This is so cool. I stored it up.
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2019-2-27 08:40:46 | 显示全部楼层
能不能图里面的地面是English呢?
密码修改失败请联系qq:937062711

新浪微博达人勋

 成长值: 23280
发表于 2019-2-27 23:33:19 | 显示全部楼层
tyfcwgl 发表于 2019-2-27 00:38
这个上面可以叠加等值线或者阴影图嘛?

可以的,这就是个底图而已,画图参考cartopy或上面给的网址2 如何调用Google osm shp绘制高精度地图,参考 https://ocefpaf.github.io/python ... log/2015/06/22/osm/
密码修改失败请联系qq:937062711

新浪微博达人勋

 成长值: 23280
发表于 2019-2-27 23:35:43 | 显示全部楼层
931404656 发表于 2019-2-27 08:40
能不能图里面的地面是English呢?

好的,可能是url有区别,我之后找一下。
cartopy自带的Google(),如果不修改使用原来的那个地址,出来的是英文地图。
密码修改失败请联系qq:937062711
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表