Opened 13 years ago

Last modified 9 years ago

#17635 closed New feature

Missing ability to cast georaphy to geometry when using GeoDjango and PostgresSQL — at Initial Version

Reported by: corentin.chary@… Owned by: nobody
Component: GIS Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Looking at http://postgis.refractions.net/docs/ch08.html#PostGIS_TypeFunctionMatrix you will see that a lot of functions only work on geometric fields (ie: geography=False).

That means something like Markers.objects.extent() won't work if the coordinate field of Marker have geography set to True because the underlying function (ST_Extent()) only work with geometric fields.

A workaround (if you don't really care about precision) is to cast geography to geometry:

SELECT ST_Extent(coordinates::geometry) FROM markers;

That will perfectly work. However, you can't really do that with django. The best you can do seems to be:

qs.extra(select={'extent': 'ST_Extent("coordinates"::geometry)'}).values('extent')

But that's really far from perfect.

Here are some propositions:

  • add a way to cast to geometry, that would allow to do: qs.extent(field_name=coordinatesgeometry) (the trailing geometry cast a GeometryField from geography to geometry)
  • another way to cast to geometry would be: qs.geometry('coordinates').extent()
  • automatically cast geography to geometry if a function only support geometry (hum...)

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top