Menghasilkan true poligon elips kurva dalam file geodatabase menggunakan ArcPy?

9

Sebagai latar belakang, pertanyaan ini muncul karena mencoba menjawab pertanyaan tentang Bagaimana cara menghasilkan poligon yang tumpang tindih dari garis keluaran dari alat Table To Ellipse?

Dengan menggunakan ArcMap 10.1 GUI, sangat mudah untuk mendigitalkan poligon kurva sebenarnya ke dalam kelas fitur file geodatabase menggunakan Ellipse Construction Tool tetapi ...

Apakah mungkin untuk menulis poligon elips kurva sejati saat membaca baris (arcpy.da.SearchCursor) dari tabel yang berisi titik tengah, sumbu utama, sumbu kecil, dan azimuth untuk masing-masing?

Saya berharap bahwa mungkin ada token yang tersedia dengan arcpy.da.InsertCursor untuk melakukan ini, tetapi SHAPE@tampaknya dibatasi oleh apa yang didukung oleh objek Geometri , dan yang tampaknya tidak menyertakan kurva sejati.

PolyGeo
sumber
1
Saya sudah mencari-cari, dan satu-satunya hal yang saya temukan yang mungkin sedikit membantu adalah ini .
Paul
1
Dan untuk itu, T&J ini mungkin bermanfaat: gis.stackexchange.com/questions/80/…
blord-castillo
Jika Anda ingin menulis jawaban tentang hal ini, saya akan dengan senang hati memilihnya, tetapi saya mungkin akan meninggalkan Terima untuk ArcPy tanpa jawaban ArcObjects (yang akan saya berikan dengan menautkan ke Ide ArcGIS jika tidak ada orang lain yang melakukannya).
PolyGeo
Saya tahu ini adalah posting lama, tetapi saya menemukan solusi untuk melakukannya dengan arcpy. Memang membutuhkan beberapa matematika, tetapi lihat jawaban saya di bawah ini.
crmackey

Jawaban:

11

Sementara objek Geometry arcpy tidak mendukung kurva sejati, pada 10.3, Esri mengimplementasikan Kurva Benar di API REST, dan karenanya harus mengimplementasikan dukungan JSON untuk mereka di FeatureSets. Jadi Anda bisa "menipu" arcpy agar melakukan ini untuk Anda jika Anda membuat kurva dalam struktur JSON .

Berikut ini contohnya: buat file JSON dengan kurva sejati (ini menggunakan busur lingkaran dan kurva Bezier), sesuatu seperti ini:

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

Kemudian, muat ke dalam set fitur dan simpan ke kelas Fitur.

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

Dan boom, Anda memiliki kurva sejati! Inilah yang dibuat di ArcMap:

masukkan deskripsi gambar di sini

Jadi dalam kasus Anda, mungkin Anda bisa membangun struktur json dengan mem-casting fitur asli ke set fitur dan bermain dengan JSON, atau saat Anda beralih melalui baris dalam kursor pencarian. Matematika mungkin agak sulit untuk mendapatkan apa yang Anda inginkan, tetapi pasti bisa dilakukan.


Saya juga harus menyebutkan bahwa Anda tidak harus membentuk set fitur lengkap, Anda bisa meneruskan geometri JSON langsung ke arcpy.AsShape(geojson, True)juga untuk mendapatkan objek geometri kembali.

Crmackey
sumber
1

Kami mengalami masalah yang sama ketika kami harus menarik ratusan paket dari deskripsi hukum ke dalam sebuah geodatabase. Alat COGO adalah satu-satunya hal yang akan memungkinkan kami untuk menggambar dan mempertahankan kurva yang benar. Sayangnya, alat COGO tidak bisa skrip.

Namun, kami dapat mengonversi deskripsi hukum ke format txt sehingga kami dapat memuatnya ke jendela lintasan untuk membuat bentuk kami. Bergantung pada format tabel, Anda bisa (menggunakan Python) mengonversi tabel Anda menjadi txt dan kemudian memuatnya ke jendela lintasan.


Hari ini saya telah mencoba untuk mengimpor kontur kurva yang benar ke FGDB dan berlari melintasi add-in konversi Curve . Tidak yakin apakah itu membantu, tetapi berpikir itu berguna untuk memanipulasi kurva yang benar.

Barbarossa
sumber