Basemap绘制地图

2024-06-12 19:48
文章标签 绘制地图 basemap

本文主要是介绍Basemap绘制地图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章转自:http://blog.csdn.net/ouening/article/details/55227364

使用folium实现中国地图绘制,文章链接:

python/folium绘制中国人口数量热力图(HeatMap)


今天发现另一个软件库folium可以实现对openstreetmap的调用,参考链接http://blog.csdn.net/qq_14906811/article/details/74906275 ,下面是操作步骤:


  • 下载2015Cities-CHINA.xlsx ,包含中国各城市的经纬度,人口数量,GDP,自己网上搜索整理,数据可能过时了,和维基百科查到的数据不太对,但是拿来写个小程序还是足够的)
  • 安装folium

pip3 install folium

  • 代码实现
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 23 20:19:47 2017@author: 周文青
"""import numpy as np
import pandas as pd
import seaborn as sns
import folium
import webbrowser
from folium.plugins import HeatMap
# posi=pd.read_csv("D:\\Files\\datasets\\CitiesLatLon_China.csv")posi=pd.read_excel("2015Cities-CHINA.xlsx")num = 10lat = np.array(posi["lat"][0:num])                        # 获取维度之维度值
lon = np.array(posi["lon"][0:num])                        # 获取经度值
pop = np.array(posi["pop"][0:num],dtype=float)    # 获取人口数,转化为numpy浮点型
gdp = np.array(posi["GDP"][0:num],dtype=float)    # 获取人口数,转化为numpy浮点型data1 = [[lat[i],lon[i],pop[i]] for i in range(num)]    #将数据制作成[lats,lons,weights]的形式map_osm = folium.Map(location=[35,110],zoom_start=5)    #绘制Map,开始缩放程度是5倍
HeatMap(data1).add_to(map_osm)  # 将热力图添加到前面建立的map里file_path = r"D:\Files\python\地图\人口.html"
map_osm.save(file_path)     # 保存为html文件webbrowser.open(file_path)  # 默认浏览器打开

  • 结果: 
    这里写图片描述


这篇博文主要实现用Pyhon,Matplotlib/Basemap绘制中国地图,主要是各省份行政图(轮廓图),地形图和人口分布图,其中人口分布可以嵌入到上述图形中。

参考链接: 
(1)https://www.zhihu.com/question/49669755 
(2)http://basemaptutorial.readthedocs.io/en/latest/backgrounds.html#fillcontinents

1、数据准备: 
(1)到http://www.gadm.org/download 下载中国shapefile格式的资料,有读者反应进去不了该网站,可以在我的github下下载https://github.com/ouening/python-code/tree/master/resources下载后的文件名为CHN_adm_shp.zip ,解压后如图: 
这里写图片描述 
主要用到的文件是CHN_adm1.shp,另外CHM_adm1.csv 可以用notepad打开查看一下文件内容

(2)2015Cities-CHINA.xlsx ,包含中国各城市的经纬度,自己网上搜索整理,数据可能过时了,和维基百科查到的数据不太对,但是拿来写个小程序还是足够的) 
xlsx可以用excel打开查看一下: 
这里写图片描述 
在python中可以导入pandas模块,使用read_excel() 函数方便读取文件

basemap绘图常用函数: 
这里写图片描述 
basemap地图背景设置函数: 
这里写图片描述

更多详细的函数介绍请参考

http://matplotlib.org/basemap/users/geography.html

程序1,各省份轮廓图

import timestart = time.clock()from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])map = Basemap(llcrnrlon=80.33, llcrnrlat=3.01, urcrnrlon=138.16, urcrnrlat=56.123,resolution='h', projection='cass', lat_0 = 42.5,lon_0=120,ax=ax1)shp_info = map.readshapefile("D:\\GoogleDownload\\CHN_adm_shp\\CHN_adm1",'states',drawbounds=True) # CHN_adm1的数据是中国各省区域for info, shp in zip(map.states_info, map.states):proid = info['NAME_1']  # 可以用notepad打开CHN_adm1.csv文件,可以知道'NAME_1'代表各省的名称if proid == 'Guangdong':poly = Polygon(shp,facecolor='g',edgecolor='c', lw=3) # 绘制广东省区域ax1.add_patch(poly)map.shadedrelief() # 绘制阴暗的浮雕图map.drawcoastlines()
end=time.clock()
print(end-start)
plt.show()

这里写图片描述

程序2,地形图

import timestart = time.clock()
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import pandas as pd
import numpy as np
posi=pd.read_excel("D:\\Files\\datasets\\2015Cities-CHINA.xlsx") #读取中国城市数据
lat = np.array(posi["lat"][0:120])                        # 获取维度之维度值
lon = np.array(posi["lon"][0:120])                        # 获取经度值
pop = np.array(posi["pop"][0:120],dtype=float) 
size=(pop/np.max(pop))*100  map = Basemap(llcrnrlon=80.33, 
              llcrnrlat=3.01, 
              urcrnrlon=138.16, 
              urcrnrlat=56.123,
             resolution='h', projection='cass', lat_0 = 42.5,lon_0=120)map.readshapefile("D:\\GoogleDownload\\CHN_adm_shp\\CHN_adm1",'states',drawbounds=True)map.etopo() # 绘制地形图,浮雕样式map.drawcoastlines()x,y = map(lon[2],lat[2]) # 北京市坐标,经纬度坐标转换为该map的坐标a,b = map(lon,lat)# map.scatter(a,b,s=size) # 取消注释此行即可获得中国各地区人口分布示意图map.scatter(x,y,s=200,marker='*',facecolors='r',edgecolors='r') # 绘制首都end=time.clock()print(end-start)plt.show()
  • 这里写图片描述

程序3,人口分布图


import urllib
import numpy as np
import matplotlib
matplotlib.rcParams['toolbar'] = 'None'
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from  matplotlib.animation import FuncAnimation
import pandas as pd
import seaborn as sns# posi=pd.read_csv("D:\\Files\\datasets\\CitiesLatLon_China.csv")posi=pd.read_excel("D:\\Files\\datasets\\2015Cities-CHINA.xlsx")lat = np.array(posi["lat"][0:120])                        # 获取维度之维度值
lon = np.array(posi["lon"][0:120])                        # 获取经度值
pop = np.array(posi["pop"][0:120],dtype=float)    # 获取人口数,转化为numpy浮点型
gdp = np.array(posi["GDP"][0:120],dtype=float)    # 获取人口数,转化为numpy浮点型size=(pop/np.max(pop))*100    # 绘制散点图时图形的大小,如果之前pop不转换为浮点型会没有大小不一的效果# size=(gdp/np.max(gdp))*100    # 绘制散点图时图形的大小,如果之前pop不转换为浮点型会没有大小不一的效果map = Basemap(projection='stere', 
              lat_0=35, lon_0=110,
              llcrnrlon=82.33, 
              llcrnrlat=3.01, 
              urcrnrlon=138.16, 
              urcrnrlat=53.123,resolution='l',area_thresh=10000,rsphere=6371200.)map.drawcoastlines()   
map.drawcountries()    
map.drawcounties()
map.readshapefile("D:\\GoogleDownload\\CHN_adm_shp\\CHN_adm1",'states',drawbounds=True)
map.drawmapboundary()parallels = np.arange(0.,90,10.) 
map.drawparallels(parallels,labels=[1,0,0,0],fontsize=10) # 绘制纬线meridians = np.arange(80.,140.,10.)
map.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10) # 绘制经线x,y = map(lon,lat)# map.scatter(x,y,edgecolors='r',facecolors='r',marker='*',s=320)map.scatter(x,y,s=size)plt.title("Population Distribution in China")
plt.show()

这里写图片描述

这篇关于Basemap绘制地图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055166

相关文章

解决pyechart模块绘制地图无数据

解决pyechart模块绘制地图无数据 在绘制地图发现没有数据 错误原因: 传入数据中的省份名称不规范 例如: data = [("北京", 99),("上海", 199),("湖南", 299),("台湾", 399),("广东", 499)] 解决办法: 使用此函数,把传入地图的数据传入此函数进行处理(返回规范后的数据) 函数使用语法:data=norm_province(data

Python学习日志02-安装篇 basemap, eofs, python3环境

anaconda安装之后,把资源改到国内镜像 Anaconda安装成功之后,我们需要修改其包管理镜像为国内源。 Tsinghua Open Source Mirror 简单来说就是在cmd中分别运行这两个命令就好了。 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/co

【Mars3d】config.json中的蓝色底图map.basemap = 2017代码实现

本身的地图效果: Mars3d的蓝色地图效果: 关键代码: basemaps: [{name: "高德电子",icon: "img/basemaps/gaode_vec.png",type: "gaode",layer: "vec",show: true,invertColor: true,filterColor: "#4e70a6",brightness: 0.6,

Anaconda中 安装basemap包

Basemap 是matplotlib子包,也是python中最常用、最方便的地理数据可视化工具之一。使用传统python安装包的方法(pip install basemap 或者conda install basemap)经常报错,提示结果为Python 2.7 basemap和Python 3.6冲突(图),尽管2.7非常经典且世面大多数资料仍然是基于2.X版本,但官方已经宣布2.X版本只维护

Pixi绘制地图和小车

之前已经用Pixi绘制出了各种图形以及通过图片绘制精灵,这节用pixi绘制网格地图,并通过图片制作一个Sprite,让这个Sprite在网格地图上运动。首先需要在页面中添加一个div用来后期展示canvas的画布,并将此div实例化为PIXI的Application,作为接下来使用的stage, <div ref="pixiContainer" style="width: 100

python番外(2)——Basemap安装

Ubuntu下安装Basemap包,第八章及后续内容会用到此包。 步骤一:下载basemap.tar.gz 如下网址: https://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/ 下载想要的版本。 到目录下解压: $ tar zxvf basemap-1.0.7.tar.gz 步骤二:安装GOES li

使用Python的netCDF4和matplotlib.basemap包进行气象数据的可视化

首先,安装netCDF4和Basemap,Windows下和Linux下会稍微有些不一样,请自行百度。 NetCDF4:https://github.com/Unidata/netcdf4-python Basemap:http://matplotlib.org/basemap/users/installing.html 下面是一个示例代码: from netCDF4 import Dat

超简单的canvas绘制地图

本文使用geojson数据,通过缩放和平移把地图的地理坐标系转换canvas的屏幕坐标系,然后将转换后的数据绘制到canvas上。     首先要计算数据的最大最小值,遍历所有坐标点的最大最小经纬度。在这个步骤要注意坐标点是否都遍历到,因为数据中可能会有多面和洞的存在。     第二步就是转换坐标系,地理坐标系转换canvas的屏幕坐标系。为了让地图能完整在页面展示,我们要有数据的最大最小

sf | 使用plot函数绘制地图

前面已经介绍过绘图基础包graphics中的plot函数是一个比较全能的函数,本篇就介绍如何使用plot函数绘制地图。在这里,plot是一个经过sf改装过的函数,但除了新增几个与地图相关的参数外,与原本用法差别并不大。 首先加载sf包,将plot(x, y, ...)中的x参数设置为sf对象,y缺省就可以绘制出一张地图。sf对象主要包括下图几种类型: 如果sf对象是点要素,那么就可以调用plo

R语言学习笔记:绘制地图

在R中画地图先从简单的maps包开始。 library("maps") 在这个maps包中有一些数据集,用命令data(package=”maps”),可以看到如下数据: canada.cities          Database of Canadian cities county.fips            FIPS county codes for US County Map co