class CtiState(State): objects = GeoQuerySet.as_manager() class Meta: proxy = True
class CtiCountry(Country): objects = GeoQuerySet.as_manager() class Meta: proxy = True
class CtiCity(City): objects = GeoQuerySet.as_manager() class Meta: proxy = True
class CtiProtectedArea(BaseProtectedArea): objects = GeoQuerySet.as_manager() class Meta: proxy = True
class IndigenousLand(AdministrativeBoundaries, IndigenousPlace): documents = models.ManyToManyField( Document, verbose_name=_('documentation'), related_name='%(class)s_documentation', blank=True, help_text= """Acrescente a documentação oficial sobre a terra indígena (decretos de homologação, portarias declaratórias,etc.). Caso o mesmo documento se refira a mais de uma terra indígena, ele pode já estar cadastrado e você pode apenas selecioná-lo. Confira na lista antes de adicionar. """) official_area = models.FloatField( _('Official area'), blank=True, null=True, help_text= """Indique o tamanho da terra indígena de acordo com fonte oficial.""") guarani_exclusive_possession_area_portion = models.FloatField( _('Guarani full and exclusive portion area possession'), blank=True, null=True, help_text= """Em caso de terras ainda em processo de regularização, caso tenha informação de qual porção da área já foi desintrusada incluir. Em áreas em que não se iniciou o processo de desintrusão colocar 0.""" ) others_exclusive_possession_area_portion = models.FloatField( _("Other peoples' full and exclusive portion area possession"), blank=True, null=True, help_text= """Em caso de terras ainda em processo de regularização, caso tenha informação de qual porção da área já foi desintrusada incluir. Em áreas em que não se iniciou o processo de desintrusão colocar 0. """ ) # private field claim = models.TextField( _('Claim'), blank=True, null=True, help_text= """ Campo apenas de visualização restrita, para uso das associações indígenas. Indicar qual a próxima fase do processo de regularização.""" ) # private field demand = models.TextField( _('Demand'), blank=True, null=True, help_text= """Campo apenas de visualização restrita, para uso das associações indígenas. Detalhar a demanda atual frente aos órgãos públicos (desintrusão, conclusão de levantamento fundiário ou antropológico, etc..) """ ) source = models.CharField( _('Source'), max_length=512, help_text= """Indique de qual base de dados, organização ou pessoa provém o polígono utilizado para a terra indígena.""" ) # Situação Fundiária land_tenure = models.ForeignKey( LandTenure, verbose_name=_('Land Tenure'), related_name='indigenous_lands', help_text= """Selecione a fase do processo de regularização em que está a terra. Em caso de terras em processo de revisão de limites, é preciso cadastrar separadamente a Terra Original e a Terra Revisada e detalhar no próximo item.""" ) # blank=True, null=True) # Status de revisão fundiária land_tenure_status = models.ForeignKey( LandTenureStatus, verbose_name=_('Land Tenure Status'), related_name='indigenous_lands', help_text= """Selecione “Não Delimitada” para as terras ainda sem estudo aprovado pela Funai, e portanto, sem limites definidos. Selecione “Sem Revisão” caso não incida sobre a área nenhum processo de revisão de limites. Selecione “Terra Original em estudo de Revisão” caso incida sobre a área processo de revisão, mas os novos limites ainda não tenham sido aprovados pela Funai. Selecione “Terra Original” caso incida sobre a área processo de revisão, os limites já tenham sido aprovados pela Funai, e essa terra seja o polígono da terra original. Selecione “Terra Revisada” caso incida sobre a área processo de revisão, os limites já tenham sido aprovados pela Funai, e essa terra seja o polígono da terra revisada. """ ) associated_land = models.ForeignKey( 'self', verbose_name=_('Associated Land'), blank=True, null=True, help_text= """Caso a terra esteja em processo de revisão, e tanto a terra original quanto a revisada estejam cadastradas, indique qual outro registro se refere à mesma terra, original ou revisada. """ ) geometry = models.MultiPolygonField( _('Indigenous Land Spatial Data'), help_text= """Inclua aqui o polígono da terra indígena apenas em formato *.KML. Certifique-se de que apenas a terra indígena correspondente está no arquivo. """ ) layer = models.ForeignKey( MapLayer, verbose_name=_('Layer'), related_name='indigenous_lads', help_text= """O sistema é dividido em camadas que configuram as permissões de usuários e as diferentes formas de visualização do mapa. Atenção à descrição das camadas para associar corretamente a terra indígena à camada correta. Adicionar ou Modificar Documento de Terra Indígena""" ) # TODO: fix typo objects = GeoQuerySet.as_manager() class Meta: verbose_name = _('Indigenous Land') verbose_name_plural = _('Indigenous Lands') def clean(self): if self.associated_land: if not self.land_tenure_status: raise ValidationError( 'associated_land without land_tenure_status') if self.land_tenure_status.name != 'Terra Original' or self.land_tenure_status.name != "Terra Revisada": raise ValidationError( _('land_tenure_status is not "Terra Original" nor "Terra Revisada"' )) @property def villages(self): # return IndigenousVillage.objects.filter(geometry__contained=self.geometry) return IndigenousVillage.objects.filter( geometry__coveredby=self.geometry) @property def population(self): total = Population.objects.filter(village__geometry__coveredby=self.geometry)\ .values('population').annotate(latest=Max('village'))\ .aggregate(total_population=Sum('population'))\ .get('total_population') return total or 0 @property def calculated_area(self): return False # TODO test 29101 (http://spatialreference.org/ref/epsg/29101/) # return self.geometry.transform(27700, clone=True).area / 10000 @property def protected_areas(self): return BaseProtectedArea.objects.filter( geometry__intersects=self.geometry) def get_cities_intersected(self): return City.objects.filter(geometry__intersects=self.geometry) def get_states_intersected(self): return State.objects.filter(geometry__intersects=self.geometry) @property def layer_projects(self): return self.layer.projects
class Location(AbstractLocation): """Test location.""" objects = GeoQuerySet.as_manager()
class Location(AbstractLocation): objects = GeoQuerySet.as_manager()