• MATLAB—地图


    一、画亚洲地图

    1、worldmap()

    (1)

    clear all
    worldmap('World')

    clear all
    worldmap('World')%世界地图
    load coast %载入海岸线
    plotm(lat,long)%经纬度

    (2)

    clear all
    ax = worldmap('World');
    setm(ax, 'Origin', [0 180 0])%更改经度,从0到180再到0
    land = shaperead('landareas', 'UseGeoCoords', true);%陆地
    geoshow(ax, land, 'FaceColor', [0.5 0.7 0.5])

     

    clear all
    ax = worldmap('World');
    setm(ax, 'Origin', [0 180 0])%更改经度,从0到180再到0
    land = shaperead('landareas', 'UseGeoCoords', true);
    geoshow(ax, land, 'FaceColor', [0.5 0.7 0.5])
    lakes = shaperead('worldlakes', 'UseGeoCoords', true);
    geoshow(lakes, 'FaceColor', 'blue')
    rivers = shaperead('worldrivers', 'UseGeoCoords', true);
    geoshow(rivers, 'Color', 'blue')
    cities = shaperead('worldcities', 'UseGeoCoords', true);
    geoshow(cities, 'Marker', '.', 'Color', 'red')

    land = shaperead('landareas', 'UseGeoCoords', true)%陆地  后者参数x,y为经纬度
    geoshow(land, 'FaceColor', [0.5 0.7 0.5])

     (3)

    clear all
    worldmap([-50 50],[160 -30]) %载入范围
    
    load geoid %载入水准面数据
    geoshow(geoid, geoidrefvec, 'DisplayType', 'texturemap'); %画图显示
    
    load coast %载入海岸线
    geoshow(lat, long) %显示

    2、shaperead函数

     (1)

    clear all
    landareas = shaperead('landareas.shp','UseGeoCoords',true);
    axesm ('mercator', 'Frame', 'on', 'Grid', 'on','origin',[0 120 0]);
    geoshow(landareas,'FaceColor',[1 1 .5],'EdgeColor',[.6 .6 .6]);

     UseGeoCoords:可以选择为true或者false(默认),即是否使用地理结构(GeoStruts)。如果数据已经被投影了就选择false,如果还未被投影,可以选择true以生成投影。

     3、 geoshow的用法

    geoshow是用来显示地图数据的函数,非常重要,大部分的地图都使用该函数进行显示。

    (1)          基本用法:

                                1)              geoshow(lat,lon)直接输入经纬度,将以该经纬度为中心,生成一小片地图。

                                2)              geoshow(filename)直接输入地图文件名,生成该地图

                                3)              geoshow(_,Name,Value,)输入相关属性并设定参数,生成所需要的地图。

    (2)          常用属性:

                                1)              facecolor:定义了地图表面的颜色,需要输入三个参数且均在0至1之间。

                                2)              edgecolor:定义了海岸线边界的颜色,参数值同上。

    clear all
    geoshow('mapsou2_4p.shp','FaceColor','G')
    geoshow('mapshyd1_4p.shp','FaceColor','b')
    geoshow('mapshyd2_4p.shp','FaceColor','r')

    clear all
    ax=worldmap([29.5 30.5],[122 123]);%载入地图
    geoshow(ax,'mapsou2_4p.shp','FaceColor','G')%将边界线载入地图中

    舟山群岛附近

    (3)

    clear all
    figure
    worldmap('na');%北美地图
    states = shaperead('usastatehi', 'UseGeoCoords', true);%州界线
    symspec = makesymbolspec('Polygon', ...
       {'Name', 'Alaska', 'FaceColor', 'red'}, ...
       {'Name', 'Hawaii', 'FaceColor', 'red'}); %hawaii和alaska设置为红色
    geoshow(states, 'SymbolSpec', symspec,...
        'DefaultFaceColor', 'blue','DefaultEdgeColor', 'black');%边界黑色,表面颜色蓝色,

     (4)

    clear all
    load korea
    figure;
    worldmap(map, refvec)%空白地图
    geoshow(gca,map,refvec,'DisplayType','texturemap');%纹理贴图
    demcmap(map)
    S = shaperead('landareas','UseGeoCoords',true);
    geoshow([S.Lat], [S.Lon],'Color','black'); %边界设置为黑色

     ()

    clear all
    
    ax=worldmap('china'); % 使用worldmap的坐标轴作图
    setm(ax,'grid','off') % 关闭grid
    setm(ax,'frame','off') % 关闭边框
    setm(ax,'parallellabel','off') % 关闭坐标轴标记
    setm(ax,'meridianlabel','off') % 关闭坐标轴标记
    
    
    sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);
    geoshow(sheng); % 

    关闭边框,关闭坐标轴

    4、 makesymbolspec函数

    (1)

    clear all
    roads = shaperead('concord_roads.shp');
    mapshow(roads);
    

    clear all
    roads = shaperead('concord_roads.shp');
    geoshow(roads)
    

     (2)

    clear all
    roads = shaperead('concord_roads.shp');
    blueRoads = makesymbolspec('Line',{'Default','Color','r'});%红色
    mapshow(roads,'SymbolSpec',blueRoads);
    

     

    clear all
    roads = shaperead('concord_roads.shp');
    
    blueRoads = makesymbolspec('Line',{'Default','Color','r'});
    
    geoshow(roads,'SymbolSpec',blueRoads)
    

      

    (3)

    clear all
    roads = shaperead('concord_roads.shp');
    roadColors = ...
    makesymbolspec('Line',{'CLASS',2,'Color','r'},...
                          {'CLASS',3,'Color','g'},...
                          {'CLASS',6,'Color','b'},...
                          {'Default','Color','k'});
    mapshow(roads,'SymbolSpec',roadColors);
    

    clear all
    roads = shaperead('concord_roads.shp');
    roadColors = ...
    makesymbolspec('Line',{'CLASS',1,'Color','r'},...
                          {'CLASS',4,'Color','g'},...
                          {'CLASS',5,'Color','b'},...
                          {'Default','Color','k'});
    geoshow(roads,'SymbolSpec',roadColors);

    (4)

    roads = shaperead('concord_roads.shp');
    lineStyle = makesymbolspec('Line',...
     {'CLASS',[1 3], 'LineStyle',':'},...
     {'CLASS',[4 6],'LineStyle','-.'});
    mapshow(roads,'SymbolSpec',lineStyle);
    

     

     

    3、

    (1)美国分州颜色

    clear all
    ax = worldmap('USA');
    load coastlines
    geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
    

     

    美国地图轮廓

    clear all
    ax = worldmap('USA');
    load coastlines
    geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
    
    states = shaperead('usastatelo', 'UseGeoCoords', true);%州界线
    
    geoshow(ax, states, 'DisplayType', 'polygon')
    

    州默认颜色

    clear all
    ax = worldmap('USA');
    load coastlines
    geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
    
    states = shaperead('usastatelo', 'UseGeoCoords', true);%州界线
    faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ...
      polcmap(numel(states))}); % NOTE - colors are random,多边形,
    geoshow(ax, states, 'DisplayType', 'polygon','SymbolSpec', faceColors)

    (2)中国分省颜色

    clear all
    ax = worldmap('china');
    
    setm(ax,'grid','off') % 关闭grid
    setm(ax,'frame','off') % 关闭边框
    setm(ax,'parallellabel','off') % 关闭坐标轴标记,平行线
    setm(ax,'meridianlabel','off') % 关闭坐标轴标记,子午线
    
    states = shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);%州界线
    faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ...
      polcmap(numel(states))}); % NOTE - colors are random,多边形,
    geoshow(ax, states,'DisplayType', 'polygon', 'SymbolSpec', faceColors)
    

     

     

    clear all
    ax = worldmap('china');
    %load coastlines
    %geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
    
    %setm(ax,'grid','off') % 关闭grid
    %setm(ax,'frame','off') % 关闭边框
    %setm(ax,'parallellabel','off') % 关闭坐标轴标记,平行线
    %setm(ax,'meridianlabel','off') % 关闭坐标轴标记,子午线
    
    states = shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);%州界线
    faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ...
      polcmap(numel(states))}); % NOTE - colors are random,多边形,
    geoshow(ax, states,'DisplayType', 'polygon', 'SymbolSpec', faceColors)

     4、海拔高度的不同颜色显示

    %-- 分省中国地图在MATLAB中的画法 --%
    % Author: gaospecial@gmail.com
    % Date: 2012-6-5 14:04:01
    % 地图数据来源:国家基础地理信息系统网站
    % 人口数据来源:国家统计年鉴2011版
    %% 载入地图数据
    clear all
    % 载入各省的多边形数据
    sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);% 本文件下的边界省
    % 检查数据发现中午名称为乱码,可能是由于字符编码引起的,需要纠正文件导入时出现的乱码
    % 中文名称记录在相应的dbf文件中,可以使用Excel打开,并且不会出现乱码,截取其中的中文保存为文本文件
    % 然后在导入工作区,并将其保存为*.mat格式文件,随用随取。
    % 依次替换sheng数据中的乱码【算是变通之法,有谁知道更好的方法一定告诉我哦】
    load chinese_name.mat % 省,省会,主要城市的正确中文
    for i=1:length(sheng)
        sheng(i).NAME=sheng_chinese_name{i}; % 纠正中文显示错误
    end
    %unique(sheng_chinese_name) % 含有34个省(直辖市)的数据,合并相同的值
    length(sheng) % 共分为925个区块
    %% 使用importdata向导导入2011年全国31个省的人口数据
    % data为人口数目 textdata为省名称
    d=importdata('gaodu.txt');
    %d=importdata('renkou.txt');
    data=d.data; % 海拔高度
    textdata=d.textdata; % 相对应的省的名称
    %% 定义地图参数
    % 针对不同省份,分别设置不同的颜色(FaceColor),由人口数据决定颜色数据
    % 定义颜色
    k=128;  
    mycolormap=summer(k);
    % 生成不同区域按大小的颜色,按照人口数目多少分别指定不同的颜色
    % 人口越多,颜色越突出
    geoname={sheng.NAME}';%省的名字,925个
    max_data = max(data);
    n=length(data);
    mysymbolspec=cell(1,n); % 预定义变量可以加快处理速度
    
    %%
    %高度和颜色对应起来,然后省份和颜色对应起来,利用归一化排序,定位
    for i=1:n
        count=data(i);%高度
        mycoloridx=floor( k * count / max_data );
        mycoloridx(mycoloridx<1)=1;
        myprovince=textdata{i};%省,31个
        geoidx=strmatch(myprovince, geoname);%从925中挑31的位置
        if numel(geoidx) > 0
            province_name=geoname( geoidx(1) );
            mysymbolspec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( mycoloridx, :) };%省份和颜色对应
        end
    end
    %% 显示地图
    figure
    ax=worldmap('china'); % 使用worldmap的坐标轴作图
    setm(ax,'grid','off') % 关闭grid
    setm(ax,'frame','off') % 关闭边框
    setm(ax,'parallellabel','off') % 关闭坐标轴标记,平行线
    setm(ax,'meridianlabel','off') % 关闭坐标轴标记,子午线
    
    % 最关键的两个语句
    symbols=makesymbolspec('Polygon',{'default','FaceColor',[0.9 0.9 0.8],...
        'LineStyle','--','LineWidth',0.2,...
        'EdgeColor',[0.8 0.9 0.9]},...
        mysymbolspec{:}...
        );
    geoshow(sheng,'SymbolSpec',symbols); % 此处用mapshow投影会不正确

     

    %% 图的标注
    % 在图像右侧显示bar
    colormap(summer(k))
    hcb=colorbar('EastOutside');
    step=round(max_data/11);
    

     

    set(hcb,'YTick',(0:.1:1))
    set(hcb,'YTickLabel',num2cell(0:step:max_data))%设置高度
    
    % 给图像加标题
    title('中国各省海拔分布图(单位:m)')

    5、人口的不同颜色显示

    %-- 分省中国地图在MATLAB中的画法 --%
    %% 载入地图数据
    clear all
    % 载入各省的多边形数据
    sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);% 本文件下的边界省
    
    %% 使用importdata向导导入2011年全国31个省的人口数据
    % data为人口数目 textdata为省名称
    d=importdata('renkou.txt');
    data=d.data; % 人口数据
    textdata=d.textdata; % 相对应的省的名称
    %% 定义地图参数
    % 针对不同省份,分别设置不同的颜色(FaceColor)
    % 定义颜色
    k=500;  
    mycolormap=summer(k);
    % 生成不同区域按大小的颜色,按照人口数目多少分别指定不同的颜色
    % 人口越多,颜色越突出
    geoname={sheng.NAME}';%
    max_data = max(data);%最大人口
    n=length(data);%31个省
    mysymbolspec=cell(1,n); % 预定义变量可以加快处理速度
    for i=1:n
        count(i)=data(i);%人口
        mycoloridx(i)=round( k * count(i)/ max_data );%四舍五入
        mycoloridx(mycoloridx<1)=1;% 0变1
        myprovince{i}=textdata{i};%省
        
        geoidx=strmatch(myprovince{i}, geoname);
        if numel(geoidx) > 0 %geoidx元素个数
            province_name=geoname( geoidx(1) );%省名字
            mysymbolspec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( mycoloridx(i), :) };
        end
    end
    %% 显示地图
    figure
    ax=worldmap([20 55], [70 140]); % 使用worldmap的坐标轴作图
    setm(ax,'grid','off') % 关闭grid
    setm(ax,'frame','off') % 关闭边框
    setm(ax,'parallellabel','off') % 关闭坐标轴标记
    setm(ax,'meridianlabel','off') % 关闭坐标轴标记
    
    % 最关键的两个语句
    symbols=makesymbolspec('Polygon',{'default','FaceColor',[0.9 0.9 0.8],...
        'LineStyle','--','LineWidth',0.2,...
        'EdgeColor',[0.8 0.9 0.9]},...
        mysymbolspec{:}...
        );
    geoshow(ax,sheng,'SymbolSpec',symbols); % 此处用mapshow投影会不正确
    
    %% 图的标注
    % 在图像右侧显示bar
    colormap(summer(k))
    hcb=colorbar('southOutside');
    step=round(max_data/10);%四舍五入
    %set(hcb,'YTick',(0:.1:1))
    set(hcb,'YTickLabel',num2cell(0:step:max_data))
    
    % 给图像加标题
    title('中国各省人口分布图(单位:)')

     

     

     

     

     

     

     

      

     

      

      

     

      

  • 相关阅读:
    凤凰传奇
    信息孤岛
    别了,中珠
    吃苦要趁早
    触动——beyond歌词
    走出舒适区,迎接挑战
    创新永存
    信息时代
    变色龙时代——创新
    Java基本的数据类型
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/7528554.html
Copyright © 2020-2023  润新知