Calculate distance between a point and a contour line
13 次查看(过去 30 天)
显示 更早的评论
I want to calculate distance between points of the trajectory(grey line) and the 1000m contour (dash black line) as shown on the attached image. I want the distance to be in km/m
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/198036/image.png)
Thanks for the help in advance
3 个评论
采纳的回答
jonas
2018-10-16
编辑:jonas
2018-10-16
Here is my code so far. The units of the output is not entirely correct, but should be quite easy to fix.
% Trajectory
lat = lat_track;
lon = lon_track;
% Contour matrix for Z = 1000
C = contour(lon_cont,lat_cont,cont_vals,'levellist',-1000);hold on
close all;
% Remove some unnecessary data and save contour coordinates
[~,idx] = find(C(1,:)==-1000);
poly = [C(1,idx(1)+1:idx(2)-1);C(2,idx(1)+1:idx(2)-1)]'
C(:,C(1,:)==-1000) = [];
Clat = C(2,:)';
Clon = C(1,:)';
% Calculate closest distance between trajectory and contour
[K,d] = dsearchn([Clon,Clat],[lon,lat]);
% Check if the pts are inside or outside of the contour
in = inpolygon(lon,lat,poly(:,1),poly(:,2));
% Change sign of those inside
d(in) = -d(in);
% Plot contour
plot(Clon,Clat,'k.');hold on
% plot trajectory
scatter3(lon,lat,d,[],d)
% plot closest points
plot(Clon(K),Clat(K),'r.')
% Calculate arclength
[arclen,az] = distance(lon,lat,Clon(K),Clat(K),'rad')
The minimum distance in each point is stored in d and the index on the corresponding index in the contour matrix is stored in K. This means that the distance d(1) is the distance between [lon(1);lat(1)] and [Clon(K);Clat(K)]. The distance is currently in a weird unit of latitudes and longitudes, but you could calculate the actual distance by the distance function.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/198066/image.jpeg)
6 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Map Display 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!