Calculate distance between two coordinates with depth

조회 수: 110 (최근 30일)
Feliciano Döring
Feliciano Döring 2018년 5월 30일
답변: Rob Comer 2022년 4월 29일
I need to do what's in the title. I saw a file exchange about calculating the distance between two coordinates, but how would i do it considering the altitude? I have my data in latitude and longitude so i would need something to convert it first, i saw online and doing it one by one would take to long
  댓글 수: 2
Ameer Hamza
Ameer Hamza 2018년 5월 30일
What do you mean by "considering the altitude". Give an example to clarify your question.
Feliciano Döring
Feliciano Döring 2018년 5월 30일
편집: Feliciano Döring 2018년 5월 30일
I mean 3D,for example if i have the coordinates for latitude, longitude and heigth

댓글을 달려면 로그인하십시오.

채택된 답변

Kai Domhardt
Kai Domhardt 2018년 5월 30일
If I understand your question right, the solution should be to use the Haversine formula to get the 2D distance on the sphere and then use Pythagoras theorem with the difference in altitude.
dist_sphere = haversine(loc1(1:2), loc2(1:2));
delta_altitude = loc1(3)-loc2(3);
dist = sqrt( dist_sphere^2 + delta_altitude ^2 )
  댓글 수: 3
Kelly Kearney
Kelly Kearney 2018년 5월 30일
Keep in mind that the Haversine formulation calculates the distance along a sphere (i.e. a rough approximation of great circle distance along the surface), not the straight line distance between the points. That may be what you want, but if you're instead looking for a straight line distance (i.e line through the earth to connect points on opposite sides of the globe rather than line encircling the earth), there are lots of different coordinate transformation options in the Mapping Toolbox.
Feliciano Döring
Feliciano Döring 2018년 6월 1일
편집: Feliciano Döring 2018년 6월 1일
Yes, i actually am looking for something to connect directly, i'm dealing with waves inside the earth that travel directly an not through the surface

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Rob Comer
Rob Comer 2022년 4월 29일
As Dr. Kearney suggested, the Mapping Toolbox can help. If you have it, try using ecefOffset. It computes the 3-D offset vector between two points (or, element-wise, between two sets of points), in an Earth-Centered Earth-Fixed (ECEF) coordinate system. From there, it's just a matter of computing the length of the offset vector to obtain the distance.
[deltaX,deltaY,deltaZ] = ecefOffset(spheroid,lat1,lon1,h1,lat2,lon2,h2);
d = hypot(hypot(deltaX,deltaY),deltaZ);
As the syntax suggests, the points need to be specified relative to a reference spheroid. (In many cases, wgs84ellipsoid will give an appropriate value.) The latitudes and longitudes need to be in degrees, and the height units need to match spheroid.LengthUnit. The h1 and h2 inputs should be heights above the ellipsoid, so if the available altitude values are referenced to something else (e.g., Mean Sea Level or Ground Level), they should be converted first using a geoid model and/or terrain model.

카테고리

Help CenterFile Exchange에서 Geometric Geodesy에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by