# [postgis-users] Center of Points Collection

Chris Hermansen chris.hermansen at timberline.ca
Tue Sep 15 12:25:29 PDT 2009

```Hmm on further thought I'm not completely clear on the definition of
"median" in two dimensions, either.  I found this interesting article on
Google, including a way cool Java app for calculating and graphing:

http://www.tiac.net/~sw/2007/11/2D_median/index.html

pcreso at pcreso.com wrote:
> Hi guys,
>
> A bit more difficult, & way out in left field, but if you use PL/R to create a median function for Postgres, you could build your point from the median(X) & (Y) values instead of the average.
>
> Where this would actually lie obviously depends on the distribution of the points. The centroid is most affected by (actually defined by) outlying points, the avg somewhat less & the median less still.
>
> Of course once you have PL/R to play with, you have much more flexibility to look at returning statistics from datasets than just the median.
>
> Cheers,
>
>   Brent Wood
>
>
>
>
> --- On Tue, 9/15/09, Kevin Neufeld <kneufeld at refractions.net> wrote:
>
>
>> From: Kevin Neufeld <kneufeld at refractions.net>
>> Subject: Re: [postgis-users] Center of Points Collection
>> To: "PostGIS Users Discussion" <postgis-users at postgis.refractions.net>
>> Date: Tuesday, September 15, 2009, 8:51 AM
>> Paul Ramsey wrote:
>>
>>> Faster than creating a multipoint is to recognize that
>>>
>> ST_Centroid()
>>
>>> is just going to return the center of the bbox of the
>>>
>> collection
>>
>>> anyways...
>>>
>> Unfortunately, Paul, ST_Centroid returns the center of
>> mass, not the center of the bbox.
>>
>> SELECT astext(st_centroid(st_collect(column1))),
>> FROM (values ('POINT(0 0)'),
>>
>>    ('POINT(0 1)'),
>>
>>    ('POINT(0 2)'),
>>
>>    ('POINT(1 0)')) as foo;
>>       astext
>> ------------------
>>  POINT(0.25 0.75)
>> (1 row)
>>
>> Your second post, taking the avg of the x,y does seem to be
>> the nice approach, and produces the same results as
>> ST_Centroid - the center of mass.
>>
>> SELECT astext(st_makepoint(avg(st_x(column1)),
>> avg(st_y(column1))))
>> FROM (values ('POINT(0 0)'),
>>
>>    ('POINT(0 1)'),
>>
>>    ('POINT(0 2)'),
>>
>>    ('POINT(1 0)')) as foo;
>>       astext
>> ------------------
>>  POINT(0.25 0.75)
>> (1 row)
>>
>> If Dustin is after the center of the collection, then
>> something along your first suggestion might be more
>> appropriate.
>> (taking the center of the extents)
>>
>> Cheers,
>> Kevin
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>
>>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>

--
Regards,  (please note new mobile number below)

Chris Hermansen         mailto:chris.hermansen at timberline.ca
tel+1.604.714.2878 · fax+1.604.733.0631 · mob+1.778.840.4625
Timberline Natural Resource Group · http://www.timberline.ca
401 · 958 West 8th Avenue  · Vancouver BC · Canada · V5Z 1E5

```