コード例 #1
0
    def atualizar_poligono_descricao(self, id_linha, distancia, id_braco, id_linha_braco, ponto):
        "atualiza as informacoes conforme o progresso de leitura da borda"

        self.dict_poligono_descricao["metadados"]["linhas"][id_linha] = {
                "id_linha_braco":id_linha_braco,
                "id_frente":None,
                "id_atras":None,
                "linha_largura":self.dict_circ_desc["linha_largura"],
                "linha_app":None,
                "braco":None,
                "distancia":distancia,
                "tipo":self.dict_circ_desc["tipo_circulo"],
            }

######################################################################################################################
        "identificar quantas extremidades em um mesmo ramo ja foram passadas"
        if self.dict_circ_desc["tipo_circulo"] == "extremidade":
            self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["n_extremidades"] += 1

        if self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["n_extremidades"] == 2:
            self.finalizar_linhas = True
#######################################################################################################################
        "defini os dados iniciais do primeiro ponto a ser lido"
        if id_linha_braco == 0:
            self.dict_poligono_descricao["metadados"]["bracos"][id_braco] ={
                     "id_linha_ini":None,
                     "pt_ini":None,
                     "pt_ini_oposto":None,
                     "n_extremidades":0,
                     "ponta":None,
                     "base":None,
                     "distancia_oposta":None
                 }
            ponto_oposto = func_linhas.ponto_oposto(ponto, self.dict_circ_desc)
            distancia_oposta = func_linhas.calc_distancia_oposta( self.dict_circ_desc, self.dict_lista_pontos[distancia+self.intervalo_entre_linhas])
            self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["id_linha_ini"] = id_linha
            self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["pt_ini"] = ponto
            self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["pt_ini_oposto"] = ponto_oposto
            self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["distancia_oposta"] = distancia_oposta

        if id_linha > 0:
            if self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["tipo"] == "extremidade":
                if self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["tipo"] == "meio":
                    id_linha_ini = self.dict_poligono_descricao["metadados"]["bracos"][id_braco]["id_linha_ini"]
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha_ini]["id_atras"] = id_linha
            else:
                self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["id_atras"] = id_linha - 1
                self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["id_frente"] = id_linha

###########################################################################################################
        "calcula a ponta do poligono se esse vier como extremidade"
        if self.dict_circ_desc["tipo_circulo"] == "extremidade":
            if self.dict_circ_desc["subtipo"] == "ponta":
                poligono_ponta = func_linhas.calc_poligono_ponta(
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["linha_largura"],
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 2]["linha_largura"]
                )
                self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["poligono_ponta"] = poligono_ponta
                self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["subtipo"] = "ponta"
コード例 #2
0
    def montar_linhas_retangular(self, li_ret_base, li_ret_largura):
        lin_base_plana_1 = li_ret_base[0].projectAs(self.projecao_plana)
        lin_base_plana_2 = li_ret_base[1].projectAs(self.projecao_plana)
        compri_total = lin_base_plana_1.length
        distancia = 0

        self.dict_poligono_descricao["metadados"]["bracos"][0] ={
                 "id_linha_ini":None,
                 "n_extremidades":2,
                 "ponta":None,
                 "base":None,
             }
        id_linha = 0
        id_li_extrem_ini = None
        id_li_extrem_fim = None
        while distancia < compri_total:
            self.dict_poligono_descricao["metadados"]["linhas"][id_linha] = {
                "id_linha_braco":id_linha,
                "id_frente":1,
                "id_atras":None,
                "linha_largura":None,
                "linha_app":None,
                "braco":None,
                "distancia":distancia,
                "tipo":None,
            }

            if compri_total - distancia < self.intervalo_entre_linhas:
                "determina a extremidade final"
                id_li_extrem_fim = id_linha
                self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["tipo"] = "extremidade"
                self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["subtipo"] = 'ponta'

            elif id_linha > 0:
                linha_ret = func_retangulo.calc_linha_ret(lin_base_plana_1, lin_base_plana_2, distancia, self.projecao_geo, self.projecao_geo)
                print linha_ret.WKT
                if not linha_ret.disjoint(self.poligono_ma):
                    linha_largura = linha_ret.intersect(self.poligono_ma, 2)
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["linha_largura"] = linha_largura
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["tipo"] = "meio"
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["id_atras"] = id_linha - 1
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha]["id_frente"] = id_linha + 1

                else:
                    distancia += self.intervalo_entre_linhas
                    continue
                if id_linha == 1:
                    id_li_extrem_ini = id_linha - 1
                    "determina o poligono da ponta final"
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["tipo"] = "extremidade"
                    self.dict_poligono_descricao["metadados"]["linhas"][id_linha - 1]["subtipo"] = 'ponta'

            id_linha += 1
            distancia += self.intervalo_entre_linhas

        #poligono ponta inicial
        poligono_ponta = func_linhas.calc_poligono_ponta(
            self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_ini + 1]["linha_largura"],
            self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_ini + 2]["linha_largura"]
        )
        self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_ini]["poligono_ponta"] = poligono_ponta

        #poligono ponta final
        poligono_ponta = func_linhas.calc_poligono_ponta(
            self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_fim - 1]["linha_largura"],
            self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_fim - 2]["linha_largura"]
        )
        self.dict_poligono_descricao["metadados"]["linhas"][id_li_extrem_fim]["poligono_ponta"] = poligono_ponta