1 votos

¿Cómo crear un polígono leyendo la geometría de otra capa de polígono utilizando ArcPy?

Básicamente, estoy intentando generar geometrías poligonales basadas en la selección de otra capa poligonal. Estos polígonos serán copiados en un nuevo esquema vacío. Evito utilizar las operaciones Append y Copy ya que no cumplen con todos los requisitos necesarios para mi salida. También encontré que los cursores me ayudan a lograr el resultado deseado mucho más rápido. Como resultado, necesito imprimir las coordenadas del polígono como una cadena de texto de una sola línea en lugar de varias líneas. Esta salida se utilizará como una variable para generar el polígono más adelante en el código.

for row in arcpy.da.SearchCursor("countAddrPnts_lyr", ["OID@", "SHAPE@", "SITUS_STREET_NUMBER_END2", "SITUS_STREET_NUMBER2"]):
x = 0
for part in row[1]:
    for pnt in part:
        if pnt:
            pntArray = ("arcpy.Point(" + "{}, {}".format(pnt.X, pnt.Y) + "),")
            print pntArray
    x += 1

La salida actual tiene este aspecto:

arcpy.Point(907781.079669, 628629.095669),
arcpy.Point(907782.765669, 628579.116669),
arcpy.Point(907649.596669, 628574.910669),
arcpy.Point(907647.068669, 628649.878669),
arcpy.Point(907780.236669, 628654.092669),
arcpy.Point(907781.079669, 628629.095669),

Necesito que tenga el siguiente aspecto:

arcpy.Point(907781.079669, 628629.095669), arcpy.Point(907782.765669, 628579.116669), arcpy.Point(907649.596669, 628574.910669), arcpy.Point(907647.068669, 628649.878669), arcpy.Point(907780.236669, 628654.092669), arcpy.Point(907781.079669, 628629.095669)

Tal vez mi enfoque no sea el correcto, así que cualquier sugerencia será bienvenida.

Por cierto, no soy un programador en sí, por lo tanto, mi código no será el más bonito, pero está haciendo el trabajo.

En este otro Correo electrónico: puedes descargar los datos en formato GDB, así como el py script.

1voto

Marcin Puntos 11

Lo que llamas "tu salida" es en realidad una pieza de salida por punto. Tienes que almacenarlo todo en la misma variable, añadiendo a ella cada vez (no probado):

for row in arcpy.da.SearchCursor("countAddrPnts_lyr", ["OID@", "SHAPE@", "SITUS_STREET_NUMBER_END2", "SITUS_STREET_NUMBER2"]):
    x = 0
    poly_text = ""
    for part in row[1]:
        for pnt in part:
            if pnt:
                poly_text += "arcpy.Point(" + "{}, {}".format(pnt.X, pnt.Y) + "),"
    print poly_text # should contain all points' text
    x += 1

1voto

Tedy Puntos 46

Un poco de comprensión de la lista y la .join lo hará.

pntString = ", ".join (["arcpy.Point ({}, {})".format (xy [0], xy [1]) for xy
                     in arcpy.da.SearchCursor ("countAddrPnts_lyr", "SHAPE@XY")])

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X