簡體   English   中英

計算 3D (NED) 地理坐標(緯度、經度、深度)之間的距離

[英]Calculate Distance Between 3D (NED) Geographic Coordinates (Lat, Long, Depth)

眾所周知, Haversine 公式是計算地理坐標之間距離的有用機制。 顯然,R中有一些包是provider進一步細化的; 考慮到地球的橢圓體性質。

但是,我找不到任何方法來找到NED 坐標之間的直線距離:即latitude, longitude 和 depth

這種類型的距離計算對於研究發生在海洋深處或一般地殼下的事件是必不可少的。

有沒有人知道一種方法可以幫助在球體上進行這種類型的距離計算? 在地球上? 如果沒有,有沒有人知道解決這個問題的最佳三角方法是什么?

線性距離在笛卡爾坐標系中更容易計算,因此第一步是將您的NED坐標(即長經緯度)坐標轉換為某種這樣的系統。 在開放源代碼世界中,PROJ4的“ geocent”投影(以米為單位在正交xyz坐標系中給出位置)是一個不錯的選擇。

Simon Urbanek的proj4軟件包提供了一種很好的輕量級方法來完成這種轉換。 為了演示它的用法,我將編寫一個小的包裝函數,該函數在NED坐標中獲取兩個點,並以米為單位計算它們之間的距離。 (一個復雜之處在於ptransform()期望其經度和緯度坐標以弧度表示;因此在函數的第一行和第二行中將其除以180/pi 。)

library(proj4)
findDist <- function(x=c(0,0,0), y=c(0,0,0)) {
    x <- matrix(x/c(180/pi, 180/pi, 1), ncol=3)
    y <- matrix(y/c(180/pi, 180/pi, 1), ncol=3)
    xx <- ptransform(x, src.proj="+proj=longlat +ellps=WGS84",
                        dst.proj="+proj=geocent +ellps=WGS84")
    yy <- ptransform(y, src.proj="+proj=longlat +ellps=WGS84",
                        dst.proj="+proj=geocent +ellps=WGS84")
    sqrt(sum((yy-xx)^2))
}

## A sanity check. (Find distance between two points at 0°N 0°E, one on the
## surface and one 100m below the surface (i.e. at a height of -100m).)
findDist(c(0,0,0), c(0,0,-100))
## [1] 100

## Distance from North to South Pole
findDist(c(0,90,0), c(0,-90,0))
## [1] 12713505

## Diameter of the earth at its equator
findDist(c(0,0,0), c(180,0,0))
## [1] 12756274

您可以使用 Matlab function ecefOffset 來計算 3D 中兩個地理位置之間的距離。

https://www.mathworks.com/help/map/ref/ecefoffset.html

暫無
暫無

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

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