2013-03-07 18 views
8

Mam tabelę w postgresql z kolumną PostGIS geometry (point, 4326) (lokalizacja, przy użyciu SRID 4326) i mam aplikację Python, która za pomocą SQL Alchemy aktualizuje tabelę (reszta kolumn) bez problemu.Konwertowanie geometrii do geometrii PostGIS bez sprawdzania bazy danych

Teraz muszę zaktualizować kolumnę położenia i wiem, że mogę użyć odpowiedniej reprezentacji tekstowej danej lokalizacji, aby zaktualizować kolumnę za pomocą SQL Alchemy bez potrzeby korzystania z GEOAlchemy, na przykład mogę zaktualizować kolumnę za pomocą wartości '0101000020E6100000AEAC7EB61F835DC0241CC418A2F74040'

co odpowiada ac: 33,9346343 długi: -118,0488106

pytanie, czy jest sposób obliczyć w Pythonie to '0101000020E6100000AEAC7EB61F835DC0241CC418A2F74040' ma to (33.9346343, -118.0488106) jako wejścia bez sprawdzania bazy danych? lub w dowolny sposób zaktualizować kolumnę za pomocą właściwego wprowadzania tekstu?

wiem, że mogę używać SQLAlchemy wykonać to zapytanie:

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

i uzyskać wartość, aby zaktualizować kolumny, ale chcę uniknąć.

Z góry dziękuję!

+1

Dlaczego nie 'UPDATE twoja_tabela SET your_field = st_setsrid (st_makepoint (-118,0488106, 33,9346343), 4326) GDZIE twój_filtr? –

+0

Ponieważ używam warstwy ORM, która nie pozwala mi uruchomić tego rodzaju aktualizacji, zamiast tego mogę przekazać obiekt do przechowywania go w bazie danych, aw tym momencie powinienem (w python) wartość kolumna. –

+0

PostGIS jest open source. Możesz po prostu pobrać kod źródłowy, wyszukać go dla tej funkcji i przepisać go na pythona. –

Odpowiedz

11

Rozwiązanie tego problemu jest raczej łatwiejsze niż się wydaje. Aby zaktualizować pole za pomocą tekstu i wejście łac długi wszystko, co potrzebne do zrobienia było określenie SRID w assign tekstem:

location = „Srid = 4326, temperatura (-118,0488106 33.9346343)”

Ta wola zaktualizować geometrię (punkt, 4326) kolumna poprawnie i kiedy to zrobić select w tabeli wartość kolumny jest oczekiwany jednego:

„0101000020E6100000AEAC7EB61F835DC0241CC418A2F74040”

Dzięki chłopaki!

+1

Innym sposobem, który widziałem generowany z wtyczki o nazwie knex-postgis, jest wykonanie position = 'ST_geomFromText (\' Point (-118.0488106 33.9346343) \ ', )', ale jeśli robisz to ręcznie, uważaj tylko na ucieczkę z ciągu znaków – 1mike12

Powiązane problemy