Generieren von elliptischen Polygonen mit echten Kurven in der Datei-Geodatabase mit ArcPy?

9

Als Hintergrund entstand diese Frage aus dem Versuch, eine Frage zu beantworten, wie überlappende Polygone aus Linien generiert werden können, die vom Werkzeug "Tabelle zu Ellipse" ausgegeben werden.

Mit der ArcMap 10.1-Benutzeroberfläche ist es sehr einfach, echte Kurvenpolygone mithilfe des Ellipse- Konstruktionswerkzeugs in eine Datei-Geodatabase-Feature-Class zu digitalisieren.

Ist es möglich, elliptische Polygone mit echten Kurven zu schreiben, während Zeilen (arcpy.da.SearchCursor) aus einer Tabelle gelesen werden, die jeweils einen Mittelpunkt, eine Hauptachse, eine Nebenachse und einen Azimut enthält?

Ich hatte gehofft, dass mit arcpy.da.InsertCursor möglicherweise ein Token dafür verfügbar ist , aber es SHAPE@scheint durch die Unterstützung des Geometry- Objekts eingeschränkt zu sein, und das scheint keine echten Kurven zu enthalten.

PolyGeo
quelle
1
Ich habe mich umgesehen und das einzige, was ich gefunden habe, das etwas hilfreich sein könnte, ist das hier .
Paul
1
Und dafür könnte diese Frage
Antwort
Wenn Sie eine Antwort darauf schreiben möchten, stimme ich gerne zu, aber ich werde wahrscheinlich Accept for a ArcPy ohne ArcObjects-Antwort verlassen (die ich durch Verknüpfen mit einer ArcGIS-Idee bereitstellen werde, wenn dies niemand anderes tut).
PolyGeo
Ich weiß, dass dies ein alter Beitrag ist, aber ich habe einen Workaround-Weg gefunden, um dies mit arcpy zu tun. Es erfordert etwas Mathematik, aber siehe meine Antwort unten.
Crmackey

Antworten:

11

Während arcpy Geometry-Objekte keine echten Kurven unterstützen, implementierte Esri bei 10.3 True Curves in der REST-API und musste daher die JSON-Unterstützung für diese in FeatureSets implementieren. Sie können also arcpy dazu "austricksen", wenn Sie eine Kurve in einer JSON-Struktur erstellen .

Hier ein Beispiel: Erstellen Sie eine JSON-Datei mit echten Kurven (dies verwendet einen Kreisbogen und eine Bezier-Kurve).

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

Laden Sie das dann in einen Feature-Set und speichern Sie es in einer Feature-Class.

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

Und Boom, du hast echte Kurven! Folgendes wurde in ArcMap erstellt:

Geben Sie hier die Bildbeschreibung ein

In Ihrem Fall können Sie also möglicherweise eine JSON-Struktur erstellen, indem Sie entweder die ursprünglichen Features in einen Feature-Set umwandeln und mit dem JSON spielen oder indem Sie Zeilen in einem Suchcursor durchlaufen. Die Mathematik mag etwas schwierig sein, um das zu bekommen, was Sie wollen, ist aber definitiv machbar.


Ich sollte auch erwähnen, dass Sie keinen vollständigen Funktionsumfang bilden müssen. Sie können die JSON-Geometrie einfach auch direkt an das übergeben arcpy.AsShape(geojson, True), um ein Geometrieobjekt zurückzugewinnen.

Crmackey
quelle
1

Wir hatten das gleiche Problem, als wir Hunderte von Paketen aus rechtlichen Beschreibungen in eine Geodatabase ziehen mussten. COGO-Werkzeuge waren das einzige, mit dem wir echte Kurven zeichnen und beibehalten konnten. Leider sind COGO-Tools nicht skriptfähig.

Wir konnten jedoch rechtliche Beschreibungen in das TXT-Format konvertieren, um sie dann in das Traverse-Fenster zu laden und unsere Formen zu erstellen. Je nach Tabellenformat können Sie Ihre Tabellen (mit Python) in txt konvertieren und dann in das Traverse-Fenster laden.


Heute habe ich versucht, echte Kurvenkonturen in eine REA zu importieren, und bin auf das Add-In für die Kurvenkonvertierung gestoßen . Ich bin mir nicht sicher, ob es hilft, fand es aber nützlich, um echte Kurven zu manipulieren.

Barbarossa
quelle