Name

MaxPair — It takes as input parameter an array of two double values, and returns the maximum second value of the array.

Synopsis

Array MaxPair(Array [double A double B]);

Alias

-

Description

It takes as input parameter an array of two double values, and returns the maximum second value of the array.

This function can be used to obtain the maximum distance between a set of points, as shown in the following examples. Within PostgreSQL it is used with the spatial index to reduce the search space.

Coordinate Dimensions
2D3DM

-

-

-

Spatial Standards Support
OGC SFS for SQL. 1.1 (1999)OGC SFS for SQL. 1.1.0 (2005)OGC SFS for SQL. 1.2.0 (2006)SQL-MM Part 3
----

Examples

PostgreSQL

create table a(c1 double precision, c2 double precision);
insert into a values (10,2.456);
insert into a values (5,1.456);
insert into a values (20,2.256);

select MaxPair(Array[c1,c2]) from a;
  maxpair   
------------
 {10,2.456}
(1 row)

H2

create table a(c1 integer, c2 double);
insert into a values (10,2.456);
insert into a values (5,1.456);
insert into a values (20,2.256);

select Maxpair((c1::double,c2)) from a;

--Result 
(10.0, 2.456)
How to use MinPair to obtain the maximum distance:

Suppose you have a table of points and you want to get which is the farthest point to each point and the longest distance between them.

CREATE TABLE points(gid serial PRIMARY KEY);
SELECT AddGeometryColumn ('points','geom',-1,'POINT',2);
--H2: SELECT AddGeometryColumn ('POINTS','GEOM',-1,'POINT',2);

INSERT INTO points(geom) VALUES (ST_GeomfromText('POINT (8 10)'));
...

gid |   st_astext   
-----+---------------
   1 | POINT (8 10)
   2 | POINT (18 15)
   3 | POINT (11 15)
   4 | POINT (13 13)
   5 | POINT (11 12)
   6 | POINT (0 11)
   7 | POINT (15 3)
   8 | POINT (28 17)
   9 | POINT (19 23)
  10 | POINT (27 8)
  11 | POINT (7 2)
  12 | POINT (20 10)
  13 | POINT (7 23)
(13 rows)

PostgreSQL

SELECT d1.gid, MaxPair(ARRAY[d2.gid,distance(d1.geom,d2.geom)]), count(*) 
 FROM points d1, points d2 
 WHERE (ST_Expand (d1.geom,30) && d2.geom) and distance (d1.geom,d2.geom) > 0 
GROUP BY d1.gid;

 gid |        maxpair        | count 
-----+-----------------------+-------
   1 | {8,21.1896201004171}  |    12
   2 | {6,18.4390889145858}  |    12
   3 | {10,17.464249196573}  |    12
   4 | {8,15.52417469626}    |    12
   5 | {8,17.7200451466693}  |    12
   6 | {8,28.6356421265527}  |    12
   7 | {13,21.540659228538}  |    12
   8 | {6,28.6356421265527}  |    12
   9 | {11,24.1867732448956} |    12
  10 | {6,27.1661554144122}  |    12
  11 | {8,25.8069758011279}  |    12
  12 | {6,20.0249843945008}  |    12
  13 | {10,25}               |    12
(13 rows)

H2

SELECT d1.gid, MinPair((d2.gid::double,distance(d1.geom,d2.geom))) as minpair, count(*) FROM points d1, points d2 
WHERE distance (d1.geom,d2.geom) > 0 
GROUP BY d1.gid;

GID  	MINPAIR  	COUNT(*)  
1	(8.0, 21.18962010041709)	12
2	(6.0, 18.439088914585774)	12
3	(10.0, 17.46424919657298)	12
4	(8.0, 15.524174696260024)	12
5	(8.0, 17.72004514666935)	12
6	(8.0, 28.635642126552707)	12
7	(13.0, 21.540659228538015)	12
8	(6.0, 28.635642126552707)	12
9	(11.0, 24.186773244895647)	12
10	(6.0, 27.16615541441225)	12
11	(8.0, 25.80697580112788)	12
12	(6.0, 20.024984394500787)	12
13	(10.0, 25.0)	12

Related functions

MinPair