Example #1
0
def gerar_linhas_largura(poligono, lista_pontos, li_pontos_extent, linha_part, projecao_geo):
    "retorna linhas entre par de pontos"
    spatialReference4674 = arcpy.SpatialReference(4674)
    linha_shapely = linha_part

    lista_linhas = []
    lista_linhas_final = []
    circvetores = PtCircBorda()
    diametroExtent = circvetores.distancia_dois_pontos(
        li_pontos_extent[0][0],li_pontos_extent[0][1],
        li_pontos_extent[1][0],li_pontos_extent[1][1],
    )
    if len(lista_pontos) <= 2:
        lista_pontos = [
            linha_part.coords[0],
            [linha_part.centroid.x,linha_part.centroid.y],
            linha_part.coords[-1],
        ]
    total_index = len(lista_pontos)
    for Id in xrange(total_index-1):
        ponto1 = lista_pontos[Id]
        ponto2 = lista_pontos[Id+1]
        ptm_x = (ponto1[0] + ponto2[0])/2
        ptm_y = (ponto1[1] + ponto2[1])/2
        circvetores = PtCircBorda(ptm_x, ptm_y)
        ptx_m, pty_m, ptx_inv, pty_inv = \
        circvetores.retorna_pontos_metade_entre_vetores(ponto1[0], ponto1[1],ponto2[0], ponto2[1], diametroExtent)
        line_shapely = shapely.geometry.LineString([[ptx_m, pty_m], [ptx_inv, pty_inv]])
        ponto_m = shapely.geometry.Point([ptm_x, ptm_y])
        linha_largura = line_shapely.intersection(poligono)

        if linha_largura._is_empty:
            continue
        try:
            if linha_largura.type != "LineString":
                bufferM = ponto_m.buffer(0.000005)
                prepared_bufferM = shapely.prepared.prep(bufferM)
                hits = filter(prepared_bufferM.intersects, linha_largura)
                linha_largura = hits[0]
            polyline = arcpy.FromWKT(linha_largura.wkt, spatialReference4674)
        except:
            continue


        lista_linhas_final.append(polyline)
        lista_linhas.append(linha_largura)
    line_union = shapely.ops.unary_union(lista_linhas)
    polyline_final = arcpy.FromWKT(line_union.wkt,spatialReference4674)
    return lista_linhas_final, polyline_final