簡體   English   中英

如何用MATLAB找到給定坐標的最近點?

[英]How to find the nearest points to given coordinates with MATLAB?

我需要用Matlab解決最小化問題,我想知道哪個是最簡單的解決方案。 我一直在思考的所有潛在解決方案都需要大量的編程工作。

假設我有一個緯度/經度坐標點(A,B),我需要的是在緯度/經度坐標的地圖中搜索距離最近的點。

特別是,緯度和經度數組是2030x1354元素(距離1km)的兩個矩陣,其目的是在那些矩陣中找到最小化到坐標(A,B)距離的唯一索引,即找到最接近的值到給定的坐標(A,B)。

任何幫助將非常感激。

謝謝!

那么LatLong表示緯度和經度矩陣

dist2=sum(bsxfun(@minus, cat(3,A,B), cat(3,Lat,Long)).^2,3);
[I,J]=find(dist2==min(dist2(:)));

IJ包含AB中對應於最近點的索引。 請注意,如果有多個答案, IJ將不是標量值,而是矢量。

這總是很有趣:)

首先:Mohsen Nosratinia的回答是好的,只要

  • 你不需要知道實際的距離
  • 你可以絕對肯定地保證你永遠不會去極地附近
  • 並且永遠不會接近±180°子午線

對於給定的緯度,-180°和+ 180°經度實際上是相同的點 ,因此僅僅觀察角度之間的差異是不夠的。 這在極地地區將是一個更大的問題,因為那里的大的經度差異對實際距離的影響較小。

球面坐標對於導航,繪圖和類似的東西非常有用和實用。 然而,對於空間計算,就像您嘗試計算的表面距離一樣,球面坐標實際上非常麻煩。

雖然可以直接使用角度進行這樣的計算,但我個人並不認為它非常實用 :你經常需要具備球形三角學的強大背景,並且有很多經驗可以知道它的許多缺陷 - 通常存在不穩定性或者你需要解決的“特殊點”(例如,極點),你需要考慮的象限模糊,因為你引入了觸發功能等等。

我已經學會了在大學里完成所有這些工作,但我也了解到球形觸發方法通常會引入復雜性,從數學上講並不是嚴格要求,換句話說,球形觸發不是最基本問題的最簡單表示。

例如,如果將緯度和經度轉換為3D笛卡爾X,Y,Z坐標,然后通過簡單公式找到距離,則距離問題非常簡單

距離( ab )= R·arccos( a / | ab / | b |)

其中ab是球體上的兩個這樣的笛卡爾向量。 請注意| a | = | b | = RR = 6371是地球的半徑。

在MATLAB代碼中:

% Some example coordinates (degrees are assumed)
lon = 360*rand(2030, 1354);
lat = 180*rand(2030, 1354) - 90;

% Your point of interest
P = [4, 54];

% Radius of Earth
RE = 6371;

% Convert the array of lat/lon coordinates to Cartesian vectors
% NOTE: sph2cart expects radians
% NOTE: use radius 1, so we don't have to normalize the vectors
[X,Y,Z] = sph2cart( lon*pi/180,  lat*pi/180, 1);

% Same for your point of interest    
[xP,yP,zP] = sph2cart(P(1)*pi/180, P(2)*pi/180, 1);

% The minimum distance, and the linear index where that distance was found
% NOTE: force the dot product into the interval [-1 +1]. This prevents 
% slight overshoots due to numerical artifacts
dotProd = xP*X(:) + yP*Y(:) + zP*Z(:);
[minDist, index] = min( RE*acos( min(max(-1,dotProd),1) ) );

% Convert that linear index to 2D subscripts
[ii,jj] = ind2sub(size(lon), index)

如果你堅持跳過轉換為笛卡爾並直接使用lat / lon,你將不得不使用本網站上列出的Haversine公式,這也是distance()從映射工具箱中使用的方法。

現在,所有這些對整個地球都有效, 只要你發現光滑的球形地球足夠精確近似。 如果你想要包括地球的扁率或一些更高階的形狀模型(或上帝禁止,包括地形在內的距離),你需要做更復雜的事情。 但我認為這不是你的目標:)

PS - 我不會感到驚訝,如果你能寫出我所做的一切,你可能會重新發現Haversine公式。 我只是喜歡能夠計算一些簡單的東西,就像單獨從第一原理開始沿着球體的距離,而不是從很久以前植入腦中的一些黑盒子公式:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM