项目需求:在地图tiff文件上画出轨迹和轨迹周围一定距离的范围
难点:tiff文件格式的读取,图片与经纬度之间的转换,图片具有透明度,在图片上作图
[boston,R] = geotiffread('boston.tif');
figure
%mapshow(boston,R);%完全不建议用这个,太大的tiff文件根本打不开
%axis image off
下面是另一种方法
t = Tiff('peppers_RGB_tiled.tif','r');
imageData = read(t);imshow(imageData);
I = imread('abb.tif');
imshow(I)
然后是图片经纬度和内在坐标系之间的转换
函数 | 含义 |
---|---|
contains | 确定地理或地图栅格是否包含点 |
geographicToDiscrete | 将地理变换为离散坐标 |
geographicToIntrinsic | 将地理坐标转换为内在坐标 |
intrinsicToGeographic 主要使用该函数求坐标 | 将内在变换为地理坐标 |
intrinsicXToLongitude | 从内在x转换为经度坐标 |
intrinsicYToLatitude | 从内在y转换为纬度坐标 |
latitudeToIntrinsicY | 从纬度转换为内在y坐标 |
longitudeToIntrinsicX | 从经度转换为内在x坐标 |
sizesMatch | 确定地理或地图栅格对象和图像或栅格是否与尺寸兼容 |
worldFileMatrix | 返回转换的世界文件参数 |
通过这标红这四个函数就可以实现坐标和经纬度之间的转换(画图必须要用坐标)
然后是第一次设置透明度的问题
matlab的透明度针对的是图形,不能是线条,恰好这次需要画得就是区域
解决的方法是生成很多个随着圆心变动而变动的圆,然后更改透明度
x = r*cos(theta)+lon;
y = r*sin(theta)+lat;
for i = 1:length(lat)
fill(x,y,'c');%这个是画填充圆的命令
plot(x,y,'c');%为了好看,如果不用这句话的话会有一个黑色的默认边界
alpha(0.8);%这个是更改透明度,里面的数据代表的显示的透明度
end
但是有一个小小的问题,当透明度更改的时候导入的底图tiff文件也会变的透明,这时候再多加叠一层非透明度100%的底图即可
耶!~