Matlab下地理热度图的绘制

来源:互联网 发布:centos 安装mysql pdo 编辑:程序博客网 时间:2024/05/04 19:38

    Matlab自带有强大的Mapping工具箱,但网上的相关信息较少,本文通过分享Matlab下地理热度图的绘制方法,介绍Matlab地理工具箱的部分使用方法。

    本文使用的数据是我国三大运营商的部分移动基站位置数据,格式为(lngt,lat)。我们将地图分割分等大小的地理栅格(Grid),Matlab里称为Raster,通过统计每个栅格内的基站数量,得到基站的热度分布,如下图所示。

    

    算法的实现代码如下:

clearclose allclcload BSposition.mat %基站数据, 存储在result中,格式为(lngt,lat)% 将每度分割成的网格数量,取20相当于3min一个网格Scale=20; China=shaperead('maps/bou1_4p.shp','UseGeoCoords',true); %读入中国的国界文件shp文件lat=[guo.Lat];lon=[guo.Lon];[Z,refvec]=vec2mtx(lat,lon,Scale,'filled');%得到中国的国土栅格图Z,refvec 是一个三元素的参考向量,表示为[cells/degree north-latitude west-longitude],用于将经纬度值转换为网格的行列号% 构建初始热度图heat,热度值均为0heat=zeros(size(Z,1),size(Z,2));BS_lon=result(i,1);BS_lat=result(i,2);[latin,lonin]=filterm(BS_lat,BS_lon,map,refvec,1); %将国土范围外的基站过滤掉[row,col]=setpostn(map,refvec,latin,lonin);num_result=numel(latin); %将经纬度值转换为网格的行列号,for i=1:num_result    heat(row,col)=heat(row,col)+1;              end         %displayheat1=sqrt(sqrt(heat)); % 加强显示效果figureworldmap(Z,refvec);meshm(heat2,refvec);colormap('hot');

最后可以给热度图加上省界
sheng=shaperead('bou2_4l.shp','UseGeoCoords',true); %读入省界shp文件hold ongeoshow(sheng,'Color','w');

也可使用普通命令(非地图命令)显示结果

[lat_c,lon_c]=meshgrat(Z,refvec);gca=pcolor(lon_c,lat_c,heat2);colormap('hot');set(gca,'LineStyle','none');hold ongeoshow(sheng,'Color','w');axis([73,136,17,54]);

结果如下图所示

本算法中使用到的基站数据、国界和省界shp文件,均可从网上找到。

    



0 0
原创粉丝点击