我使用GeoDjango內置,並有一個PointField一個Django模型:如何使用GeoDjango/PostGIS滿足「enforce_srid_coordinate」約束條件?
class ArchivrItem(models.Model):
...
coordinate = models.PointField(srid=4326)
當我嘗試插入一個新ArchivrItem,利用緯度和經度,我得到這個錯誤:
ERROR: new row for relation "archivr_archivritem" violates check constraint "enforce_srid_coordinate"
我可避免Django和試圖做到這一點直接獲得的PostgreSQL同樣的錯誤:
INSERT INTO archivr_archivritem (coordinate) VALUES ('POINT(51.520667 -0.094833)');
我可能被周圍的SRID和點SYSTE幼稚和無知ms ...我錯過了什麼?謝謝。
更新:我應該添加約束是什麼。桌子上的約束條件是:
"enforce_dims_coordinate" CHECK (st_ndims(coordinate) = 2)
"enforce_geotype_coordinate" CHECK (geometrytype(coordinate) = 'POINT'::text OR coordinate IS NULL)
"enforce_srid_coordinate" CHECK (st_srid(coordinate) = 4326)
嗯,現在我已經嘗試了所有的這些,用了同樣的錯誤:'項目= ArchivrItem(座標=點(5,23))' ,'item = ArchivrItem(coordinate = GEOSGeometry('SRID = 4326; POINT(5 23)'))'和'item = ArchivrItem(coordinate = GEOSGeometry('POINT(5 23)',srid = 4326))''。 –
我已經成功地在SQL中直接管理它,通過插入這個值作爲一個值:'ST_SetSrid(ST_PointFromText('POINT(5 23)'),4326)'。 –
PointFromText有一個SRID參數,不需要SetSrid:http://www.postgis.org/docs/ST_PointFromText.html。你能得到它輸出它試圖運行的SQL(該頁面有一個例子),看看它試圖從Django做什麼? –