[转][修]利用matlab绘制地图上的点、线、面

时间:2024-02-24 08:13:36
一.绘制点
%生成背景地图地图  
h = worldmap(\'France\');
%读取和显示大陆架  
landareas = shaperead(\'landareas.shp\',\'UseGeoCoords\', true);  
geoshow (landareas, \'FaceColor\', [1 1 .5]);  
%埃菲尔铁塔的坐标  
TowerLon = 2.28;%经度坐标  
TowerLat = 48.85;%纬度坐标  
%用红色标记绘制%埃菲尔铁塔  
geoshow(TowerLat, TowerLon, \'Marker\',\'.\',\'MarkerEdgeColor\',\'red\')  
                                  %点显示             红色点
textm(TowerLat,TowerLon + 0.5, \'Eiffel Tower\');%放置文本  
绘制的图像如下:

二.绘制线段、河流

%生成背景地图地图  
worldmap world;  
framem on;%set the map axes property Frame to \'on\' or \'off\'. The default setting for map axes is \'off\'.
%绘制线条  
linem([15; 0; -45; -25],[-100; 0; 70; 110],\'r-\'
linem([15; -30; -60; -65],[-100; -20; 100; 150],\'b-\')  
linem([15; 20; 40; 20],[-100; -20; 40; 50], \'g-\')  
 
绘制的线条结果如下:

绘制线条在地图中是很常用的,geoshow的内部就是调用linem来绘制河流的:

clc;clear;
clf;%Clear current figure window
%生成背景地图地图  
h = worldmap(\'France\');
landareas = shaperead(\'landareas.shp\',\'UseGeoCoords\', true);  
geoshow (landareas, \'FaceColor\', [1 1 .5]);  
%河流数据
rivers = shaperead(\'worldrivers\'\'UseGeoCoords\', true);  
%rivers =   128x1 struct array(128条河流) with fields:  
     %   Geometry  几何结构:线型
     %   BoundingBox  河流端点的经纬度
     %   Lon  纬度(点集)
     %   Lat  经度(与经度对应)
     %   Name  名字
%显示河流  
geoshow(rivers, \'Color\'\'blue\') ·
rivers(8)  %查看rivers的第八个元素的信息 

绘制的图形如下:

三.绘制多边形、州

%多边形的顶点坐标  
%注意:数据中多边形的初始顶点和结束顶点必须重合 
x = [40 55 33 10 0  5  10 40 NaN 10 25 30 25 10 10 NaN 90 80 65 80 90 NaN];  
y = [50 20 0  0  15 25 55 50 NaN 20 10 10 20 30 20 NaN 10 0  20 25 10 NaN];  
mapshow(x,y,\'DisplayType\',\'polygon\') %可以更改\'DisplayType\'的参数,具体查看帮助
%mapshow绘制\'polygon\'注意多边形顶点的环绕方向:
%1/顺时针为正,里面被填充->"面"  
%2/逆时针为负,里面不被填充->"洞"  

 

使用geoshow来绘制美国的地图,每个州都是一个多边形结构:view plain

 

figure; ax = usamap(\'conus\');  
axis off                            %不显示坐标轴
states = shaperead(\'usastatelo\'\'UseGeoCoords\', true);  
    %states =   51x1 struct array(51个州) with fields:
    %每个州都有如下属性,例如取出states(1)
    %        Geometry: \'Polygon\'      几何属性是:多边形
    %     BoundingBox: [2x2 double]   最小、最大边界点的坐标
    %             Lon: [1x105 double] 点的纬度
    %             Lat: [1x105 double] 点的经度、这些离散点闭合组成一个州
    %            Name: \'Alabama\'      州的名称
    %        LabelLat: 32.282672      
    %        LabelLon: -86.9206  
    %     PopDens2000: 87.6  
indexConus = 1:numel(states);%州的数目  
stateColor = [0.5 1 0.5];    %设置颜色  
%画出所有的州,方法一:
geoshow(ax, states(indexConus), \'FaceColor\', stateColor) %更精确
%画出所有的州,方法二:
%geoshow(ax, states, \'FaceColor\', stateColor)  
%只画出一个州
%geoshow(ax, states(1), \'FaceColor\', stateColor)   
setm(ax, \'Frame\'\'off\'\'Grid\'\'off\',...    %Set properties of map axes and graphics objects 
     \'ParallelLabel\'\'off\'\'MeridianLabel\'\'off\')  
         %平行圈                   %子午圈
绘制的图形如下:
原文链接:https://blog.csdn.net/rumswell/article/details/16927565