extracting lat/lon from tif file using matlab
Show older comments
I have a tif file with a map of locations that has data. I want the lat/lon of that locations using matlab.
I ploted that in matlab using this code
[tifImage, R] = geotiffread('NA_CONUS_border.tif');
>> tifImageDouble = double(tifImage);
>> figure;
mapshow(tifImageDouble, R);
title('Georeferenced TIFF Image');
locations with data has [R,G,B]=[1 1 1].
I want to Convert pixel coordinates to geographic coordinates [lat lon].
does anyone have any idea how to do that?
5 Comments
Dyuman Joshi
on 24 Oct 2023
It's not clear to me what you want to do.
Do you want the geographic coordinates for the pixels whose color is white? If yes, could you attach the tif file?
If not, then please clarify.
Seyedeh Fardis
on 24 Oct 2023
Star Strider
on 24 Oct 2023
The geotiffread funciton is no longer recommended. It has been replaced by readgeoraster (introduced in R2020a) and that documentation illustrates how to get the latitude and longitude information from the file.
Dyuman Joshi
on 24 Oct 2023
And mention which version of MATLAB you are using.
Seyedeh Fardis
on 24 Oct 2023
Answers (2)
Cris LaPierre
on 24 Oct 2023
Edited: Cris LaPierre
on 24 Oct 2023
See this answer, which was updated in 2022.
I will mention that I did have to set the 'OutputType' to get it to work.
unzip("NA_CONUS_border.tif")
% Read image file using readgeoraster
fname = "NA_CONUS_border.tif";
[A,R] = readgeoraster(fname,"OutputType","double");
mapshow(A,R)
% Create grid of X,Y values
[x,y] = worldGrid(R);
% Convert grid of X,Y values to latitude/longitude
[lat,lon] = projinv(R.ProjectedCRS,x,y);
% Extract lat/lon locations of white line
NA_lat = lat(A==1);
NA_lon = lon(A==1);
% Plot extracted latitude/longitude on geographic axes
figure
geoscatter(NA_lat,NA_lon,'.')
geobasemap satellite
title("geographic axes")
2 Comments
Seyedeh Fardis
on 25 Oct 2023
Cris LaPierre
on 25 Oct 2023
You could check what information is available using geotiffinfo
DGM
on 24 Oct 2023
I never really use mapping stuff, so take this with a grain of salt.
fname = 'NA_CONUS_border.tif';
[tifImage, R] = geotiffread(fname);
S = geotiffinfo(fname);
tifImage = double(tifImage); % contains unique values [0 1 2] (a label array??)
mapshow(tifImage, R);
title('Georeferenced TIFF Image');
% get pixels that are exactly 1
% this ignores the fact that pixels >1 will also be white.
% adjust the test accordingly
[row col] = find(tifImage == 1);
% convert to lat/lon
[x y] = pix2map(S.RefMatrix,row,col);
[lat lon] = projinv(S,x,y);
1 Comment
Seyedeh Fardis
on 25 Oct 2023
Categories
Find more on Standard File Formats in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
