Example #1
1
 def area(self, tolerance=0.05, **kwargs):
     """
     Returns the area of the geographic field in an `area` attribute on
     each element of this GeoQuerySet.
     """
     # Performing setup here rather than in `_spatial_attribute` so that
     # we can get the units for `AreaField`.
     procedure_args, geo_field = self._spatial_setup(
         'area', field_name=kwargs.get('field_name'))
     s = {'procedure_args': procedure_args,
          'geo_field': geo_field,
          'setup': False,
          }
     connection = connections[self.db]
     backend = connection.ops
     if backend.oracle:
         s['procedure_fmt'] = '%(geo_col)s,%(tolerance)s'
         s['procedure_args']['tolerance'] = tolerance
         s['select_field'] = AreaField('sq_m')  # Oracle returns area in units of meters.
     elif backend.postgis or backend.spatialite:
         if backend.geography:
             # Geography fields support area calculation, returns square meters.
             s['select_field'] = AreaField('sq_m')
         elif not geo_field.geodetic(connection):
             # Getting the area units of the geographic field.
             s['select_field'] = AreaField(Area.unit_attname(geo_field.units_name(connection)))
         else:
             # TODO: Do we want to support raw number areas for geodetic fields?
             raise Exception('Area on geodetic coordinate systems not supported.')
     return self._spatial_attribute('area', s, **kwargs)
Example #2
0
class Area(OracleToleranceMixin, GeoFunc):
    arity = 1

    def as_sql(self, compiler, connection):
        if connection.ops.geography:
            # Geography fields support area calculation, returns square meters.
            self.output_field = AreaField('sq_m')
        elif not self.output_field.geodetic(connection):
            # Getting the area units of the geographic field.
            units = self.output_field.units_name(connection)
            if units:
                self.output_field = AreaField(
                    AreaMeasure.unit_attname(
                        self.output_field.units_name(connection)))
            else:
                self.output_field = FloatField()
        else:
            # TODO: Do we want to support raw number areas for geodetic fields?
            raise NotImplementedError(
                'Area on geodetic coordinate systems not supported.')
        return super(Area, self).as_sql(compiler, connection)

    def as_oracle(self, compiler, connection):
        self.output_field = AreaField(
            'sq_m')  # Oracle returns area in units of meters.
        return super(Area, self).as_oracle(compiler, connection)
Example #3
0
 def as_sql(self, compiler, connection):
     if connection.ops.geography:
         # Geography fields support area calculation, returns square meters.
         self.output_field = AreaField("sq_m")
     elif not self.output_field.geodetic(connection):
         # Getting the area units of the geographic field.
         units = self.output_field.units_name(connection)
         if units:
             self.output_field = AreaField(AreaMeasure.unit_attname(self.output_field.units_name(connection)))
         else:
             self.output_field = FloatField()
     else:
         # TODO: Do we want to support raw number areas for geodetic fields?
         raise NotImplementedError("Area on geodetic coordinate systems not supported.")
     return super(Area, self).as_sql(compiler, connection)
Example #4
0
class Area(OracleToleranceMixin, GeoFunc):
    arity = 1

    def as_sql(self, compiler, connection):
        if connection.ops.geography:
            # Geography fields support area calculation, returns square meters.
            self.output_field = AreaField('sq_m')
        elif not self.output_field.geodetic(connection):
            # Getting the area units of the geographic field.
            units = self.output_field.units_name(connection)
            if units:
                self.output_field = AreaField(
                    AreaMeasure.unit_attname(self.output_field.units_name(connection))
                )
            else:
                self.output_field = FloatField()
        else:
            # TODO: Do we want to support raw number areas for geodetic fields?
            raise NotImplementedError('Area on geodetic coordinate systems not supported.')
        return super(Area, self).as_sql(compiler, connection)

    def as_oracle(self, compiler, connection):
        self.output_field = AreaField('sq_m')  # Oracle returns area in units of meters.
        return super(Area, self).as_oracle(compiler, connection)
Example #5
0
 def as_oracle(self, compiler, connection):
     self.output_field = AreaField(
         'sq_m')  # Oracle returns area in units of meters.
     return super(Area, self).as_oracle(compiler, connection)
Example #6
0
 def output_field(self):
     return AreaField(self.geo_field)
Example #7
0
 def as_oracle(self, compiler, connection):
     self.output_field = AreaField('sq_m')  # Oracle returns area in units of meters.
     return super(Area, self).as_oracle(compiler, connection)
Example #8
0
 def test_area_field_deepcopy(self):
     field = AreaField(None)
     self.assertEqual(copy.deepcopy(field), field)
from decimal import Decimal