Generazione di poligoni ellittici a curva reale nel file geodatabase usando ArcPy?


9

Come sfondo, questa domanda è nata dal tentativo di rispondere a una domanda su Come generare poligoni sovrapposti dalle linee di output dallo strumento Tabella a ellisse?

Utilizzando la GUI di ArcMap 10.1 è molto semplice digitalizzare i poligoni della curva reale in una classe di funzionalità di geodatabase di file utilizzando lo strumento di costruzione Ellipse ma ...

È possibile scrivere poligoni ellittici a curva vera durante la lettura di righe (arcpy.da.SearchCursor) da una tabella contenente un punto centrale, un asse maggiore, un asse minore e un azimut per ciascuno?

Speravo che ci potesse essere un token disponibile con arcpy.da.InsertCursor per farlo, ma SHAPE@sembra essere limitato da ciò che supporta l'oggetto Geometry e che non sembra includere curve vere.


1
Ho cercato in giro e l'unica cosa che ho trovato che potrebbe essere leggermente utile è questa .
Paul

1
E per questo, queste domande e risposte
blord-castillo,

Se vuoi scrivere una risposta su questo, sarò felice di votare, ma probabilmente lascerò Accept per una risposta ArcPy senza ArcObjects (che fornirò collegandomi a un'idea ArcGIS se nessun altro lo fa).
PolyGeo

So che questo è un vecchio post, ma ho trovato un modo alternativo per farlo con arcpy. Richiede un po 'di matematica, ma vedi la mia risposta di seguito.
Crmackey,

Risposte:


11

Mentre gli oggetti Geometry arcpy non supportano le curve reali, in 10.3, Esri ha implementato True Curves nell'API REST e quindi ha dovuto implementare il supporto JSON per loro in FeatureSet. Quindi puoi "ingannare" arcpy nel fare questo per te se crei una curva in una struttura JSON .

Ecco un esempio: crea un file JSON con curve vere (utilizza un arco circolare e una curva di Bezier), qualcosa del genere:

{   '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
        }
    }],
}

Quindi, caricalo in un set di funzionalità e salvalo in una classe Feature.

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

E boom, hai delle vere curve! Questo è ciò che ha creato in ArcMap:

inserisci qui la descrizione dell'immagine

Quindi, nel tuo caso, forse puoi costruire una struttura json lanciando le caratteristiche originali in un set di funzioni e giocando con JSON, oppure mentre esegui l'iterazione attraverso le righe in un cursore di ricerca. La matematica può essere un po 'complicata per ottenere ciò che vuoi, ma sicuramente è fattibile.


Dovrei anche menzionare che non devi formare un set completo di funzionalità, puoi semplicemente passare la geometria JSON direttamente arcpy.AsShape(geojson, True)anche nell'oggetto per recuperare un oggetto geometria.


1

Ci siamo imbattuti nello stesso problema quando abbiamo dovuto disegnare centinaia di pacchi da descrizioni legali in un geodatabase. Gli strumenti COGO erano l'unica cosa che ci avrebbe permesso di disegnare e mantenere curve vere. Sfortunatamente, gli strumenti COGO non sono scriptabili.

Tuttavia, siamo stati in grado di convertire le descrizioni legali in formato txt in modo da poterle poi caricare nella finestra di attraversamento per creare le nostre forme. A seconda del formato della tabella, è possibile (utilizzando Python) convertire le tabelle in txt e caricarle nella finestra di attraversamento.


Oggi ho cercato di importare contorni di curve reali in un FGDB e ho attraversato il componente aggiuntivo di conversione Curve . Non sono sicuro che aiuti, ma lo ho ritenuto utile per manipolare le vere curve.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.