0
在下面的查詢中,使用geometry
變量錯誤地將geometry
轉換爲SQL中不需要的SRID。GeoDjango ORM查找將SQL錯誤地轉換爲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
是分貝一個MultipolygonField()
,在分貝有默認SRID 4326(WGS84)。 geometry
在Krovak投影中是GEOSGeometry
(SRID 5514)。爲了使ST_Intersection正常工作,我需要在同一個投影中,所以我在相應的投影中添加了字段area_krovak
。但=geometry
部分查找area_krovak__intersects=geometry
導致下面的SQL(當我打印.query
)
ST_Transform(ST_GeomFromEWKB('blabla'::bytea), 4326)
出於某種原因,Django的將其轉換爲4326,所以這是行不通的。