build a circle using the latitude and longitude values
13 次查看(过去 30 天)
显示 更早的评论
Hi, I need to build a circle using the latitude and longitude values as the center of the circle.
busStop_latit; %array (28,1)
busStop_long; %array (28,1)
%latit and long with which I want to use to build the circle
I need to define "true" if new latitude and longitude values are internal to the constructed circle, "false" if these new values are external to the circle. How is it possible to build the circle and write these two conditions in matlab?
latitude; %matrix (3600,4)
longitude; %matrix (3600,4)
%i want to use only the 1st column oh the two matrix
pos_busStop=ones(28,1);
distance; %matrix (3600,4) and I want to use only the 1st column for this mtrix too
idx=zeros(3600,1);
for i=1:3600
if lat(i,1)<lat_new(1,:) && lon(i,1)<long_new(1,:)
idx(:,1)=1
end
pos_busStop(:,1)==distanza(idx,1);
end
3 个评论
Adam Danz
2020-7-2
On second thought, pdist2() with 3600 coordinates may overwhelm that function. It would be easiest just to use the euclidean distance equation directly. I'll add a demo in the answers section that you can apply to your data.
采纳的回答
Adam Danz
2020-7-2
Here's a demo that you can apply to your data.
% Define the center of the circle
target = [lon,lat]; % where lon and lat are single, "scalar" values
% Define the radius of the circle (distance from target to furthest accepted point)
r = 12.2;
% Compute the distance of each (lon,lat) coordinate from target
% lonVec is a vector of longitudinal coordinates
% latVec is a vector of latitudinal coordinates
% hypot(A,B) is a Matlab function that computes the Euclidean distance between (A,B)
dist = hypot(lonVec-target(1), latVec-target(2));
% Detect which coordinates are within range
withinRange = dist <= r; % withinRange is a logical vector the same size as lonVec | latVec
6 个评论
Adam Danz
2020-7-6
编辑:Adam Danz
2020-7-6
Try using pdist2. Your lat and lon values contain a lot of NaNs which will propagate through to the final output.
target = [long_ferm(:,1),lat_ferm(:,1)];
dist = pdist2(target, [lon(:,1),lat(:,1)]);
inCirlce = dist <= 12.2;
inCircle is a matrix of logical values.
size(inCirlce)
ans =
28 3600
where inCircle(i,j) tells you whether [lon(j,1),lat(j,1)] is within range of the target target(i,:). 1 means in or on cirlce and 0 means outside or NaN value was present.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!