2013-11-10 3 views
2

Документация по GeoAlchemy2 не отображается полностью (по сравнению с предыдущей версией).Результаты поиска и результатов поиска GeoAlchemy2

У меня есть модель:

class AddressCode(Base): 
    __tablename__ = 'address_codes' 
    id = Column(Integer, primary_key=True) 
    code = Column(Unicode(34)) 
    geometry = Column(Geometry('POINT')) 

И я хочу, чтобы хранить Шир/данные, которые я пытался сохранить в приведенной выше модели, пример

"51.42553,-0.666085" 

Что дает мне ошибку:

"Parse error at position 9 within Geometry (the "," char") 

Любой, кто может пролить свет на то, где я ошибаюсь?

Также на эту тему, как бы я peform запрос сказать ..

Показать ближайшие 20 пользователей:

class AddressCode(Base): 
    __tablename__ = 'address_codes' 
    id = Column(Integer, primary_key=True) 
    name = Column(Unicode(34)) 
    geometry = Column(Geometry('POINT')) 

Нечто подобное?

geom_var = "51.42553,-0.666085" 
Session.query(User).filter(func.ST_DWithin, 20, geom_var).all() 

ответ

5

В обоих GeoAlchemy и GeoAlchemy2 вам необходимо указать геометрию в хорошо известном текстовом формате под названием WKT or Well-known text, или хорошо известный двоичный формат. Для точки синтаксис равен 'POINT(X Y)', поэтому 'POINT(-0.666085 51.42553)' обратите внимание, что долгота на первом месте, а затем широта.

Модуль shapely содержит полезные функции для обработки геометрий внешних реляционных баз данных, а также простые преобразования между классами геометрии Python и форматами WKT, WKB.

0

Вот как это сделать:

эта область таблица определяется как:

regionTable = Table ('области', метаданные Колонка ('region_id', Integer, последовательности ('region_region_id_seq') , primary_key = True), Колонка ('type_cd', String (30)), Колонка ('region_nm', String (255)), Колонка ('geo_loc', география) )

как запросить это:

(дать мне все регионы в пределах 50 миль от моего текущего местоположения ..)

SqlString = выберите ([regionTable], func.ST_DWithin (regionTable.c.geo_loc, 'POINT (-74.78886216922375 40.32829276931833)', 1609 * 50))

результат = connection.execute (SqlString)

  for row in result: 
        print "region name:", row['region_nm'] 
Смежные вопросы