【地理信息可视化】basemap(cartopy)+geopandas显示地图-01

import warnings
warnings.filterwarnings('ignore')

import os

import numpy as np
from scipy.stats import norm
import pandas as pd

import seaborn as sns
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import cartopy.crs as ccrs
import geopandas as gpd
import cartopy.io.shapereader as shpreader
from shapely.geometry import Polygon
from matplotlib.patches import Polygon as mpl_polygon
import cartopy.feature as cfeature

地理边界

国边界

country_CN = gpd.read_file('ChinaAdminDivisonSHP/1. Country/country.shp', encoding='utf-8')  # 用高德最新API
# country_CN = country_CN.to_crs("epsg:3857")  # 墨卡托
country_CN.head()
cn_adcode cn_name geometry
0 100000 中华人民共和国 MULTIPOLYGON (((112.06067 3.86216, 112.06139 3...

省边界

province_CN = gpd.read_file('ChinaAdminDivisonSHP/2. Province/province.shp', encoding='utf-8')
# province_CN = province_CN.to_crs("epsg:3857")  # 墨卡托
province_CN.head()
pr_adcode pr_name cn_adcode cn_name geometry
0 110000 北京市 100000 中华人民共和国 POLYGON ((116.77565 40.02168, 116.77456 40.019...
1 120000 天津市 100000 中华人民共和国 POLYGON ((117.84713 39.40774, 117.84725 39.407...
2 130000 河北省 100000 中华人民共和国 MULTIPOLYGON (((118.27675 38.98087, 118.27262 ...
3 140000 山西省 100000 中华人民共和国 POLYGON ((110.61098 34.60730, 110.59450 34.603...
4 150000 内蒙古自治区 100000 中华人民共和国 POLYGON ((124.52522 48.14594, 124.52310 48.145...

市边界

city_CN = gpd.read_file('ChinaAdminDivisonSHP/3. City/city.shp', encoding='utf-8')
# city_CN = city_CN.to_crs("epsg:3857")  # 墨卡托
city_CN.head()
ct_adcode ct_name pr_adcode pr_name cn_adcode cn_name geometry
0 110100 北京城区 110000 北京市 100000 中华人民共和国 POLYGON ((115.88575 40.21880, 115.88619 40.219...
1 120100 天津城区 120000 天津市 100000 中华人民共和国 POLYGON ((117.84713 39.40774, 117.84725 39.407...
2 130100 石家庄市 130000 河北省 100000 中华人民共和国 POLYGON ((113.83957 38.75839, 113.84087 38.757...
3 130200 唐山市 130000 河北省 100000 中华人民共和国 MULTIPOLYGON (((118.27675 38.98087, 118.27262 ...
4 130300 秦皇岛市 130000 河北省 100000 中华人民共和国 MULTIPOLYGON (((119.43834 39.78659, 119.43843 ...

区线边界

district_CN = gpd.read_file('ChinaAdminDivisonSHP/4. District/district.shp', encoding='utf-8')  # 用高德最新的保险一下,前面的有误
district_CN = district_CN.to_crs("epsg:3857") # 墨卡托
district_CN.head()
dt_adcode dt_name ct_adcode ct_name pr_adcode pr_name cn_adcode cn_name geometry
0 110101 东城区 110100 北京城区 110000 北京市 100000 中华人民共和国 POLYGON ((12956215.380 4860265.340, 12956417.5...
1 110102 西城区 110100 北京城区 110000 北京市 100000 中华人民共和国 POLYGON ((12956810.382 4861461.271, 12956736.8...
2 110105 朝阳区 110100 北京城区 110000 北京市 100000 中华人民共和国 MULTIPOLYGON (((12962478.548 4847709.502, 1296...
3 110106 丰台区 110100 北京城区 110000 北京市 100000 中华人民共和国 POLYGON ((12960395.761 4841543.850, 12960396.7...
4 110107 石景山区 110100 北京城区 110000 北京市 100000 中华人民共和国 POLYGON ((12929933.961 4864988.608, 12930138.2...
district_CN.tail()
dt_adcode dt_name ct_adcode ct_name pr_adcode pr_name cn_adcode cn_name geometry
2871 820004 大堂区 820000 澳门特别行政区 820000 澳门特别行政区 100000 中华人民共和国 POLYGON ((12639324.746 2530934.847, 12638911.4...
2872 820005 风顺堂区 820000 澳门特别行政区 820000 澳门特别行政区 100000 中华人民共和国 POLYGON ((12638470.703 2533062.510, 12638492.2...
2873 820006 嘉模堂区 820000 澳门特别行政区 820000 澳门特别行政区 100000 中华人民共和国 POLYGON ((12640225.654 2529452.013, 12639731.3...
2874 820007 路凼填海区 820000 澳门特别行政区 820000 澳门特别行政区 100000 中华人民共和国 POLYGON ((12640764.107 2526565.564, 12640801.1...
2875 820008 圣方济各堂区 820000 澳门特别行政区 820000 澳门特别行政区 100000 中华人民共和国 POLYGON ((12640823.329 2524414.206, 12640705.4...

九段线

nine_dotted_line = gpd.read_file('ChinaAdminDivisonSHP/5. NineDot/china_nine_dotted_line.shp', encoding='utf-8')
# nine_dotted_line = nine_dotted_line.to_crs("epsg:3857") # 墨卡托
nine_dotted_line.head()
ACC BOUND_L_ BOUND_L_ID BST FNODE_ F_CODE GEO_CODE LENGTH LPOLY_ RPOLY_ TNODE_ USE geometry
0 0 9800 9824 0 0 FA000 61010 1.194710 0 0 0 23 LINESTRING (109.30151 16.19954, 109.30843 16.1...
1 0 9801 9825 0 0 FA000 61010 1.042980 0 0 0 23 LINESTRING (110.32325 12.24050, 110.32273 12.2...
2 0 9802 9826 0 0 FA000 61010 1.075450 0 0 0 23 LINESTRING (108.30202 6.01089, 108.29263 6.036...
3 0 9803 9827 0 0 FA000 61010 0.959055 0 0 0 23 LINESTRING (122.50662 23.46772, 122.64263 24.0...
4 0 9804 9828 0 0 FA000 61010 1.141370 0 0 0 23 LINESTRING (121.91169 21.69752, 121.90547 21.6...

省中心

df_pcenter = pd.read_csv('ChinaAdminDivisonSHP/省市中心坐标位置LBC各省市中心.csv', encoding='gbk')
df_pcenter.head()
所在省 城市名 纬度 经度 Unnamed: 4
0 安徽省 合肥 31.52 117.17 NaN
1 安徽省 安庆 30.31 117.02 NaN
2 安徽省 蚌埠 32.56 117.21 NaN
3 安徽省 亳州 33.52 115.47 NaN
4 安徽省 巢湖 31.36 117.52 NaN

世界地图

fig = plt.figure(figsize=(10, 6))
ax = plt.axes(projection=ccrs.PlateCarree())
ax.coastlines()
plt.show()

【地理信息可视化】basemap(cartopy)+geopandas显示地图-01_第1张图片

中国地图

nine_dotted_line['geometry'].tolist()
[,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ,
 ]
# 创建地图投影
crs = ccrs.LambertConformal(central_longitude=105, central_latitude=35, standard_parallels=(30, 60))
# 创建子图
fig, ax = plt.subplots(figsize=(16, 9), subplot_kw={'projection': crs})
# 绘制边界
ax.add_geometries(country_CN['geometry'], crs=ccrs.PlateCarree(), edgecolor='black', facecolor='none')
# 绘制九段线
for line in nine_dotted_line['geometry'].tolist():
    ax.add_geometries(line, crs=ccrs.PlateCarree(), edgecolor='black', facecolor='none')
# 设置地图范围
ax.set_extent([73, 135, 2.5, 53], crs=ccrs.PlateCarree())
# 显示图像
plt.show()

【地理信息可视化】basemap(cartopy)+geopandas显示地图-01_第2张图片

西安地图

city_CN.head()
ct_adcode ct_name pr_adcode pr_name cn_adcode cn_name geometry
0 110100 北京城区 110000 北京市 100000 中华人民共和国 POLYGON ((115.88575 40.21880, 115.88619 40.219...
1 120100 天津城区 120000 天津市 100000 中华人民共和国 POLYGON ((117.84713 39.40774, 117.84725 39.407...
2 130100 石家庄市 130000 河北省 100000 中华人民共和国 POLYGON ((113.83957 38.75839, 113.84087 38.757...
3 130200 唐山市 130000 河北省 100000 中华人民共和国 MULTIPOLYGON (((118.27675 38.98087, 118.27262 ...
4 130300 秦皇岛市 130000 河北省 100000 中华人民共和国 MULTIPOLYGON (((119.43834 39.78659, 119.43843 ...
xiann = city_CN[city_CN['ct_name']=='西安市']
xiann
ct_adcode ct_name pr_adcode pr_name cn_adcode cn_name geometry
307 610100 西安市 610000 陕西省 100000 中华人民共和国 MULTIPOLYGON (((109.16775 33.80217, 109.16661 ...
# 获取几何形状的边界坐标  
bounds = xiann['geometry'].bounds  
bounds
minx miny maxx maxy
307 107.663753 33.693877 109.822432 34.743103
# 创建地图投影
crs = ccrs.LambertConformal(central_longitude=107.94, central_latitude=33.94, standard_parallels=(34, 60))
# 创建子图
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={'projection': crs})
ax.add_geometries(xiann['geometry'], crs=ccrs.PlateCarree(), edgecolor='black', facecolor='none')
# 设置地图范围
ax.set_extent([bounds['minx'], bounds['maxx'], bounds['miny'], bounds['maxy']], crs=ccrs.PlateCarree())
# 显示图像,为毛就不能大一点地图?
plt.show()

【地理信息可视化】basemap(cartopy)+geopandas显示地图-01_第3张图片

标记点

center = df_pcenter[df_pcenter['城市名']=='西安']
lon = float(center['经度'].values[0])
lat = float(center['纬度'].values[0])
# 创建地图投影
crs = ccrs.LambertConformal(central_longitude=107.94, central_latitude=33.94, standard_parallels=(34, 60))
# 创建子图
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={'projection': crs})
ax.add_geometries(xiann['geometry'], crs=ccrs.PlateCarree(), edgecolor='black', facecolor='none')
# 在地图上绘制红色地点标记
ax.scatter(lon, lat, color='red', s=50, transform=ccrs.PlateCarree())
# 设置地图范围
ax.set_extent([bounds['minx'], bounds['maxx'], bounds['miny'], bounds['maxy']], crs=ccrs.PlateCarree())
# 显示图像,为毛就不能大一点地图?
plt.show()

【地理信息可视化】basemap(cartopy)+geopandas显示地图-01_第4张图片

你可能感兴趣的:(05_数据可视化,numpy,scipy)