迁移到GeoAlchemy 2¶
本节描述如何将应用程序从第一系列GeoAlchemy迁移到GeoAlchemy 2。
定义几何列¶
第一个系列有特定的类型,如 Point
, LineString
和 Polygon
. 这些都不见了 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.WKTElement
或 geoalchemy2.elements.WKTElement
物体::
Lake.geom.ST_Buffer(10, 2)
lake_table.c.geom.ST_Buffer(10, 2)
lake.geom.ST_Buffer(10, 2)
WKB和WKT元素¶
第一个系列有如下类 PersistentSpatialElement
, PGPersistentSpatialElement
, WKTSpatialElement
.
它们都不见了,取而代之的是两个班: geoalchemy2.elements.WKTElement
和 geoalchemy2.elements.WKBElement
.
geoalchemy2.elements.WKTElement
将用于应指定具有特定SRID的几何体的表达式中。例如::
Lake.geom.ST_Touches(WKTElement('POINT(1 1)', srid=4326))
如果不需要指定SRID,则可以直接使用字符串:
Lake.geom.ST_Touches('POINT(1 1)')
geoalchemy2.elements.WKTElement
取代第一个系列WKTSpatialElement
.geoalchemy2.elements.WKBElement
是GeoAlchemy 2将从数据库中读取的几何值转换为的类型。例如,
geom
属性Lake
从数据库加载的对象将引用geoalchemy2.elements.WKBElement
物体。这个类取代了第一个系列PersistentSpatialElement
类。