Generowanie eliptycznych wielokątów w prawdziwej krzywej w geobazie pliku za pomocą ArcPy?

9

Jako tło to pytanie powstało z próby odpowiedzi na pytanie: Jak wygenerować nakładające się wielokąty z linii wyprowadzanych z narzędzia Tabela do elipsy?

Za pomocą GUI ArcMap 10.1 bardzo łatwo jest digitalizować prawdziwe wielokąty krzywej do klasy obiektów geobazy za pomocą narzędzia do budowy Ellipse, ale ...

Czy możliwe jest pisanie wielokątów eliptycznych z prawdziwą krzywą podczas odczytywania wierszy (arcpy.da.SearchCursor) z tabeli zawierającej punkt środkowy, oś główną, oś podrzędną i azymut dla każdego z nich?

Miałem nadzieję, że w tym celu może być dostępny token z arcpy.da.InsertCursor , ale SHAPE@wydaje się, że jest ograniczony przez to, co obsługuje obiekt Geometry , i to nie wydaje się zawierać prawdziwych krzywych.

PolyGeo
źródło
1
Rozglądam się i jedyną rzeczą, która może być nieco pomocna, jest to .
Paul
1
W tym celu te pytania i odpowiedzi mogą być pomocne: gis.stackexchange.com/questions/80/…
blord-castillo
Jeśli chcesz napisać odpowiedź na ten temat, chętnie poprę głos, ale prawdopodobnie zostawię opcję Akceptuj dla ArcPy bez odpowiedzi ArcObjects (którą podam, łącząc się z pomysłem ArcGIS, jeśli nikt inny tego nie zrobi).
PolyGeo
Wiem, że to stary post, ale znalazłem sposób na obejście tego problemu za pomocą arcpy. To wymaga trochę matematyki, ale zobacz moją odpowiedź poniżej.
crmackey

Odpowiedzi:

11

Podczas gdy obiekty Arcpy Geometry nie obsługują prawdziwych krzywych, w wersji 10.3 Esri zaimplementowała Prawdziwe krzywe w interfejsie API REST, a zatem musiała zaimplementować dla nich obsługę JSON w FeatureSets. Możesz więc „oszukać” arkady, aby zrobić to za Ciebie, jeśli utworzysz krzywą w strukturze JSON .

Oto przykład: utwórz plik JSON z prawdziwymi krzywymi (używa to łuku kołowego i krzywej Beziera), mniej więcej tak:

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

Następnie załaduj to do zestawu funkcji i zapisz w klasie elementów.

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

I bum, masz prawdziwe krzywe! Oto, co stworzył w ArcMap:

wprowadź opis zdjęcia tutaj

Więc w twoim przypadku, być może możesz zbudować strukturę json, albo rzutując oryginalne funkcje do zestawu funkcji i grając JSON, lub podczas iteracji między wierszami kursora wyszukiwania. Matematyka może być trochę trudna, aby uzyskać to, czego chcesz, ale na pewno jest wykonalna.


Powinienem również wspomnieć, że nie musisz tworzyć pełnego zestawu funkcji, możesz po prostu przekazać geometrię JSON również bezpośrednio do, arcpy.AsShape(geojson, True)aby odzyskać obiekt geometrii.

Crmackey
źródło
1

Napotkaliśmy ten sam problem, gdy musieliśmy narysować setki paczek z legalnych opisów do geobazy. Narzędzia COGO były jedyną rzeczą, która pozwoliłaby nam rysować i zachować prawdziwe krzywe. Niestety narzędzia COGO nie są skryptowalne.

Byliśmy jednak w stanie przekonwertować opisy prawne na format txt, dzięki czemu mogliśmy następnie załadować je do okna trawersu, aby utworzyć nasze kształty. W zależności od formatu tabeli możesz (używając Pythona) przekonwertować tabele na txt, a następnie załadować je do okna trawersu.


Dzisiaj próbowałem zaimportować prawdziwe kontury krzywej do FGDB i natknąłem się na dodatek do konwersji Curve . Nie jestem pewien, czy to pomaga, ale uznałem, że jest to przydatne do manipulowania prawdziwymi krzywymi.

Barbarossa
źródło