2015-03-16 24 views
6

Aby przedłużyć moje restuzyjne api dzięki lokalizacjom GPS, postanowiłem spróbować geoalchemi. Mam już bazę danych i myślę, że już zapisuje punkty w mojej bazie danych. Jednak za każdym razem próbuję wydrukować punkt, że zapisany (na przykład w celu powrotu do użytkownika) otrzymuję adres pamięci lub coś takiego:Reprezentacja współrzędnych w GeoAlchemy2

<WKBElement at 0x7ffad5310110; '0101000000fe47a643a7f3494049f4328ae5d61140'> 

To jest całkiem bezużyteczny dla non zainicjowany programista ani dla użytkownik.

Mam proste pytanie. Jak mogę reprezentować obiekt Geometry w postaci czytelnej dla człowieka, takich jak:

POINT(40.5563 30.5567) 

Odpowiedz

12

które byłyby w W ell- K Nown B inary formatu; możesz użyć geoalchemy2.functions.ST_AsText, aby przekonwertować je na format tekstu WKT.

To działałoby w samej bazie danych, dlatego możesz zastosować to do zapytania, aby poprosić o wyniki w WKT zamiast WKB; że jest w SQLAlchemy wybraniu

Model.column.ST_AsText() 

lub

ST_AsText(Model.column) 

przypadku konwersji baz danych między off-WKT i WKB, można użyć modułu shapely. Zauważ, że funkcje wkb potrzebują binarnie, nie heksadecymalnie:

from shapely import wkb, wkt 
from binascii import unhexlify 
>>> binary = unhexlify(b'0101000000fe47a643a7f3494049f4328ae5d61140') 
>>> binary 
b'\x01\x01\x00\x00\x00\xfeG\xa6C\xa7\[email protected]\xf42\x8a\xe5\xd6\[email protected]' 
>>> point = wkb.loads(binary) 
>>> point.x, point.y 
(51.903542, 4.45986) 
>>> wkt.dumps(point) 
'POINT (51.9035420000000016 4.4598599999999999)'