The first block of code below identifies which circle center is closest to each pts_positions using pdist2(). It then assigns the circle name from circles_positions to each row in pts_positions.
lat = [47.5, 45.5, 46.5, 46.6, 47.8, 45.7, 44]';
lon = [-63.5, -61.5, -62.5, -62.4, -63.6, -61.7, -59.9]';
pts_positions = table(lat, lon);
lat = [47, 45, 43]';
lon = [-63, -61, -59]';
name = {'A'; 'B'; 'C'};
circles_positions = table(name,lat, lon);
radius = 2;
distToCircCenters = pdist2(pts_positions{:,:}, circles_positions{:,{'lat','lon'}});
[~, closestCircIdx] = min(distToCircCenters, [], 2);
pts_positions.circle_name = circles_positions.name(closestCircIdx);
The block of code below plots the results using rounded rectangles. The circles are color coded and the (lon,lat) points are color coded to show which circle they belong to.
nCircles = numel(circles_positions.lat);
plotCircFcn = @(x,y,r)rectangle('Position',[x-r,y-r,r*2,r*2],'Curvature',[1,1]);
clf()
hold on
axis equal
box on
recHand = arrayfun(@(i)plotCircFcn(circles_positions.lon(i),circles_positions.lat(i),radius),1:nCircles);
circColors = [jet(nCircles), repmat(0.5,nCircles,1)];
set(recHand, {'FaceColor'}, mat2cell(circColors, ones(size(circColors,1),1), size(circColors,2)) )
plot(circles_positions.lon, circles_positions.lat, 'k*')
scatter(pts_positions.lon, pts_positions.lat, 90, circColors(closestCircIdx,1:3), 'filled', 'MarkerEdgeColor', 'k')
0 Comments
Sign in to comment.