2013-03-07 12 views
8

Ho una tabella in postgresql con una colonna PostGIS geometria (punto, 4326) (posizione, usando SRID 4326) e ho un'applicazione Python che usando SQL Alchemy aggiorna la tabella (il resto delle colonne) senza alcun problema.Conversione della geometria Post lunga a geometria PostGIS senza interrogare il database

Ora, ho bisogno di aggiornare la colonna di posizione e so che posso usare la corretta rappresentazione di testo di una data posizione per aggiornare la colonna usando SQL Alchemy senza la necessità di usare GEOAlchemy, ad esempio posso aggiornare la colonna con il valore: '0101000020E6100000AEAC7EB61F835DC0241CC418A2F74040'

che corrisponde alla lat: 33,9346,343 mila lungo: -118,0488106

La domanda è: esiste un modo per calcolare in Python questo '0101000020E6100000AEAC7EB61F835DC0241CC418A2F74040' avendo questo (33,9346,343 mila, -118,0488106) come input senza interrogare il database? o un modo per aggiornare la colonna usando un corretto input di testo?

So che posso usare SQLAlchemy per eseguire questa query:

select st_setsrid(st_makepoint(-118.0488106, 33.9346343),4326) 

e ottenere il valore per aggiornare la colonna, ma voglio evitare questo.

Grazie in anticipo!

+1

Perché non 'UPDATE your_table SET your_field = st_setsrid (st_makepoint (-118.0488106, 33.9346343), 4326) DOVE your_filter'? –

+0

Poiché sto usando un layer ORM che non mi permette di eseguire quel tipo di aggiornamento, invece posso passare su un oggetto per memorizzarlo nel database, ea questo punto dovrei avere (in python) il valore di la colonna. –

+0

PostGIS è open source. Puoi semplicemente scaricare il codice sorgente, cercarlo per quella funzione e riscriverlo su python. –

risposta

11

La soluzione a questo problema è piuttosto semplice di quanto sembri. Per aggiornare il campo utilizzando il testo e l'ingresso lat a lungo tutto quello che dovevo fare era definire lo SRID nella assegnazione di testo:

location = 'SRID = 4326; PUNTO (-118,0488106 33,9,346343 millions)'

Questa volontà aggiornare la geometria (punto, 4326) colonna correttamente e quando si esegue una selezione nella tabella il valore della colonna è quello atteso:

"0101000020E6100000AEAC7EB61F835DC0241CC418A2F74040"

Grazie ragazzi!

+1

un altro modo in cui ho visto essere generato da un plugin chiamato knex-postgis è di fare location = 'ST_geomFromText (\' Point (-118.0488106 33.9346343) \ ', )' ma se fai questo manualmente fai attenzione a sfuggire alla stringa – 1mike12