166 views (last 30 days)

Show older comments

Given the latitudes and longitudes of two points, how to get the middle point efficiently?

My trouble is there are millions of point pairs to calculate....

James Tursa
on 9 Jul 2015

Middle point on a great circle arc assuming a sphere? Or something else?

How is your data stored?

Mohammad Abouali
on 10 Jul 2015

Edited: Mohammad Abouali
on 10 Jul 2015

Go to this page you will find bunch of useful formula. The one that you are looking for is called "midpoint" on that page. You have the JavaScript code, but implementation is rather easy

% lat1,lat2,lon1,lon2 should be in radian

Bx = cos(lat2) * cos(lon2-lon1);

By = cos(lat2) * sin(lon2-lon1);

latMid = atan2(sin(lat1) + sin(lat2), ...

sqrt( (cos(lat1)+Bx)*(cos(lat1)+Bx) + By*By ) );

lonMid = lon1 + atan2(By, cos(lat1) + Bx);

Ted Shultz
on 20 Aug 2019

Here is the matlab code of the formula provided by Mohammad, but all in degrees. Often lat/lon are in degrees, so this nearly identical code my be easier to use.

function [latMid, lonMid] = midpointLatLon(lat1, lon1, lat2, lon2)

% midpoint of two lat long cord on a sphere, all units are deg

Bx = cosd(lat2) * cosd(lon2-lon1);

By = cosd(lat2) * sind(lon2-lon1);

latMid = atan2d(sind(lat1) + sind(lat2), ...

sqrt( (cosd(lat1)+Bx)*(cosd(lat1)+Bx) + By*By ) );

lonMid = lon1 + atan2d(By, cosd(lat1) + Bx);

Ted Shultz
on 20 Aug 2019

There is a built in function in the matlab mapping toolbox that does what I think you are looking for: meanm

Mean location of geographic coordinates

Syntax

[latmean,lonmean] = meanm(lat,lon)

[latmean,lonmean] = meanm(lat,lon,units)

[latmean,lonmean] = meanm(lat,lon,ellipsoid)

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

Start Hunting!