Commit 23fbd3ff authored by Nicolas Noé's avatar Nicolas Noé Committed by Tim Graham
Browse files

Fixed #26512 -- Added tests for SpatialRefSysMixin.get_units().

parent 5402f3ab
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -164,15 +164,14 @@ class SpatialRefSysMixin(object):
    @classmethod
    def get_units(cls, wkt):
        """
        Class method used by GeometryField on initialization to
        retrieve the units on the given WKT, without having to use
        any of the database fields.
        Return a tuple of (unit_value, unit_name) for the given WKT without
        using any of the database fields.
        """
        if gdal.HAS_GDAL:
            return gdal.SpatialReference(wkt).units
        else:
            m = cls.units_regex.match(wkt)
            return m.group('unit'), m.group('unit_name')
            return float(m.group('unit')), m.group('unit_name')

    @classmethod
    def get_spheroid(cls, wkt, string=True):
+27 −1
Original line number Diff line number Diff line
import re
import unittest

from django.contrib.gis.gdal import HAS_GDAL
from django.db import connection
from django.test import skipUnlessDBFeature
from django.test import mock, skipUnlessDBFeature
from django.utils import six

from .utils import SpatialRefSys, oracle, postgis, spatialite
@@ -20,6 +21,18 @@ test_srs = ({
    # From proj's "cs2cs -le" and Wikipedia (semi-minor only)
    'ellipsoid': (6378137.0, 6356752.3, 298.257223563),
    'eprec': (1, 1, 9),
    'wkt': re.sub('[\s+]', '', """
        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.01745329251994328,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]
    """)
}, {
    'srid': 32140,
    'auth_name': ('EPSG', False),
@@ -43,6 +56,19 @@ test_srs = ({
@skipUnlessDBFeature("has_spatialrefsys_table")
class SpatialRefSysTest(unittest.TestCase):

    def test_get_units(self):
        epsg_4326 = next(f for f in test_srs if f['srid'] == 4326)
        unit, unit_name = SpatialRefSys().get_units(epsg_4326['wkt'])
        self.assertEqual(unit_name, 'degree')
        self.assertAlmostEqual(unit, 0.01745329251994328)

    @mock.patch('django.contrib.gis.gdal.HAS_GDAL', False)
    def test_get_units_without_gdal(self):
        epsg_4326 = next(f for f in test_srs if f['srid'] == 4326)
        unit, unit_name = SpatialRefSys().get_units(epsg_4326['wkt'])
        self.assertEqual(unit_name, 'degree')
        self.assertAlmostEqual(unit, 0.01745329251994328)

    def test_retrieve(self):
        """
        Test retrieval of SpatialRefSys model objects.