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