CNMAPS

一、安装

查看另一篇帖子CNMAPS安装(踩坑记录)-CSDN博客,踩坑较多,容易崩。

二、常用类和函数

1、classcnmaps.maps.MapPolygon(shapely.geometry.MultiPolygon

地图多边形类

它是基于shapely.geometry.MultiPolygon的自定义类, 并实现了对于加号操作符的支持.

(1)drop_inner_duplicate(map_polygon)

地图对象的自我纠正,剔除内含的多余多变形,常见于多个地图多边形对象合并时,

        参数:  map_polygon (cnmaps.maps.MapPolygon) – 地图边界对象, 可以通过 get_adm_maps() 获取

        返回:经过纠正后的MapPolygon对象

        返回类型:cnmaps.maps.MapPolygon

(2)get_extent(buffer=2)

获取坐标范围

        参数:buffer (float or int) – 外扩缓冲边缘, 单位为°, 该值越大, 所取的范围越大. 默认为 2.

        返回:坐标范围点, 该值可直接传入 ax.set_extent() 使用

        返回类型:tuple

2、cnmaps.maps.get_adm_names(province: str = Nonecity: str = Nonedistrict: str = Nonelevel: str = '省'country: str = '中华人民共和国'source: str = '高德')

获取行政名称

参数:       

               province (str) – 省/自治区/直辖市/行政特区中文名, 必须为全称, 例如查找河北省应收入 '河北省' 而非 '河北' . 默认为 None

                city (str) – 地级市中文名, 必须为全称, 例如查找北京市应输入 '北京市' 而非 '北京' . 默认为 None.

                district (str) – 区/县中文名, 必须为全称. 默认为 None.

                level (str) – 边界等级, 目前支持的等级包括 '省''市''区县'. 其中 '省' 级包括直辖市、特区等; '市' 级为地级市, 若为直辖市, 则名称与 '省' 级相同, 比如北京市的省级和市级都是 '北京市' ; '区' 和 '县' 属于同一级别的不同表达形式. 默认为 '省'.

                country (str) – 国家名称, 必须为全称. 默认为 '中华人民共和国'.

                source (str) – 数据源. 默认为 '高德'.

返回:    满足条件的名称列表

返回类型:  list

3、cnmaps.maps.get_adm_maps(province: str = Nonecity: str = Nonedistrict: str = Nonelevel: str = '省'country: str = '中华人民共和国'source: str = '高德'db: str = DB_FILEengine: str = Nonerecord: str = 'all'only_polygon: bool = False*args**kwargs)

获取行政地图的边界对象

参数

  • province (str) – 省/自治区/直辖市/行政特区中文名, 必须为全称, 例如查找河北省应收入 '河北省' 而非 '河北' . 默认为 None.

  • city (str) – 地级市中文名, 必须为全称, 例如查找北京市应输入 '北京市' 而非 '北京' . 默认为 None.

  • district (str) – 区/县中文名, 必须为全称. 默认为 None.

  • level (str) – 边界等级, 目前支持的等级包括 '省''市''区县'. 其中 '省' 级包括直辖市、特区等; '市' 级为地级市, 若为直辖市, 则名称与 '省' 级相同, 比如北京市的省级和市级都是 '北京市' ; '区' 和 '县' 属于同一级别的不同表达形式. 默认为 '省'.

  • country (str) – 国家名称, 必须为全称. 默认为 '中华人民共和国'.

  • source (str) – 数据源. 默认为 '高德'.

  • db (str) – sqlite db文件路径. 默认从配置文件中取.

  • engine (str) – 输出引擎, 默认为None, 输出为list列表, 目前支持’geopandas’, 若为geopandas, 则返回GeoDataFrame对象. 默认为 None.

  • record (str) – 返回记录的形式, 选项包括 'all' 和 'first' ; 若为 'first' , 则无论查询结果又几条,仅返回第一条记录, 若为 'all' , 则返回全部数据, 若 engine==None 则返回list, 若 engine=='geopandas' , 则返回GeoDataFrame对象. 默认为 'all' .

  • only_polygon (bool) – 是否仅返回地图边界对象(MapPolygon), 若为 True 则返回结果为MapPolygon对象或以MapPolygon对象组合的list, 若为 False , 则返回的结果包含元信息, MapPolygon对象存储在 'geometry' 键中. 默认为 False .

返回:根据输入参数查找到的地图边界的元信息及边界对象

返回类型:GeoDataFrame or list

4、drawing

drawing模块主要存放与绘图相关的函数

(1)cnmaps.drawing.clip_contours_by_map(contoursmap_polygon)

使用地图边界对象对等值线对象进行裁剪

参数

  • contours (cartopy.mpl.contour.GeoContourSet) – 等值线对象, 该对象是调用 ax.contour() 或 ax.contourf() 方法的返回值,注意: 对象须带有投影信息

  • map_polygon (cnmaps.maps.MapPolygon) – 地图边界对象, 可以通过 get_adm_maps() 获取

 (2)cnmaps.drawing.clip_pcolormesh_by_map(meshmap_polygon)

使用地图边界对象对填色网格线对象进行裁剪

参数

  • mesh (cartopy.mpl.geocollection.GeoQuadMesh) – GeoQuadMesh对象, 该对象是调用 ax.pcolormesh() 方法的返回值,注意: 对象须带有投影信息

  • map_polygon (cnmaps.maps.MapPolygon) – 地图边界对象, 可以通过 get_adm_maps() 获取

(3)cnmaps.drawing.clip_clabels_by_map(clabel_textmap_polygon)

剪切clabel文本, 一般配合contour函数使用

  • 注意: 该函数仅对于cartopy>=0.19.0版本有效

    参数

  • clabel_text (matplotlib.text.Text) – matplotlib.text.Text对象, 由 clabel 函数返回

  • map_polygon (cnmaps.maps.MapPolygon) – 地图边界对象, 可以通过 get_adm_maps() 获取

cnmaps.drawing.draw_maps(maps**kwargs)

(4)绘制多个地图边界

参数

maps (list or GeoDataFrame) – 地图边界线对象

5、regions

(1)regions

模块主要存放组合后的边界对象

cnmaps.regions.region_polygons

区域性组合地图多边形数据字典,包含的键有:

东北地区、华北地区、华中地区、华南地区、华东地区、西南地区、西北地区、川渝、京津冀、江浙沪、长三角

6、sample

(1)sample

模块主要存放示例数据

cnmaps.sample.load_dem(area_name**kwargs)

参数

area_name (str) – 区域名称, 目前仅支持 '京津冀', 若为None则取全国. 默认为 None.

返回  (lons, lats, data)

三、例子

(1)绘制国界

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cnmaps import get_adm_maps, draw_maps

fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())
draw_maps(get_adm_maps(level='国'))
plt.show()

 

(2)省行政区

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cnmaps import get_adm_maps, draw_maps

fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())

draw_maps(get_adm_maps(level='省'), linewidth=0.8, color='k')

plt.show()

(3)合并边界

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cnmaps import get_adm_maps, draw_map

beijing = get_adm_maps(province='北京市', only_polygon=True, record='first')
tianjin = get_adm_maps(province='天津市', only_polygon=True, record='first')
hebei = get_adm_maps(province='河北省', only_polygon=True, record='first')

jingjinji = beijing + tianjin + hebei

fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())
draw_map(jingjinji)

plt.show()

 

(4)剪切填色等值线(contourf)图

未剪裁的:

剪裁的

from cnmaps import get_adm_maps, clip_contours_by_map, draw_map
from cnmaps.sample import load_dem
import numpy as np

lons, lats, data = load_dem()

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())
map_polygon = get_adm_maps(country='中华人民共和国', record='first', only_polygon=True)

cs = ax.contourf(lons, lats, data,
                cmap=plt.cm.terrain,
                levels=np.linspace(-2800, data.max(), 10),
                transform=ccrs.PlateCarree())

clip_contours_by_map(cs, map_polygon)
draw_map(map_polygon, color='k', linewidth=1)
#draw_maps(get_adm_maps(level='省'))
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值