¿Generando polígonos elípticos de curva verdadera en la geodatabase de archivos usando ArcPy?


9

Como antecedentes, esta pregunta surgió al tratar de responder una pregunta sobre ¿Cómo generar polígonos superpuestos a partir de las líneas de salida de la herramienta Tabla a elipse?

Usando la GUI de ArcMap 10.1, es muy fácil digitalizar polígonos de curva verdadera en una clase de entidad de geodatabase de archivos usando la Herramienta de construcción Ellipse, pero ...

¿Es posible escribir polígonos elípticos de curva verdadera al leer filas (arcpy.da.SearchCursor) desde una tabla que contiene un punto central, un eje mayor, un eje menor y un acimut para cada uno?

Tenía la esperanza de que podría haber un token disponible con arcpy.da.InsertCursor para hacer esto, pero SHAPE@parece estar limitado por lo que admite el objeto Geometry , y eso no parece incluir curvas verdaderas.


1
He buscado alrededor, y lo único que encontré que podría ser un poco útil es esto .
Paul

1
Y para eso, estas preguntas y respuestas pueden ser útiles: gis.stackexchange.com/questions/80/…
blord-castillo

Si desea escribir una respuesta sobre esto, felizmente votaré, pero probablemente dejaré Aceptar para una respuesta ArcPy sin ArcObjects (que proporcionaré al vincular a una Idea ArcGIS si nadie más lo hace).
PolyGeo

Sé que esta es una publicación antigua, pero encontré una forma alternativa de hacer esto con arcpy. Requiere algunas matemáticas, pero vea mi respuesta a continuación.
crmackey

Respuestas:


11

Si bien los objetos de geometría arcpy no admiten curvas verdaderas, en 10.3, Esri implementó Curvas verdaderas en la API REST y, por lo tanto, tuvo que implementar el soporte JSON para ellos en FeatureSets. Por lo tanto, puede "engañar" a Arcpy para que haga esto por usted si crea una curva en una estructura JSON .

Aquí hay un ejemplo: cree un archivo JSON con curvas verdaderas (esto usa un arco circular y una curva de Bezier), algo como esto:

{   'fieldAliases': {
        'Id': 'Id',
        'FID': 'FID'
    },
    'fields': [{
        'alias': 'FID',
        'type': 'esriFieldTypeOID',
        'name': 'FID'
    }, {
        'alias': 'Id',
        'type': 'esriFieldTypeInteger',
        'name': 'Id'
    }],
    'displayFieldName': '',
    'spatialReference': {
        'wkid': 103734,
        'latestWkid': 103734
    },
    'geometryType': 'esriGeometryPolyline'
    'features': [{
        'geometry': {
                      "curvePaths":[[
                        [6,3],[5,3],
                        {"b":[[3,2],[6,1],[2,4]]},
                        [1,2],
                        {"a":[[0,2],[0,3],0,0,2.094395102393195,1.83,0.33333333]}
                      ]]
                    },
        'attributes': {
            'Id': 0,
            'FID': 0
        }
    }],
}

Luego, cárguelo en un conjunto de características y guárdelo en una clase de entidad.

fs = arcpy.FeatureSet()
fs.load(r'C:\path_to_your_json_file.json')
arcpy.management.CopyFeatures(fs, r'in_memory\test_curve')

Y boom, tienes curvas verdaderas! Esto es lo que creó en ArcMap:

ingrese la descripción de la imagen aquí

Entonces, en su caso, tal vez pueda construir una estructura json al convertir las características originales en un conjunto de características y jugar con el JSON, o al iterar a través de filas en un cursor de búsqueda. Las matemáticas pueden ser un poco complicadas para obtener lo que quieres, pero definitivamente es factible.


También debo mencionar que no tiene que formar un conjunto completo de características, simplemente puede pasar la geometría JSON directamente al arcpy.AsShape(geojson, True)también para recuperar un objeto de geometría.


1

Nos encontramos con el mismo problema cuando tuvimos que dibujar cientos de parcelas de descripciones legales en una geodatabase. Las herramientas COGO eran lo único que nos permitiría dibujar y retener curvas verdaderas. Desafortunadamente, las herramientas COGO no son programables.

Sin embargo, pudimos convertir las descripciones legales a formato txt, por lo que pudimos cargarlas en la ventana transversal para crear nuestras formas. Dependiendo del formato de la tabla, podría (usando Python) convertir sus tablas a txt y luego cargarlas en la ventana transversal.


Hoy he estado tratando de importar contornos de curvas verdaderas en un FGDB y me encontré con el complemento de conversión de curvas . No estoy seguro de si ayuda, pero lo consideró útil para manipular curvas verdaderas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.