Opened 5 years ago
Closed 5 years ago
#31712 closed New feature (duplicate)
Inconsistent axes definition between PostGIS and Spatialite for 4326
| Reported by: | Jérôme Lebleu | Owned by: | nobody |
|---|---|---|---|
| Component: | GIS | Version: | 3.1 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I am using GeoDjango - for the first time, sorry if I missed something - to store a Point field in my model, which is included in a GeoJSON response using the shipped serializer, and finally shown on a map using OpenLayers. The default SRID (4326) is used, and I am using a SQLite database with Spatialite module in development, and a PostgreSQL database with PostGIS in production.
It took me a while to understand - in the hope I am right - that axes are not stored the same way in both backends:
- in PostGIS, coordinates of a Point are
[x = longitude, y = latitude], explained in this quick and old tip and the SRS is:GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]]
- in SpatiaLite, coordinates are
[x = latitude, y = longitude], which complies to the current EPSG definition and the SRS:GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]], AXIS["Latitude",NORTH], AXIS["Longitude",EAST], AUTHORITY["EPSG","4326"]]
Thus, currently, when I retrieve a Point field with GeoDjango, the axes order will depend on the database backend. It makes it difficult so to realize a backend-agnostic application and I would prevent checks in the application code to know if [point.x, point.y] or [point.y, point.x] should be returned. Where could that be "solved" - i.e. in the GeoDjango code, or somewhere at the database creation? - and how to always retrieve the same coordinates with GeoDjango?
Also, any tips or help to "fix" this meanwhile would be really appreciate since I am a bit stuck. Thanks in advance!
Change History (2)
follow-up: 2 comment:1 by , 5 years ago
comment:2 by , 5 years ago
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |
| Type: | Uncategorized → New feature |
| Version: | 3.0 → 3.1 |
It think it's related with GDAL 3.0. Django 3.0 doesn't support it. Can you confirm version of GDAL?
Probably duplicate of #30678.