中国地图

省级行政边界

来自中国科学院资源环境科学数据中心(RESDC)2015年中国省级行政边界数据,通过ArcGIS转为WGS84地理坐标系。包含南海诸岛,不包含十段线

领土边界

将省级行政边界通过ArcGIS的Data Management Tools->Generalization->Dissolve合并为一个多边形图层shp。包含南海诸岛,不包含十段线

十段线

来自GMT中文社区的中国国界、省界、十段线以及南海诸岛dat文件,通过Python写为线图层shp后,通过ArcGIS选中十段线另存为一个线图层shp

全球国家行政边界数据

来自RESDC全球国家行政边界数据,通过ArcGIS改为WGS84地理坐标系

说明

  • GMT中文社区提供的中国国界、省界、十段线以及南海诸岛dat文件中省界之间有交错,所以没有采取其省界

  • 十段线参考了MeteoAI(zhangqibot)的九段线地图,该地图省级行政边界与RESDC的省级行政边界重合,九段线与GMT中文社区提供的中国国界、省界、十段线以及南海诸岛dat文件的十段线重合(缺少台湾东侧那一根),以此判断GMT中文社区提供的dat文件中十段线的可靠性

  • GMT中文社区提供的仅包含十段线数据dat文件里有13段线,有点奇怪,所以没深究,直接手动从其提供的中国国界、省界、十段线以及南海诸岛dat文件中提取所需的十段线

  • cartopy自带的全球国家行政边界数据和我国领土主张不符(很明显的差别如藏南等地区),所以中国地图和全球国家行政边界数据均选用来自RESDC比较规范。有个小问题是RESDC的中国领土边界和全球国家行政边界数据在中国国境线上还是有点交错的,可能是分辨率不同的原因?但是不放大看看不出来

网址

Python绘图示例

demo.png

import numpy as np
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.io.shapereader import Reader as shpreader
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker


extent = [70, 140, 0, 60]
Chinese_land_territory_path = r'.\Chinese_land_territory\Chinese_land_territory'
Chinese_10dash_line_path = r'.\Chinese_10-dash_line\Chinese_10-dash_line'
world_countries_path = r'.\world_countries\world_countries'
# 创建坐标系
prj = ccrs.PlateCarree()
fig = plt.figure(figsize=(10, 8), dpi=350)
ax = fig.subplots(1, 1, subplot_kw={
    
    'projection': prj})
ax.set_extent(extent, crs=prj)
# 绘制中国陆地领土边界
Chinese_land_territory = shpreader(Chinese_land_territory_path).geometries()
Chinese_land_territory = cfeat.ShapelyFeature(Chinese_land_territory,
                                              prj, edgecolor='k',
                                              facecolor='none')
ax.add_feature(Chinese_land_territory, linewidth=1)
# 绘制中国十段线
Chinese_10dash_line = shpreader(Chinese_10dash_line_path).geometries()
Chinese_10dash_line = cfeat.ShapelyFeature(Chinese_10dash_line,
                                           prj, edgecolor='r')
ax.add_feature(Chinese_10dash_line, linewidth=2)
# 绘制世界各国领土边界
world_countries = shpreader(world_countries_path).geometries()
world_countries = cfeat.ShapelyFeature(world_countries,
                                       prj, edgecolor='k', alpha=0.3,
                                       facecolor='none')
ax.add_feature(world_countries, linewidth=0.5)
# 添加自带地形数据
ax.stock_img()
# 绘制网格点
gl = ax.gridlines(crs=prj, draw_labels=True, linewidth=1.2, color='k',
                  alpha=0.5, linestyle='--')
gl.xlabels_top = False  # 关闭顶端的经纬度标签
gl.ylabels_right = False  # 关闭右侧的经纬度标签
gl.xformatter = LONGITUDE_FORMATTER  # x轴设为经度的格式
gl.yformatter = LATITUDE_FORMATTER  # y轴设为纬度的格式
gl.xlocator = mticker.FixedLocator(np.arange(extent[0], extent[1]+10, 10))
gl.ylocator = mticker.FixedLocator(np.arange(extent[2], extent[3]+10, 10))
fig.savefig('demo.png')

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/modabao/article/details/103027316