chews
chews

Reputation: 2659

Determine the centroid of multiple points

I'm writing a mapping application that I am writing in python and I need to get the lat/lon centroid of N points. Say I have two locations

a.lat = 101
a.lon = 230

b.lat = 146
b.lon = 200

Getting the center of two points is fairly easy using a euclidean formula. I would like to be able to do it for more then two points.

Fundamentally I'm looking to do something like http://a.placebetween.us/ where one can enter multiple addresses and find a the spot that is equidistant for everyone.

Upvotes: 6

Views: 17402

Answers (6)

redcalx
redcalx

Reputation: 8657

The below PDF has a bit more detail than the poster from Jenness Enterprises. It also handles conversion in both directions and for a spheroid (such as the Earth) rather than a perfect sphere.

Converting between 3-D Cartesian and ellipsoidal latitude, longitude and height coordinates

Upvotes: 0

James Eichele
James Eichele

Reputation: 119184

Have a look at the pdf document linked below. It explains how to apply the plane figure algorithm that Bill the Lizard mentions, but on the surface of a sphere.

poster thumbnail and some details http://img51.imageshack.us/img51/4093/centroidspostersummary.jpg
Source: http://www.jennessent.com/arcgis/shapes_poster.htm
There is also a 25 MB full-size PDF available for download.
Credit goes to mixdev for finding the link to the original source, and of course to Jenness Enterprises for making the information available. Note: I am in no way affiliated with the author of this material.

Upvotes: 7

joel.neely
joel.neely

Reputation: 30963

Separately average the latitudes and longitudes.

Upvotes: -2

Bill the Lizard
Bill the Lizard

Reputation: 406035

The math is pretty simple if the points form a plane figure. There's no guarantee, however, that a set of latitudes and longitudes are that simple, so it may first be necessary to find the convex hull of the points.

EDIT: As eJames points out, you have to make corrections for the surface of a sphere. My fault for assuming (without thinking) that this was understood. +1 to him.

Upvotes: 1

Martin Beckett
Martin Beckett

Reputation: 96167

If you are averaging angles and have to deal with them crossing the 0/360 then it is safer to sum the sin and cos of each value and then Average = atan2(sum of sines,sum of cosines)
(be careful of the argument order in your atan2 function)

Upvotes: 3

pdemarest
pdemarest

Reputation: 1830

Adding to Andrew Rollings' answer.

You will also need to make sure that if you have points on either side of the 0/360 longitude line that you are measuring in the "right direction"

Is the center of (0,359) and (0, 1) at (0,0) or (0,180)?

Upvotes: 3

Related Questions