def handle(self, *args, **options): shapefile_path = options['shapefile_path'][0] ds = DataSource(shapefile_path) source_layer = ds[0] lands_layer, _ = MapLayer.objects.get_or_create(name='Terras Indígenas - Povos não Guaranis') lands_layer.description = 'Camada de Terras Indígenas' lands_layer.save() def _get_ethnic_group(groups, create=False): """ The ethnic groups names must be separated by coma """ groups_names = [] for group_name in groups.split(','): group_name = group_name.strip() if not group_name: return if create: ethnic_group, created = EthnicGroup.objects.get_or_create(name=group_name) if created: self.stdout.write('O povo {0} foi criado.'.format(group_name)) yield ethnic_group else: try: yield EthnicGroup.objects.get(name=group_name) except EthnicGroup.DoesNotExist: self.stdout.write('O povo {0} não foi encontrato e não será criado, por favor verifique o arquivo de importação.'.format(group_name)) def _get_ethnic_subgroup(groups, create=False): """ The ethnic subgroups names must be separated by coma """ for group_name in groups.split(','): group_name = group_name.strip() if create: ethnic_subgroup, _ = ProminentEthnicSubGroup.objects.get_or_create(name=group_name) yield ethnic_subgroup else: try: yield EthnicGroup.objects.get(name=group_name) except ProminentEthnicSubGroup.DoesNotExist: self.stdout.write('O subgrupo Guarani {0} não foi encontrato e não será criado, por favor verifique o arquivo de importação.'.format(group_name)) for feat in source_layer: official_area = feat.get('AREA') if isinstance(official_area, str): official_area.replace(".", "").replace(",", ".") official_area = float(official_area) if not official_area: official_area = 0.0 kwargs = { 'layer': lands_layer, 'name': feat.get('TERRA_INDI'), # 'other_names': feat.get('OUTRAS_DEN'), 'official_area': official_area, # 'claim': feat.get('REIVINDICA'), # 'demand': feat.get('DEMANDA'), 'source': feat.get('FONTE'), # 'private_comments': feat.get('OBS_PRIVAD'), # 'public_comments': feat.get('OBS_PUBLIC'), # 'guarani_exclusive_possession_area_portion': float(feat.get('PORCAO_ARE')), # 'others_exclusive_possession_area_portion': float(feat.get('PORCAO_AR2')), # 'associated_land': feat.get('TERRAS_ASS'), } indigenous_land = IndigenousLand(**kwargs) land_tenure = feat.get('SITUACAO_F') if land_tenure == 'Em Estudo': land_tenure ='Em estudo' if not LandTenure.objects.filter(name=land_tenure).exists(): raise(BaseException('Situação fundiária não encontrata! NOME: {0} STATUS: {1}'.format(feat.get('TERRA_INDI'), land_tenure))) indigenous_land.land_tenure = LandTenure.objects.get(name=land_tenure) land_tenure_status = feat.get('STATUS_REV') if not LandTenureStatus.objects.filter(name=land_tenure_status).exists(): raise(BaseException('Status de revisão fundiária não encontrata: {}'.format(land_tenure_status))) indigenous_land.land_tenure_status = LandTenureStatus.objects.get(name=land_tenure_status) indigenous_land.geometry = feat.geom.wkt try: # try to save as MultPolygon indigenous_land.save() except: # Convert polygon to MultPolgon before save poly = fromstr(feat.geom.wkt) multi_poly = MultiPolygon(poly) indigenous_land.geometry = multi_poly.wkt indigenous_land.save() # self.stdout.write('Terra indígena: ' + indigenous_land.name + 'Posição convertida de Polígono para Multipolígono.') ethnic_groups = _get_ethnic_group(feat.get('GRUPO_ETNI'), create=True) for group in ethnic_groups: indigenous_land.ethnic_groups.add(group) # ethnic_subgroups = _get_ethnic_subgroup(feat.get('SUBGRUPO_P')) # for ethnic_subgroup in ethnic_subgroups: # indigenous_land.prominent_subgroup.add(ethnic_subgroup) indigenous_land.save() self.stdout.write('Camada de terras indígenas importada com sucesso! Caminho do arquivo fornecido: "%s"' % shapefile_path)
def handle(self, *args, **options): shapefile_path = options['shapefile_path'][0] ds = DataSource(shapefile_path) source_layer = ds[0] lands_layer, _ = MapLayer.objects.get_or_create(name='Terras Indígenas') lands_layer.description = 'Camada de Terras Indígenas dos povos Guarani' lands_layer.save() def _get_ethnic_group(groups): groups_names = [] if ',' in groups: group_list = groups.split(',') else: group_list = groups.split() if len(group_list) == 1: groups_names.append(group_list[0]) elif 'e' in group_list and len(group_list) == 3: groups_names.append(group_list[0]) groups_names.append(group_list[2]) elif len(group_list) == 4: groups_names.append(group_list[0][:-1]) groups_names.append(group_list[1]) groups_names.append(group_list[3]) elif len(group_list) == 2 or len(group_list) == 3: groups_names = group_list else: print('EthnicGroup:') print(group_list) for group_name in groups_names: try: yield EthnicGroup.objects.get(name=group_name) except EthnicGroup.DoesNotExist: print('Não achou EthnicGroup: ' + group_name) def _get_ethnic_subgroup(groups): groups_names = [] if ',' in groups: group_list = groups.split(',') else: group_list = groups.split() if len(group_list) == 1: if '/' not in group_list[0]: groups_names.append(group_list[0]) else: group_list = groups.split('/') if len(group_list) == 2: groups_names = group_list elif '/' in groups: if group_list and len(group_list) == 3: groups_names.append(group_list[0]) if '/' in group_list[2]: group_list2 = group_list[2].split('/') groups_names.append(group_list2[0]) groups_names.append(group_list2[1]) else: groups_names.append(group_list[2]) elif len(group_list) == 2: groups_names.append(group_list[0]) if '/'in group_list[1]: groups_names.append(group_list[1][1:]) else: groups_names.append(group_list[1]) elif len(group_list) == 4: groups_names.append(group_list[0]) groups_names.append(group_list[2]) if '/'in group_list[3]: groups_names.append(group_list[3][1:]) else: groups_names.append(group_list[3]) elif len(group_list) == 2 or len(group_list) == 3: groups_names = group_list else: print(group_list) for group_name in groups_names: try: yield ProminentEthnicSubGroup.objects.get(name=group_name) except ProminentEthnicSubGroup.DoesNotExist: print('Não achou: ' + group_name) print(groups) print('\n') def _get_land_tenure(name): land_tenure, _ = LandTenure.objects.get_or_create(name=name) return land_tenure def _get_land_tenure_status(name): land_tenure_status, _ = LandTenureStatus.objects.get_or_create(name=name) return land_tenure_status for feat in source_layer: official_area = feat.get('AREA').replace(".", "").replace(",", ".") if official_area: official_area = float(official_area) else: official_area = 0.0 kwargs = { 'layer': lands_layer, 'name': feat.get('TERRA_INDI'), 'other_names': feat.get('OUTRAS_DEN'), 'official_area': official_area, 'claim': feat.get('REIVINDICA'), 'demand': feat.get('DEMANDA'), 'source': feat.get('FONTE'), 'private_comments': feat.get('OBS_PRIVAD'), 'public_comments': feat.get('OBS_PUBLIC'), 'guarani_exclusive_possession_area_portion': float(feat.get('PORCAO_ARE')), 'others_exclusive_possession_area_portion': float(feat.get('PORCAO_AR2')), # 'associated_land': feat.get('TERRAS_ASS'), } indigenous_land = IndigenousLand(**kwargs) indigenous_land.geometry = feat.geom.wkt try: # try to save as MultPolygon indigenous_land.save() except: # Convert polygon to MultPolgon before save poly = fromstr(feat.geom.wkt) multi_poly = MultiPolygon(poly) indigenous_land.geometry = multi_poly.wkt indigenous_land.save() # self.stdout.write('Terra indígena: ' + indigenous_land.name + 'Posição convertida de Polígono para Multipolígono.') ethnic_groups = _get_ethnic_group(feat.get('GRUPO_ETNI')) for group in ethnic_groups: indigenous_land.ethnic_groups.add(group) ethnic_subgroups = _get_ethnic_subgroup(feat.get('SUBGRUPO_P')) for ethnic_subgroup in ethnic_subgroups: indigenous_land.prominent_subgroup.add(ethnic_subgroup) land_tenure = feat.get('SITUACAO_F') if land_tenure == 'Sem Providências': indigenous_land.land_tenure = _get_land_tenure('Sem Providências') elif land_tenure in ['Regularizada', 'Regularizada (Em revisão de limites)']: indigenous_land.land_tenure = _get_land_tenure('Regularizada') elif land_tenure in ['Desapropriada', 'Desapropriada (Reivindicação de Identificação)']: indigenous_land.land_tenure = _get_land_tenure('Desapropriada') elif land_tenure in ['Em processo de desapropriação', 'Em processo de despropriação pelo Estado.', 'Área em processo de despropriação pelo Estado.', 'Em processo de Desapropriação.', 'Em processo de Desapropriação']: indigenous_land.land_tenure = _get_land_tenure('Em processo de desapropriação') elif land_tenure == 'Delimitada': indigenous_land.land_tenure = _get_land_tenure('Delimitada') elif land_tenure == 'Em estudo': indigenous_land.land_tenure = _get_land_tenure('Em estudo') elif land_tenure == 'Declarada': indigenous_land.land_tenure = _get_land_tenure('Declarada') elif land_tenure in ['Adquirida', 'Dominial Indígena']: indigenous_land.land_tenure = _get_land_tenure('Adquirida') elif land_tenure == 'Homologada': indigenous_land.land_tenure = _get_land_tenure('Homologada') else: self.stdout.write('Situação fundiária não encontrata! NOME: ' + feat.get('TERRA_INDI') + 'STATUS: ' + land_tenure) land_tenure_status = feat.get('STATUS_REV') if land_tenure_status == 'Sem Revisão': indigenous_land.land_tenure_status = _get_land_tenure_status('Sem Revisão') elif land_tenure_status == 'Não Delimitada': indigenous_land.land_tenure_status = _get_land_tenure_status('Não Delimitada') elif land_tenure_status == 'Terra Revisada': indigenous_land.land_tenure_status = _get_land_tenure_status('Terra Revisada') elif land_tenure_status == 'Terra Original': indigenous_land.land_tenure_status = _get_land_tenure_status('Terra Original') else: self.stdout.write('Status de revisão fundiária não encontrata: ' + land_tenure_status) indigenous_land.save() self.stdout.write('Camada de terras indígenas importada com sucesso! Caminho do arquivo fornecido: "%s"' % shapefile_path)
def handle(self, *args, **options): shapefile_path = options['shapefile_path'][0] ds = DataSource(shapefile_path) source_layer = ds[0] lands_layer, _ = MapLayer.objects.get_or_create(name='Terras Indígenas') lands_layer.description = 'Camada de Terras Indígenas dos povos Guarani' lands_layer.save() def _get_ethnic_group(group): ethnic_group, _ = EthnicGroup.objects.get_or_create(name=group) return ethnic_group for feat in source_layer: official_area = feat.get('AREA').replace(".", "").replace(",", ".") if official_area: official_area = float(official_area) else: official_area = 0.0 kwargs = { 'layer': lands_layer, 'name': feat.get('TERRA_INDI'), 'other_names': feat.get('OUTRAS_DEN'), 'official_area': official_area, 'claim': feat.get('REIVINDICA'), 'demand': feat.get('DEMANDA'), 'source': feat.get('FONTE'), 'private_comments': feat.get('OBS_PRIVAD'), 'public_comments': feat.get('OBS_PUBLIC'), 'guarani_exclusive_possession_area_portion': float(feat.get('PORCAO_ARE')), 'others_exclusive_possession_area_portion': float(feat.get('PORCAO_AR2')), 'land_tenure': feat.get('SITUACAO_F'), 'land_tenure_status': feat.get('STATUS_REV'), 'associated_land': feat.get('TERRAS_ASS'), } indigenous_land = IndigenousLand(**kwargs) indigenous_land.polygon = feat.geom.wkt try: # try to save as MultPolygon indigenous_land.save() except: # Convert polygon to MultPolgon before save poly = fromstr(feat.geom.wkt) multi_poly = MultiPolygon(poly) indigenous_land.polygon = multi_poly.wkt indigenous_land.save() # self.stdout.write('Terra indígena: ' + indigenous_land.name + 'Posição convertida de Polígono para Multipolígono.') for group in feat.get('SUBGRUPO_P').split(','): indigenous_land.prominent_subgroup.add(_get_ethnic_group(group)) land_tenure = feat.get('SITUACAO_F') if land_tenure == 'Sem Providências': indigenous_land.land_tenure = 'no_arrangements' elif land_tenure == 'Regularizada': indigenous_land.land_tenure = 'regularized' elif land_tenure == 'Desapropriada': indigenous_land.land_tenure = 'expropriated' elif land_tenure == 'Em processo de desapropriação': indigenous_land.land_tenure = 'expropriated_in_progress' elif land_tenure == 'Delimitada': indigenous_land.land_tenure = 'delimited' elif land_tenure == 'Em estudo': indigenous_land.land_tenure = 'study' elif land_tenure == 'Declarada': indigenous_land.land_tenure = 'declared' elif land_tenure == 'Adquirida': indigenous_land.land_tenure = 'acquired' elif land_tenure == 'Regularizada (Em revisão de limites)': indigenous_land.land_tenure = 'regularized_limits_rev' else: self.stdout.write('Situação fundiária não encontrata: ' + land_tenure) land_tenure_status = feat.get('STATUS_REV') if land_tenure_status == 'Sem Revisão': indigenous_land.land_tenure_status = 'no_revision' elif land_tenure_status == 'Não Delimitada': indigenous_land.land_tenure_status = 'not_delimited' elif land_tenure_status == 'Terra Revisada': indigenous_land.land_tenure_status = 'revised_land' elif land_tenure_status == 'Terra Original': indigenous_land.land_tenure_status = 'original_land' else: self.stdout.write('Status de revisão fundiária não encontrata: ' + land_tenure_status) indigenous_land.save() self.stdout.write('Camada de terras indígenas importada com sucesso! Caminho do arquivo fornecido: "%s"' % shapefile_path)