Генерация эллиптических многоугольников истинной кривой в файловой базе геоданных с использованием ArcPy?


9

В качестве фона, этот вопрос возник из попытки ответить на вопрос о том, как генерировать перекрывающиеся полигоны из линий, выводимых из инструмента «Таблица в эллипс»?

Используя графический интерфейс ArcMap 10.1, очень просто оцифровать полигоны истинной кривой в класс пространственных объектов файловой базы геоданных, используя Ellipse Construction Tool, но ...

Можно ли написать эллиптические многоугольники истинной кривой при чтении строк (arcpy.da.SearchCursor) из таблицы, содержащей центральную точку, главную ось, вспомогательную ось и азимут для каждого?

Я надеялся, что для этого может быть доступен токен с arcpy.da.InsertCursor , но, SHAPE@похоже, он ограничен тем, что поддерживает объект Geometry , и в него не входят истинные кривые.


1
Я искал вокруг, и единственное, что я нашел, что может быть немного полезным, это .
Пол

1
И для этого, эти вопросы и ответы могут быть полезны: gis.stackexchange.com/questions/80/…
blord-castillo

Если вы хотите написать ответ по этому вопросу, я с радостью поддержу вас, но, возможно, я оставлю Accept для ArcPy без ответа ArcObjects (который я предоставлю, связавшись с ArcGIS Idea, если никто другой этого не сделает).
PolyGeo

Я знаю, что это старый пост, но я нашел способ сделать это с помощью arcpy. Это требует некоторой математики, но см. Мой ответ ниже.
crmackey

Ответы:


11

Хотя объекты arcpy Geometry не поддерживают истинные кривые, в 10.3 Esri реализовала True Curves в REST API и поэтому должна была реализовать поддержку JSON для них в FeatureSets. Таким образом, вы можете «обмануть» arcpy, сделав это за вас, если создадите кривую в структуре JSON .

Вот пример: создайте файл JSON с истинными кривыми (для этого используются круговая дуга и кривая Безье), примерно так:

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

Затем загрузите его в набор функций и сохраните его в классе объектов.

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

И бум, у вас есть истинные изгибы! Вот что он создал в ArcMap:

введите описание изображения здесь

Таким образом, в вашем случае, возможно, вы можете построить структуру json, либо приведя исходные объекты к набору функций и играя с JSON, либо во время итерации по строкам в поисковом курсоре. Математика может быть немного сложнее, чтобы получить то, что вы хотите, но, безусловно, выполнимо.


Я также должен отметить, что вам не нужно формировать полный набор объектов, вы можете просто передать геометрию JSON непосредственно в arcpy.AsShape(geojson, True)объект, чтобы вернуть объект геометрии.


1

Мы столкнулись с той же проблемой, когда нам нужно было вывести сотни посылок из юридических описаний в базу геоданных. Инструменты COGO были единственным, что позволило бы нам рисовать и сохранять истинные кривые. К сожалению, инструменты COGO не являются сценариями.

Однако мы смогли преобразовать юридические описания в текстовый формат, после чего мы могли бы загрузить их в окно перемещения для создания наших фигур. В зависимости от формата таблицы вы можете (используя Python) преобразовать ваши таблицы в txt, а затем загрузить их в окно перемещения.


Сегодня я пытался импортировать истинные контуры кривой в FGDB и наткнулся на надстройку преобразования Curve . Не уверен, поможет ли это, но подумал, что это полезно для манипулирования истинными кривыми.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.