def calc_linhas_largura(dict_circ_desc, ponto): """criar linhas de largura""" if dict_circ_desc["tipo_circulo"] == "meio": linha_nao_intersecta_ponto = None point_circ = Point() point_circ.X = dict_circ_desc["pt_medios_circ"]["x_ptm"] point_circ.Y = dict_circ_desc["pt_medios_circ"]["y_ptm"] array = Array([point_circ, ponto.getPart(0)]) linha_circulo = Polyline(array, projecao_geo) for parte_linha in dict_circ_desc["partes"]: if not dict_circ_desc["partes"][parte_linha]["cruza_ponto"]: linha_nao_intersecta_ponto = dict_circ_desc["partes"][parte_linha]["linha_geometria"] if linha_circulo.disjoint(linha_nao_intersecta_ponto): array.removeAll() point_circ = Point() point_circ.X = dict_circ_desc["pt_medios_circ"]["x_ptm_inv"] point_circ.Y = dict_circ_desc["pt_medios_circ"]["y_ptm_inv"] array = Array([point_circ, ponto.getPart(0)]) linha_circulo = Polyline(array, projecao_geo) linha_largura = linha_circulo.intersect(poligono_ma, 2) array.removeAll() else: linha_largura = linha_circulo.intersect(poligono_ma, 2) array.removeAll() return linha_largura, linha_circulo
def calcular_distancia_oposta(self,linha_circulo, ponto_1, poligono_ma_sirgas, diretorio_saida): linha_circulo_buffer = linha_circulo.projectAs(self.spatial_proj_lambert).buffer(1).projectAs(self.spatial_geo_sirgas_2000) linha_ma_cortado = poligono_ma_sirgas.difference(linha_circulo_buffer) if linha_ma_cortado.isMultipart: for n in range(linha_ma_cortado.partCount): parte = linha_ma_cortado.getPart(n) linha_ma_parte = Polyline(parte, self.spatial_geo_sirgas_2000) if linha_ma_parte.disjoint(ponto_1): pass else: linha_ma_distancia = linha_ma_parte.projectAs(self.spatial_proj_lambert).length + 1 return linha_ma_distancia
def calc_distancia_oposta(dict_circ_desc, ponto_1): linha_circulo = dict_circ_desc["linha_circulo"] linha_circulo_buffer = linha_circulo.projectAs(projecao_plana).buffer(1).projectAs(projecao_geo) linha_ma_cortado = poligono_ma.difference(linha_circulo_buffer) if linha_ma_cortado.isMultipart: for n in range(linha_ma_cortado.partCount): parte = linha_ma_cortado.getPart(n) linha_ma_parte = Polyline(parte, projecao_geo) if linha_ma_parte.disjoint(ponto_1): pass else: linha_ma_distancia = linha_ma_parte.projectAs(projecao_plana).length + 1 return linha_ma_distancia
def funcao_multipart(linha, ponto): dict_partes = {} if linha.isMultipart: for n in range(linha.partCount): parte = linha.getPart(n) linha_parte = Polyline(parte, projecao_geo) linha_parte_lambert = linha_parte.projectAs(projecao_plana) if linha_parte_lambert.length > 0.8: if linha_parte.disjoint(ponto): dict_partes["parte" + str(n)] = {"linha_array":parte, "cruza_ponto":False, "linha_geometria":linha_parte} else: dict_partes["parte" + str(n)] = {"linha_array":parte, "cruza_ponto":True, "linha_geometria":linha_parte} return dict_partes
def ponto_meio(self, list_partes, ponto): self.ptc_x = None self.ptc_y = None for parte in list_partes: parte_linha = Polyline(parte, self.spatial_geo_sirgas_2000) if parte_linha.disjoint(ponto): pontos_inte_linha_poligono = self.buffer_poligono_borda.intersect(parte_linha,1) self.pt1_x = pontos_inte_linha_poligono.getPart(0).X self.pt1_y = pontos_inte_linha_poligono.getPart(0).Y self.pt2_x = pontos_inte_linha_poligono.getPart(1).X self.pt2_y = pontos_inte_linha_poligono.getPart(1).Y self.ptc_x, self.ptc_y, self.ptc_x_inv, self.ptc_y_inv = PtCircBorda(self.x_b,self.y_b,self.pt1_x,self.pt1_y,self.pt2_x,self.pt2_y).ponto_circ_borda() return self.ptc_x, self.ptc_y
def funcao_multipart(self, linha, ponto): list_partes = [] if linha.isMultipart: for n in range(linha.partCount): parte = linha.getPart(n) linha_parte = Polyline(parte,self.spatial_geo_sirgas_2000) linha_parte_lambert = linha_parte.projectAs(self.spatial_proj_lambert) if linha_parte_lambert.length > 0.8: list_partes.append(parte) if linha_parte.disjoint(ponto): self.dict_partes["parte" + str(n)] = {"linha_array":parte, "cruza_ponto":False, "linha_geometria":linha_parte} else: self.dict_partes["parte" + str(n)] = {"linha_array":parte, "cruza_ponto":True, "linha_geometria":linha_parte} return list_partes
def ponto_meio(ponto, dict_circulo, circ_borda): """funcao para gerar o ponto metade""" x_ptc = dict_circulo["pt_centro_circ"]["x_ptc"] y_ptc = dict_circulo["pt_centro_circ"]["y_ptc"] for parte_n in dict_circulo["partes"]: parte_linha = Polyline(dict_circulo["partes"][parte_n]["linha_array"], projecao_geo) if parte_linha.disjoint(ponto): pontos_inte_linha_poligono = circ_borda.intersect(parte_linha,1) x_pt1 = pontos_inte_linha_poligono.getPart(0).X y_pt1 = pontos_inte_linha_poligono.getPart(0).Y x_pt2 = pontos_inte_linha_poligono.getPart(1).X y_pt2 = pontos_inte_linha_poligono.getPart(1).Y x_ptm, y_ptm, x_ptm_inv, y_ptm_inv = PtCircBorda(x_ptc,y_ptc,x_pt1, y_pt1, x_pt2, y_pt2).ponto_circ_borda() return x_ptm, y_ptm, x_ptm_inv, y_ptm_inv
def linha_de_largura(self, dict_descricao, ponto): if dict_descricao["tipo"] == "meio": linha_nao_intersecta_ponto = None point_circ = Point() point_circ.X = dict_descricao["ptc_x"] point_circ.Y = dict_descricao["ptc_y"] array = Array([point_circ, ponto.getPart(0)]) linha_circulo = Polyline(array,self.spatial_geo_sirgas_2000) for parte_linha in self.dict_partes: if self.dict_partes[parte_linha]["cruza_ponto"] == False: linha_nao_intersecta_ponto = self.dict_partes[parte_linha]["linha_geometria"] if linha_circulo.disjoint(linha_nao_intersecta_ponto): array.removeAll() point_circ = Point() point_circ.X = self.ptc_x_inv point_circ.Y = self.ptc_y_inv array = Array([point_circ, ponto.getPart(0)]) linha_circulo = Polyline(array,self.spatial_geo_sirgas_2000) linha_largura = linha_circulo.intersect(self.poligono_ma_geo, 2) array.removeAll() else: linha_largura = linha_circulo.intersect(self.poligono_ma_geo, 2) array.removeAll() return linha_largura, linha_circulo