迁移到GeoAlchemy 2

本节描述如何将应用程序从第一系列GeoAlchemy迁移到GeoAlchemy 2。

定义几何列

第一个系列有特定的类型,如 PointLineStringPolygon . 这些都不见了 geoalchemy2.types.Geometry 应改用类型,并且 geometry_type 可以传递给它。

例如,一个 polygon 以前定义如下的列:

geom = Column(Polygon)

现在定义如下:

geom = Column(Geometry('POLYGON'))

这一变化与支持 geoalchemy2.types.Geography 类型。

调用空间函数

第一个系列有自己的命名空间/对象来调用空间函数,即 geoalchemy.functions . 使用GeoAlchemy 2,SQLAlchemy的 func 应使用对象。

例如,表达式

functions.buffer(functions.centroid(box), 10, 2)

将被改写为GeoAlchemy 2:

func.ST_Buffer(func.ST_Centroid(box), 10, 2)

而且,正如前面的示例所暗示的,空间函数的名称现在都以前缀 ST_ . (这与PostGIS和 SQL-MM 标准) ST_ 即使在对列应用空间函数时也应使用前缀, geoalchemy2.elements.WKTElementgeoalchemy2.elements.WKTElement 物体::

Lake.geom.ST_Buffer(10, 2)
lake_table.c.geom.ST_Buffer(10, 2)
lake.geom.ST_Buffer(10, 2)

WKB和WKT元素

第一个系列有如下类 PersistentSpatialElementPGPersistentSpatialElementWKTSpatialElement .

它们都不见了,取而代之的是两个班: geoalchemy2.elements.WKTElementgeoalchemy2.elements.WKBElement .

geoalchemy2.elements.WKTElement 将用于应指定具有特定SRID的几何体的表达式中。例如::

Lake.geom.ST_Touches(WKTElement('POINT(1 1)', srid=4326))

如果不需要指定SRID,则可以直接使用字符串:

Lake.geom.ST_Touches('POINT(1 1)')