由于项目需要真实的卫星图像作为地图,因而搞了搞利用水经微注这款软件下载超高分辨率大图,讲道理可以下载任意大小的超高分辨率大图。博主下载过27000*19320像素大小的图,大小约为500MB。
1.Prerequisite
win10+ 水经微注 + Matlab 2019b
2.生成下载任务文本
选取一个矩形区域,读取最大经纬度坐标。
以下matlab脚本将经纬度区域划分为N*N网格区域,输出每一个网格区域的经纬度坐标文本。案例将生成36个网格区域的经纬度范围,写入任务文本。
lon_min=116.32663250;
lon_max=116.36375427;
lat_min=39.96705622;
lat_max=39.99296935;
vect_lon=linspace(lon_min,lon_max,7)
vect_lat=linspace(lat_min,lat_max,7)
pose_mat=zeros(36,4,"double");
% 输出任务文本
fid=fopen("newbuilding_task36.txt","w+");
% 给定正方形坐标;生成4*4等分方形坐标
for i=1:6
for j=1:6
pose_mat((i-1)*6+j,:)=[vect_lon(1,i) vect_lat(1,j) vect_lon(1,i+1) vect_lat(1,j+1)];
fprintf(fid,"bh-%d|%3.10f,%3.10f|%3.10f,%3.10f|21\n",(i-1)*6+j,pose_mat((i-1)*6+j,:));
end
end
fclose(fid);
% save('bh-36.txt','pose_mat','-ascii')
结果如下,21指的下载卫星图层的等级为21级,最高为22。
bh-1|116.3266325000,39.9670562200|116.3328194617,39.9713750750|21
bh-2|116.3266325000,39.9713750750|116.3328194617,39.9756939300|21
bh-3|116.3266325000,39.9756939300|116.3328194617,39.9800127850|21
bh-4|116.3266325000,39.9800127850|116.3328194617,39.9843316400|21
bh-5|116.3266325000,39.9843316400|116.3328194617,39.9886504950|21
......
3.任务批量下载网格图像
下载并导出PNG图像。
4.网格图像拼接
直接上matlab代码,读图png图片,并利用矩阵直接进行接合就可以了。
clear all
clc
% 读取图像
map_grids={};
for i=1:36
map_grids{i}=imread(sprintf('D:\\SGDownload\\newbuilding_batch\\bh-%d_大图\\L21\\bh-%d.png',i,i));
end
% 图像拼合
part1=[map_grids{6};map_grids{5};map_grids{4};map_grids{3};map_grids{2};map_grids{1}];
part2=[map_grids{12};map_grids{11};map_grids{10};map_grids{9};map_grids{8};map_grids{7};];
part3=[map_grids{18};map_grids{17};map_grids{16};map_grids{15};map_grids{14};map_grids{13}];
part4=[map_grids{24};map_grids{23};map_grids{22};map_grids{21};map_grids{20};map_grids{19};];
part5=[map_grids{30};map_grids{29};map_grids{28};map_grids{27};map_grids{26};map_grids{25};];
part6=[map_grids{36};map_grids{35};map_grids{34};map_grids{33};map_grids{32};map_grids{31};];
map=[part1,part2,part3,part4,part5,part6];
imwrite(map,"beihang2300.png");
imshow(map);
over...