def dissecar_poligono(self): "gerar os pontos que percorrera as bordas do poligono, gerar borda" self.borda_linha_geo = self.poligono_ma.boundary() self.borda_linha_plana = self.borda_linha_geo.projectAs(self.projecao_plana) func_linhas.borda_linha_geo = self.borda_linha_geo func_linhas.borda_linha_plana = self.borda_linha_plana self.dict_lista_pontos = \ func_linhas.pontos_aolongo_linha(self.borda_linha_geo)
def montar_linhas_voronoi(self): #recolocar os pontos por intervalo import func_voronoi self.dict_poligono_descricao["metodo"] = "voronoi" array = arcpy.Array() intervalo = 30 dict_pontos_linha = func_linhas.pontos_aolongo_linha(self.borda_linha_geo, intervalo) distancia = 0 compri_total = dict_pontos_linha["compri_total"] lista_pontos_voronoi = [] while distancia < compri_total: ponto = dict_pontos_linha[distancia] array.add(ponto.labelPoint) lista_pontos_voronoi.append([ponto.labelPoint.X, ponto.labelPoint.Y]) distancia += intervalo multiPoint = arcpy.Multipoint(array) del array print "pontos na borda finalizado" #calcular linha central linha_voronoi = func_voronoi.voronoi_pontos_shapely(lista_pontos_voronoi, self.poligono_ma, self.poligono_ma.boundary(), self.projecao_geo, self.diretorio_saida, self.fid) print "linha central passo 1 finalizado" #limpar falhas linha_central = func_voronoi.limpar_linha(linha_voronoi, self.projecao_geo, self.projecao_plana) print "limpar falhas 1 finalizado" listPtTodos, listPtInter, listPtFim = func_voronoi.PontosInterFim(linha_central) print "pontos fim e inter 1 finalizado" linha_central = func_voronoi.limpar_linha_CircBorda(listPtFim, linha_central, self.poligono_ma, self.borda_linha_geo, self.projecao_plana) del listPtTodos, listPtInter, listPtFim print "linha central 2 finalizado" listPtTodos, listPtInter, listPtFim = func_voronoi.PontosInterFim(linha_central) print "pontos fim e inter 2 finalizado" poligonos_separados = func_voronoi.cortar_conexoes( self.poligono_ma, linha_central, listPtInter, raio = 0.005 ) listaLinhaPoligono = func_voronoi.indetiLinePoly(poligonos_separados, linha_central) print "cortar conexoes finalizado" x_ext_max = self.poligono_ma.extent.XMax + 0.03 y_ext_max = self.poligono_ma.extent.YMax + 0.03 x_ext_min = self.poligono_ma.extent.XMin - 0.03 y_ext_min = self.poligono_ma.extent.YMin - 0.03 li_pontos_extent = [ [x_ext_max,y_ext_max], [x_ext_min,y_ext_min] ] id_linha_braco = 0 id_linha = 0 for linhaPart, poligonoPart in listaLinhaPoligono: linhaarcpy = arcpy.FromWKT(linhaPart.wkt, arcpy.SpatialReference(4674)) intervalo = 12 dict_pontos_linha = func_linhas.pontos_aolongo_linha(linhaarcpy, intervalo) compri_total = dict_pontos_linha["compri_total"] li_pontos_part = [] array = arcpy.Array() distancia = 0 while distancia < compri_total: ponto = dict_pontos_linha[distancia] array.add(ponto.labelPoint) li_pontos_part.append([ponto.labelPoint.X, ponto.labelPoint.Y]) distancia += intervalo try: lista_linhas_final, polyline_final = func_voronoi.gerar_linhas_largura(poligonoPart, li_pontos_part, li_pontos_extent, linhaPart, self.projecao_geo) except: print "ERRO: linhas largura nao funcionaram, " + linhaPart.wkt continue count_li = 0 total = len(lista_linhas_final) for linha_largura in lista_linhas_final: if count_li == 0: self.dict_poligono_descricao["metadados"]["linhas"][id_linha] = { "id_linha_braco":id_linha_braco, "id_frente":id_linha + 1, "id_atras":None, "linha_largura":linha_largura, "linha_app":None, "braco":None, "distancia":None, "tipo":"meio", } elif count_li == (total-1): self.dict_poligono_descricao["metadados"]["linhas"][id_linha] = { "id_linha_braco":id_linha_braco, "id_frente":None, "id_atras":id_linha - 1, "linha_largura":linha_largura, "linha_app":None, "braco":None, "distancia":None, "tipo":"meio", } else: self.dict_poligono_descricao["metadados"]["linhas"][id_linha] = { "id_linha_braco":id_linha_braco, "id_frente":id_linha + 1, "id_atras":id_linha - 1, "linha_largura":linha_largura, "linha_app":None, "braco":None, "distancia":None, "tipo":"meio", } id_linha += 1 count_li += 1 id_linha_braco += 1 print "linhas de largura finalizado" pass