Matlab绘制经纬度地图并添加坐标点

1.调用geoshow画出的经纬度图片

图片说明:该图片是为了说明某公司的工厂建设地址分布图,并且不同州的颜色深度根据人口密度大小确定,可知人口密度大的所建的工厂工程较多,其中红色为已经建成并且投入了使用的工厂位置,绿色为正在修建的工厂位置。该图的做法:①首先通过该公司网站获取了在建和已建工厂的经纬度;②将数据导入2中的代码生成图片。

Matlab绘制经纬度地图并添加坐标点_第1张图片

2.相关代码

代码说明:在Matlab中运行,并且将3中的数据表保存至运行相同路径的目录中。

%% 初始化环境
clc
clear
close all
landcolor = [0.98 0.97 0.97];
lakescolor = [0.71 0.84 0.92];

%% 从经纬度出发
rest = xlsread('map.xlsx');
[m,n] = size(rest);
limit = [26 48 -130 -60];
res = [];    %获得各种的经纬度的信息

%% 将含有经纬度的数据点画在地图上

for i = 1:m
     if rest(i, 1) > limit(1) && rest(i, 1) < limit(2) && rest(i, 2) > limit(3) && rest(i, 2) < limit(4) 
        res = [res; rest(i, :)];
     end
end
mcolor = [249 222 239; 255 86 0; 236 165 201; 47 70 150];
mcolor = mcolor ./255;

%用不同的颜色的点标记不同属性的地址
for i = 1:size(res, 1)
     greenpoint(i).Geometry = 'Point';
     redpoint(i).Geometry = 'Point';
     if res(i, 3) == 0   %0表示绿点,即在建工程
        greenpoint(i).Lon = res(i, 2);
        greenpoint(i).Lat = res(i, 1);
        greenpoint(i).Name = '';
     end
     if res(i, 3) == 1   %1表示红点,即已建工程
        redpoint(i).Lon = res(i, 2);
        redpoint(i).Lat = res(i, 1);
        redpoint(i).Name = '';
     end
end

%% 开始绘图
figure

%画出地图的经纬度范围
ax = worldmap('World');
ax = worldmap([25, 55], [230, 300]);

%画出美国大陆地图
land = shaperead('landareas', 'UseGeoCoords', true);
geoshow(ax, land, 'FaceColor', landcolor)

%画出美国湖泊地图
lakes = shaperead('worldlakes', 'UseGeoCoords', true);
geoshow(lakes, 'FaceColor', lakescolor)

%画出美国各个州,根据人口密度确定不同颜色
states = shaperead('usastatelo', 'UseGeoCoords', true);
scolor = [];
for i = 1:size(states, 1)
     if states(i).PopDens2000 >= 150    %获取人口密度
        scolor = [scolor; mcolor(4, :)];
     elseif states(i).PopDens2000 >= 50
        scolor = [scolor; mcolor(3, :)];
     else
        scolor = [scolor; mcolor(1, :)];
     end
end
index = find(scolor(:, 1) >= 1);
for i = 1:size(index, 1)
     scolor(index(i), :) = [1 0 0];
end
faceColors = makesymbolspec('Polygon',...
    {'INDEX', [1 numel(states)],  'FaceColor', ...
    scolor}); 
geoshow(ax, states, 'DisplayType', 'polygon', ...
 'SymbolSpec', faceColors)

%画出美国内陆河流
rivers = shaperead('worldrivers', 'UseGeoCoords', true);
geoshow(rivers, 'Color', 'blue')

%画出第一类点,用绿点表示
geoshow(redpoint,'MarkerEdgeColor','g','Marker', '.', 'MarkerSize',10)  %g表示绿色

%画出第二类点,用红点表示
geoshow(greenpoint,'MarkerEdgeColor', 'r', 'Marker', '.', 'MarkerSize',10 )  %r表示红色

%矫正图形
set(gcf, 'Position', [100, 100, 800, 400])

3.相关数据

数据说明:LA为纬度(Latitude),LO为经度(Longitude),R1为工厂类型的属性,其中(0表示绿点,即在建工程;1表示红点,即已建工程)。此数据为部分数据,具体数据按实际情况可进行修改。

LA LO R1
41.6175 -70.488528 0
33.020052 -117.126278 0
39.822355 -75.240447 1
39.19477 -75.54729 0
41.500575 -95.451663 0
40.499647 -78.391352 1
34.242065 -111.322538 0
43.018501 -85.723629 0
32.897259 -83.689432 0
39.162833 -84.426528 1
45.851688 -66.560635 0
33.745288 -118.012279 0
37.258506 -121.871476 1
39.962023 -75.172049 0
26.782582 -80.092328 0
30.060278 -81.513861 1
46.05864 -72.312291 0
38.815129 -77.642614 0
41.53713 -73.005368 1

熟悉和掌握Matlab中的Mapping toolbox,对画出各种地理信息图帮助很大。 

——Written in BTBU

你可能感兴趣的:(经纬度地图,Matlab,图像处理与地理信息)