【发布时间】:2016-11-11 18:48:17
【问题描述】:
在下面的查询中,使用 geometry 变量查找错误地将 geometry 转换为 SQL 中不需要的 SRID。
Buildings.objects.annotate(
area_krovak=Transform('area', self.KROVAK_SRID),
intersection_area=RawSQL('ST_Area(ST_Intersection(ST_Transform(area, {krovak}), ST_GeomFromEWKB(\'\\x{district_geom}\')))'.format(district_geom=geometry.ewkb.hex(), krovak=5514), [])
).filter(area_krovak__intersects=geometry)
Building.area 在 db 中是 MultipolygonField(),在 db 中默认有 SRID 4326 (WGS84)。 geometry 在 Krovak 投影 (SRID 5514) 中是 GEOSGeometry。为了使 ST_Intersection 工作我需要在同一个投影中,所以我在相应的投影中添加了字段area_krovak。但是查找area_krovak__intersects=geometry 中的=geometry 部分会导致以下SQL(当我打印.query 时)
ST_Transform(ST_GeomFromEWKB('blabla'::bytea), 4326)
由于某种原因,Django 将其转换为 4326,因此它不起作用。
【问题讨论】:
标签: python django postgis geodjango