GeoQuerySet.perimeter returns invalid results on geometry fields with geodetic coordinate systems
Reported by: |
jbronn |
Owned by: |
Tim Graham <timograham@…> |
Component:
|
GIS
|
Version:
|
1.2
|
Severity:
|
Normal
|
Keywords:
|
perimeter
|
Cc:
|
|
Triage Stage:
|
Accepted
|
Has patch:
|
yes
|
Needs documentation:
|
no
|
Needs tests:
|
no
|
Patch needs improvement:
|
yes
|
Easy pickings:
|
no
|
UI/UX:
|
no
|
The method GeoQuerySet.perimeter
returns Distance
objects with erroneous values when called on a geometry field that has a geodetic coordinate system (e.g., srid=4326
). The values in the returned distance objects are really perimeter measurements in degrees of latitude/longitude, rather than meters.
Here's an example using the models and data from the GeoDjango tutorial:
>>> from world.models import WorldBorders
>>> us = WorldBorders.objects.perimeter().get(name='United States')
>>> print us.perimeter
771.493229562 m
Obviously, the perimeter of the United States is greater than a kilometer. To fix, the helper method GeoQuerySet._distance_attribute
needs to be modified to raise an exception or return a raw numeric value when attempting to calculate perimeters on geodetic coordinate systems.
Change History
(8)
Owner: |
changed from nobody to jbronn
|
Status: |
new → assigned
|
Triage Stage: |
Unreviewed → Accepted
|
Severity: |
→ Normal
|
Type: |
→ Bug
|
Has patch: |
set
|
Owner: |
jbronn removed
|
Status: |
assigned → new
|
Patch needs improvement: |
set
|
Owner: |
set to Tim Graham <timograham@…>
|
Resolution: |
→ fixed
|
Status: |
new → closed
|
Change UI/UX from NULL to False.