[Gfoss] creare LINESTRING da punti

ciao a tutti,

immagino che sia la domanda più banale, ma come posso creare vettore lineare a partire dalle coordinate dei punti? naturalmente il procedimento a mano, punto per punto, non fa al caso mio. Mi servirebbe una query da poter eseguire all’interno di uno script bash, dato che sono molti dati.
Ho già provato a far leggere i file con le coordinate a postgres con psql database -c “insert into…geomfromtext(…)” ma con i file più grandi (ca 5000 righe) ricevo come errore “Argument list too long”

Lavoro con Ubuntu 7.10

grazie,
tommaso

On 19:58 Thu 19 Jun , tommaso dibucchianico wrote:

ciao a tutti,

immagino che sia la domanda più banale, ma come posso creare vettore lineare
a partire dalle coordinate dei punti? naturalmente il procedimento a mano,
punto per punto, non fa al caso mio. Mi servirebbe una query da poter
eseguire all'interno di uno script bash, dato che sono molti dati.
Ho già provato a far leggere i file con le coordinate a postgres con psql
database -c "insert into......geomfromtext(......)" ma con i file più
grandi (ca 5000 righe) ricevo come errore "Argument list too long"

Non essendo esperto di postgres e postgis l'unica cosa che
mi viene in mente è quello di trattare il file di testo con
sed o awk per creare una geometria linestring su un'unica
riga

Ciao,
   Marco

ma come posso creare vettore lineare
a partire dalle coordinate dei punti?

Unix non accetta una riga di comando di lunghezza arbitraria.

Io ho dovuto trattare una cosa simile in PHP, ho risolto creando
una tabella intermedia con tutti i punti (loop sui dati in input)
e poi creando la LINE con una MakeLine e una SELECT del tipo:

UPDATE tracksegments SET trkseg = (
    SELECT MakeLine(trkpt) FROM (
        SELECT trkpt FROM trackpoints
        WHERE idtrkseg = $idtrkseg
        ORDER BY date_time
    ) AS trkseg)
    WHERE id = $idtrkseg;

Pero' se hai lo shapefile forse ti conviene usare shp2pgsql.

--
Niccolo Rigacci
Firenze - Italy

Unix non accetta una riga di comando di lunghezza arbitraria.

si, c’è una specie di limite. in linux dovrebbe essere un problema risolto con l’ultimo kernel (io ho ancora il vecchio)

Pero’ se hai lo shapefile forse ti conviene usare shp2pgsql.

ma non è fare lo shape file il problema, ma solo create una geometria LINESTRING

per spiegarmi meglio, ho cercato di usare il seguente script:

k=$(cat coo)

psql -d gps -c “INSERT INTO l2008_06_03_kit_04 values (1,‘2008_06_16_Kit_18’, GeomFromText(‘LINESTRING($k)’,4326));”

dove coo è il file con le coordinate (5000 righe). Il comando funziona tranquillamente se io apro il file coo a mano e copio incollo tutte le righe a mano.

Quello che vorrei sapere è la query per fare questo senza dover passare per un file esterno. Qualcosa tipo:
select geomfromtext(‘linestring(longitude latitude)’,4326) from table_coordinate;

Appena ho tempo provo l’esempio proposto da niccolò.

grazie dei consigli!

2008/6/19 Niccolo Rigacci <niccolo@faunalia.it>:

ma come posso creare vettore lineare
a partire dalle coordinate dei punti?

Unix non accetta una riga di comando di lunghezza arbitraria.

Io ho dovuto trattare una cosa simile in PHP, ho risolto creando
una tabella intermedia con tutti i punti (loop sui dati in input)
e poi creando la LINE con una MakeLine e una SELECT del tipo:

UPDATE tracksegments SET trkseg = (
SELECT MakeLine(trkpt) FROM (
SELECT trkpt FROM trackpoints
WHERE idtrkseg = $idtrkseg
ORDER BY date_time
) AS trkseg)
WHERE id = $idtrkseg;
lo
Pero’ se hai lo shapefile forse ti conviene usare shp2pgsql.


Niccolo Rigacci
Firenze - Italy

On 10:58 Fri 20 Jun , tommaso dibucchianico wrote:

k=$(cat coo)

psql -d gps -c "INSERT INTO l2008_06_03_kit_04 values
(1,'2008_06_16_Kit_18', GeomFromText('LINESTRING($k)',4326));"

prova a togliere la variabile k dagli apici:

GeomFromText('LINESTRING(' $k ')',4326));

Ciao,
  Marco