Performing calculation across large data set

3 ビュー (過去 30 日間)
Erik J
Erik J 2017 年 1 月 29 日
編集済み: Guillaume 2017 年 1 月 30 日
I have a large matrix of latitude and longitude coordinates (343212 x 2 double). I want to calculate the distance between each set of coordinates in this matrix and a single reference coordinate. I am using the LatLon Distance function.
What I do not know how to do is loop through each pair of coordinates in the data set so that it returns a vector with the distance between each pair of coordinates and the reference point.
Any help is much appreciated, thank you.

採用された回答

Guillaume
Guillaume 2017 年 1 月 29 日
編集済み: Guillaume 2017 年 1 月 30 日
Assuming you're using R2016b, this modified function will work straight away with your matrix and single reference
function [d1km, d2km] = betterlldistkm(latlon1, latlon2)
% latlon1: either a single point (1x2) or a matrix of points (nx2)
% latlon2: either a single point (1x2) or a matrix of points (nx2)
% if both latlon1 and latlon2 are matrices of point, both must have the same number of points
radius = 6371;
latlon1 = latlon1 * pi/180;
latlon2 = latlon2 * pi/180;
delta = latlon1 - latlon2;
a = sin(delta(:, 1)/2).^2 + cos(latlon1(:, 1)).*cos(latlon2(:, 1)).*sin(delta(:, 2)/2).^2;
c = 2*atan2(sqrt(a), sqrt(1-a));
d1km = radius*c;
x = delta(:, 2) .* cos(latlon1(:, 1)+latlon2(:, 1))/2;
y = delta(:, 1);
d2km = radius * hypot(x, y);
end
Usage example:
a = rand(34312, 2);
b = rand(1);
[d1, d2] = betterlldistkm(a, b)
That's all.

その他の回答 (1 件)

Iddo Weiner
Iddo Weiner 2017 年 1 月 29 日
編集済み: Iddo Weiner 2017 年 1 月 29 日
a = rand(10,2); %change this to your data
out = nan(length(a));
for i = 1:(length(a))
out(i,1) = abs(mean([a(i,1),a(i,2)]) - constant part;
% change this function to the one you want to use, I just invented
% something for the example
end
  1 件のコメント
Guillaume
Guillaume 2017 年 1 月 29 日
Please, do not use length on matrices. Your code will fail if the input matrix only has one row (since length will then return the number of columns). Use size with a explicit dimension, in this case size(a, 1).
I wouldn't recommend length for vectors either. numel is safer.

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by