How to find the closest point to a line
    10 views (last 30 days)
  
       Show older comments
    
Hello,
I am having a bit of a hard time finding which point (i.e centroid) is closest to a line formed by the start and end coordinates. The lines are always in a straight line.
points = array2table([1,48,-55,48.1,-55.1; 2, 50,-55,50.1,-55.1], 'VariableNames', {'name', 'start_lat','start_long','end_lat','end_long'})
centroids = cell2table({'A', 47, -56; 'B', 51,-54}, 'VariableNames', {'name', 'centroid_lat','centroid_long'})
desired_output = cell2table({1,48,-55,48.1,-55.1, 'A'; 2, 50,-55,50.1,-55.1, 'B'}, 'VariableNames', {'name', 'start_lat','start_long','end_lat','end_long', 'closet_centroid'})
Thank you,
3 Comments
  Davide Masiello
      
 on 2 Nov 2022
				How do you determine the distance between a line and a point?
Is the distance between the point and the line centroid ok?
Accepted Answer
  Walter Roberson
      
      
 on 2 Nov 2022
        3 Comments
  Rik
      
      
 on 3 Nov 2022
				Since you know you only put in 2 points, why not create the vector including the 0? That way you also get to skip the test with length (which I wouldn't use anymore.
I also removed the repmat call, as you only provide a single point.
points = array2table([1,48,-55,48.1,-55.1; 2, 50,-55,50.1,-55.1],...
    'VariableNames', {'name', 'start_lat','start_long','end_lat','end_long'});
centroids = cell2table({'A', 47, -56; 'B', 51,-54},...
    'VariableNames', {'name', 'centroid_lat','centroid_long'});
for i = 1:height(points)
    v1 = [points.start_lat(i), points.start_long(i), 0];
    v2 = [points.end_lat(i)  , points.end_long(i)  , 0];
    for  j = 1:height(centroids)
        pt = [centroids.centroid_lat(j), centroids.centroid_long(j), 0];
        a = v1 - v2;
        b = pt - v2;
        distance(j) = sqrt(sum(cross(a,b,2).^2,2)) ./ sqrt(sum(a.^2,2));
    end
    [~, idx] = min(distance);
    points.associated_centroid(i) = centroids.name(idx);
end
points
More Answers (1)
See Also
Categories
				Find more on Interpolation 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!




