Pairwise Distances (fwd)

Hi all,

     I am attempting to use the program GRASS to obtain spatial distances
for ALL possible pairs of plant individuals within a population. To date,
I have obtained distances (not coordinates) of individuals relative to
only TWO OTHER individuals (in order to use triangulation to create
polygons). Now, I need to calculate pairwise distances for EACH plant
individual relative to EVERY OTHER plant individual within populations.
Could you please tell me GRASS has the capability to compute the
distances between all pairs of points in a spatial network comprised of
only a limited number of pairwise distances?

     Please do not hesitate to contact me if you require clarification. I
would really appreciate your input! Thanks for your consideration.

Sincerely,
Kelly Gallagher
______________________________________________________________________________
Kelly G. Gallagher
New Mexico State University, Department of Biology, Department 3AF, Box 30001,
Las Cruces, New Mexico 88003, phone: (505) 646-3611 / fax: (505)646-5665
______________________________________________________________________________

On Tue, Jul 11, 2000 at 03:53:20PM -0600, kegallag@NMSU.Edu wrote:

Hi all,

     I am attempting to use the program GRASS to obtain spatial
     distances for ALL possible pairs of plant individuals within a
     population. To date, I have obtained distances (not coordinates)
     of individuals relative to only TWO OTHER individuals (in order
     to use triangulation to create polygons). Now, I need to
     calculate pairwise distances for EACH plant individual relative
     to EVERY OTHER plant individual within populations. Could you
     please tell me GRASS has the capability to compute the distances
     between all pairs of points in a spatial network comprised of
     only a limited number of pairwise distances?

     Please do not hesitate to contact me if you require
     clarification. I would really appreciate your input! Thanks for
     your consideration.

I don't know if GRASS has a function to do this, but you can do it in
PostgreSQL. The coordinates have to be in an x,y type projection like
UTM (lat/lon won't work).

Here's how:

1. dump your plants (they are sites?) into an ascii file (s.out.ascii).

2. Open postgresql and do the following (you might have to edit the
ascii plant file to get it into a format for postgresql).

a) Create the table...

CREATE TABLE plants (
  plant_id INTEGER PRIMARY KEY,
  coordinate POINT NOT NULL
);

b) Copy the data into postgresql

COPY plants FROM '/path/to/plants.asc' USING DELIMITERS '|';

#file should look like below with x & y being the floating point coords.
1|(x,y)
2|(x,y)
...

c) Do a relational projection calculating the distance between each pair
of points and weeding out the zeros (this may take a long time if you
have alot of data, and may bomb if you have tons of data).

SELECT a.plant_id, (a.coordinate::point <-> b.coordinate::point) as distance,
  b.plant_id
FROM plants a, plants b
WHERE (a.coordinate::point <-> b.coordinate::point) > 0.0
ORDER BY a.plant_id;

3. Send the output to a file (possible without fancy formatting). It'll
look like:

plant_id | distance | plant_id
----------+------------------+----------
        1 | 2.54950975679639 | 2
        1 | 8.74642784226795 | 3
        1 | 20.2869416127715 | 4
        1 | 30.500655730656 | 5
        2 | 2.54950975679639 | 1
        2 | 6.21288982680363 | 3
        2 | 17.8488094841085 | 4
        2 | 28.0251672608746 | 5
        3 | 8.74642784226795 | 1
        3 | 6.21288982680363 | 2
        3 | 12.5483066586691 | 4
        3 | 22.3895064706661 | 5
        . . .
        . . .
        . . .

If you need help with the postgresql stuff, let me know.

--
According to MegaHAL:
    The emu is a mass of incandescent gas, a gigantic nuclear furnace.