Example #1
0
	def clean(self):
		cleaned_data = super().clean()

		b_file = cleaned_data.get('rinex_base_file')
		r_file = cleaned_data.get('rinex_rover_file')

		if b_file and r_file:
			(b_isOK, b_erroMsg, b_header) = readRinexObs(b_file)
			(r_isOK, r_erroMsg, r_header) = readRinexObs(r_file)
		else:
			b_isOK = False
			r_isOK = False
			b_erroMsg = 'Arquivo rinex invalido.'
			r_erroMsg = ''

		if not b_isOK or not r_isOK:
			 raise forms.ValidationError(b_erroMsg + r_erroMsg)


		# # Verificando se os dois arquivos são do mesmo dia

		b_Date = b_header['TIME OF FIRST OBS'].split()
		b_day = date(year=int(b_Date[0]),month=int(b_Date[1]),day=int(b_Date[2]))
		r_Date = r_header['TIME OF FIRST OBS'].split()
		r_day = date(year=int(r_Date[0]),month=int(r_Date[1]),day=int(r_Date[2]))

		if b_day != r_day:
			erroMsg = 'As observações não são do mesmo dia.'
			raise forms.ValidationError(erroMsg)


		# # Verificando o nome das estações

		for header in [r_header, b_header]:
			if not header['MARKER NAME']:
				erroMsg = 'Favor definir o nome da estação do arquivo '
				erroMsg += header['RAW_NAME']
				raise forms.ValidationError(erroMsg)

		if r_header['MARKER NAME'] == b_header['MARKER NAME']:
			erroMsg = 'Arquivos da mesma estação (' + b_header['MARKER NAME'] + ').'
			raise forms.ValidationError(erroMsg)


		# # Verificando as coordenadas de referencia

		if self.cleaned_data['coord_ref_type'] == 'header_rinex':
			self.cleaned_data['coord_X'] = float(b_header['APPROX POSITION XYZ'][0])
			self.cleaned_data['coord_Y'] = float(b_header['APPROX POSITION XYZ'][1])
			self.cleaned_data['coord_Z'] = float(b_header['APPROX POSITION XYZ'][2])

		if (not self.cleaned_data['coord_X'] or not self.cleaned_data['coord_Y']
		 	or not self.cleaned_data['coord_Z']):
			 raise forms.ValidationError(
			 	'Favor definir as coordenadas de referência')
Example #2
0
	def clean(self):
		cleaned_data = super().clean()
		rfile = cleaned_data.get('rinex_file')

		if not rfile:
			f_isOK = False
			erroMsg = 'Arquivo invalido.'
		elif is_zipfile(rfile):
			# verifica se os arquivos compactados são validos
			with ZipFile(rfile) as zfile:
				for file in zfile.namelist():
					with zfile.open(file) as rzfile:
						(f_isOK, erroMsg, header) = readRinexObs(rzfile)
					if not f_isOK: raise forms.ValidationError(erroMsg)
		else:
			(f_isOK, erroMsg, header) = readRinexObs(rfile)

		if not f_isOK:
			 raise forms.ValidationError(erroMsg)
Example #3
0
    def save_coord_form(self):

        coord_context = {
            'datum': self.cleaned_data['datum'],
            'epoch': float(self.cleaned_data['epoch']),
            'devX': 0.0,
            'devY': 0.0,
            'devZ': 0.0,
        }

        # Leitura do arq rinex
        rFile = self.cleaned_data['rinex_base_file'].open('rb')
        (is_ok, erroMsg, header) = readRinexObs(rFile)
        if not is_ok:
            raise forms.ValidationError(
                'Erro ao persistir as coordenadas de referencia. ' +
                'Erro ao ler o arquivo rinex! ' +
                erroMsg)  # TODO usar outra exception

        # Atribuindo nome da estação
        coord_context['station_name'] = header['MARKER NAME']

        # Leitura das coordenadas no cabecalho do arquivo rinex ou do formulário
        # conforme especificado pelo usuário
        coord_context['X'] = self.cleaned_data['coord_X']
        coord_context['Y'] = self.cleaned_data['coord_Y']
        coord_context['Z'] = self.cleaned_data['coord_Z']

        if self.cleaned_data['coord_ref_type'] not in [
                'header_rinex', 'user_set'
        ]:
            raise forms.ValidationError(
                'Favor definir a origem das coordenadas' +
                ' de referência.')  # TODO usar outra exception

        # Criando uma instancia da Classe coordenadas com os atributos do coord_context
        coord_ref = Coordinates(**coord_context)

        # Persistindo coordenadas no bando de dados
        coord_ref.save()

        #fim com sucesso da função save_coord_form
        return coord_ref  # Retornando uma instancia da classe coordenadas
Example #4
0
    def clean(self):
        cleaned_data = super().clean()

        rfile = cleaned_data.get('rinex_rover_file')

        headers = []

        if not rfile:
            f_isOK = False
            erroMsg = 'Arquivo invalido.'
        elif is_zipfile(rfile):
            # verifica se os arquivos compactados são validos
            with ZipFile(rfile) as zfile:
                for file in zfile.namelist():
                    with zfile.open(file) as rzfile:
                        (f_isOK, erroMsg, header) = readRinexObs(rzfile)
                    if not f_isOK: raise forms.ValidationError(erroMsg)
                    else: headers.append(header)
        else:
            (f_isOK, erroMsg, header) = readRinexObs(rfile)
            headers = [header]

        if not f_isOK:
            raise forms.ValidationError(erroMsg)

        self.bases = {}

        for header in headers:
            # # Verificando o nome das estações
            if not header['MARKER NAME']:
                erroMsg = 'Favor definir o nome da estação do arquivo '
                erroMsg += header['RAW_NAME']
                raise forms.ValidationError(erroMsg)

            # # Verificando as coordenadas aproximadas
            coord_X = 0
            coord_Y = 0
            coord_Z = 0
            if self.cleaned_data['coord_ref_type'] == 'header_rinex':
                coord_X = float(header['APPROX POSITION XYZ'][0])
                coord_Y = float(header['APPROX POSITION XYZ'][1])
                coord_Z = float(header['APPROX POSITION XYZ'][2])

            if (not coord_X or not coord_Y or not coord_Z):
                raise forms.ValidationError(
                    'Favor definir as coordenadas aproximadas da estação no arquivo '
                    + header['RAW_NAME'])

            # Pré-seleção das bases da RBMC (Validação da existencia do arquivo na API do Bernese)
            bases_names = ''
            if self.cleaned_data['base_select_type'] == 'auto':
                bases = basesRBMC(coord_X, coord_Y, coord_Z,
                                  cleaned_data['base_select_max_distance'])
            elif self.cleaned_data['base_select_type'] == 'manual':
                bases = cleaned_data['bases_rbmc_choices'].replace(
                    " ", "").replace("'",
                                     "").replace('[',
                                                 '').replace(']',
                                                             '').split(',')

            for base in bases:
                if base != header['MARKER NAME']:
                    bases_names += base
                    bases_names += ' '

            if bases_names:
                self.bases[header['RAW_NAME']] = bases_names
            else:
                raise forms.ValidationError(
                    'Não foram encontradas bases da RBMC para o arquivo ' +
                    header['RAW_NAME'] + ' em um raio de {}km'.format(
                        cleaned_data['base_select_max_distance']))