GeoQuerySet.perimeter returns invalid results on geometry fields with geodetic coordinate systems
|Reported by:||jbronn||Owned by:||jbronn|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||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 (5)
comment:1 Changed 3 years ago by jbronn
- Needs documentation unset
- Needs tests unset
- Owner changed from nobody to jbronn
- Patch needs improvement unset
- Status changed from new to assigned