3 votos

Edición de vértices sin eliminar las curvas verdaderas utilizando ArcPy

ArcMap 10.7.1 - Oracle 18c SDE.ST_GEOMETRY


Tengo una polilínea FC que tiene curvas reales .

Y tengo un script ArcPy que actualiza los valores M de los vértices en las líneas:

import arcpy
connection = "Database Connections\my_conn.sde"
feature_class = connection + "\my_owner.my_fc"
spatial_reference = arcpy.Describe(feature_class).spatialReference

with arcpy.da.Editor(connection) as edit_session:
    with arcpy.da.UpdateCursor(feature_class, "SHAPE@") as cursor:
        for row in cursor:
            geometry = row[0].densify("ANGLE", 10000, 0.174533)
            parts = arcpy.Array()
            for part in geometry:
                points = arcpy.Array()
                for point in part:
                    point.M = geometry.measureOnLine(point)
                    points.append(point)
                parts.append(points)
            row[0] = arcpy.Polyline(parts, spatial_reference)
            cursor.updateRow(row)

El script reconstruye y sustituye la geometría de las líneas. Por lo tanto, lamentablemente elimina las curvas verdaderas de las formas.

Antes de ejecutar el script:

enter image description here

Después de ejecutar el script:

enter image description here


Pregunta:

Con ArcPy, ¿hay alguna forma de editar vértices sin eliminar las curvas verdaderas del SHAPE?

Por ejemplo, ¿hay alguna forma de hacer algo así?

UpdateVertex (shape, partNum, vertexNum, [x, y, z, m]) 

Relacionado:

Curvas verdaderas = Maldad verdadera

Idea: ArcPy - Editar vértices sin eliminar curvas verdaderas

2voto

FelixIP Puntos 4035

Supongo que se puede manipular usando JSON.

Por ejemplo, esta expresión de calculadora de campo, cuando la ejecuto en un buffer de un punto:

import json
def wJson(shp):
 pnts = json.loads(shp.JSON)
 #esriJSON = arcpy.AsShape(pnts, True)
 return str(pnts)
#----
wJson( !Shape!)

Devoluciones:

{u'curveRings': [[[1727075.9359999998, 5946765.4923]], {u'a': [[1727075.9359999998, 5946765.4923], [1717013.4664801424, 5946765.4923], 0, 1]}]], u'spatialReference': {u'wkid': 2193, u'latestWkid': 2193}}

Que no es más que un diccionario. Puedes usarlo:

esriJSON = arcpy.AsShape(pnts, True)

después de modificar el diccionario.

Véase también El método getPart() devuelve una geometría incorrecta de la memoria intermedia en ArcGIS

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