开始在 GIS 系统上工作,并决定将 GeoAlchemy2 用于 ORM。
由于 PostGis 在 DB 中以 WKB 格式保存点并且前端需要 GeoJson,我认为“类型装饰器”可能会在这里提供帮助。但总是从 geoalchemy2\types.py 得到错误:
"AttributeError: 'Geometry' object has no attribute 'upper'"
不确定我是否正确理解了这个想法。我需要生成自定义类型吗?
以下是代码片段:
from sqlalchemy.types import TypeDecorator
from geoalchemy2.types import Geometry
from geoalchemy2 import functions
from shapely import wkb, wkt
from shapely.geometry import Point
class PointDecorator(TypeDecorator):
impl = Geometry
def process_literal_param(self, value, dialect):
return functions.ST_AsGeoJSON(value)
process_bind_param = process_literal_param
def process_result_value(self, value, dialect):
return wkb.dump(value, hex=True)
class Point(Base):
id = Column(Integer, primary_key=True, index=True)
location = Column(PointDecorator(Geometry('POINT')), index=True)