Gerando polígonos elípticos de curva verdadeira no banco de dados geográfico de arquivos usando o ArcPy?

9

Como pano de fundo, essa questão surgiu da tentativa de responder a uma pergunta sobre Como gerar polígonos sobrepostos a partir de linhas de saída da ferramenta Table To Ellipse?

Usando a GUI do ArcMap 10.1, é muito fácil digitalizar polígonos de curva verdadeira em uma classe de recurso de geodatabase de arquivo usando a Ellipse Construction Tool ...

É possível escrever polígonos elípticos de curvas verdadeiras durante a leitura de linhas (arcpy.da.SearchCursor) de uma tabela que contém um ponto central, um eixo principal, um eixo menor e um azimute para cada um?

Eu esperava que houvesse um token disponível no arcpy.da.InsertCursor para fazer isso, mas SHAPE@parece ser limitado pelo que o objeto Geometry suporta, e isso não parece incluir curvas verdadeiras.

PolyGeo
fonte
11
Eu pesquisei, e a única coisa que achei que pode ser um pouco útil é essa .
Paul
11
E por isso, este Q & A podem ser úteis: gis.stackexchange.com/questions/80/...
blord-castillo
Se você quiser escrever uma resposta sobre isso, ficarei feliz em votar, mas provavelmente deixarei a opção Accept for a ArcPy sem ArcObjects (que fornecerei ao vincular a uma idéia do ArcGIS se ninguém mais o fizer).
PolyGeo
Eu sei que este é um post antigo, mas achei uma maneira de fazer isso com o arcpy. Requer alguma matemática, mas veja minha resposta abaixo.
Crmackey 5/05

Respostas:

11

Embora os objetos Geometry do arcpy não suportem curvas verdadeiras, na 10.3, a Esri implementou True Curves na API REST e, portanto, teve que implementar o suporte JSON para eles no FeatureSets. Portanto, você pode "enganar" o arcpy para fazer isso por você se criar uma curva em uma estrutura JSON .

Aqui está um exemplo: crie um arquivo JSON com curvas verdadeiras (isso usa um arco circular e uma curva de Bezier), algo como isto:

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

Em seguida, carregue isso em um conjunto de recursos e salve-o em uma 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 bum, você tem curvas verdadeiras! Isto é o que ele criou no ArcMap:

insira a descrição da imagem aqui

Portanto, no seu caso, talvez você possa construir uma estrutura json convertendo os recursos originais para um conjunto de recursos e reproduzindo com o JSON, ou enquanto itera pelas linhas em um cursor de pesquisa. A matemática pode ser um pouco complicada para conseguir o que você deseja, mas definitivamente é factível.


Devo mencionar também que você não precisa formar um conjunto completo de recursos; basta passar a geometria JSON diretamente para o interior arcpy.AsShape(geojson, True)para recuperar um objeto de geometria.

crmackey
fonte
1

Tivemos o mesmo problema quando tivemos que extrair centenas de parcelas de descrições legais para um geodatabase. As ferramentas COGO eram a única coisa que nos permitia desenhar e reter curvas verdadeiras. Infelizmente, as ferramentas COGO não são programáveis.

No entanto, conseguimos converter descrições legais para o formato txt, através do qual poderíamos carregá-las na janela transversal para criar nossas formas. Dependendo do formato da tabela, você pode (usando Python) converter suas tabelas em txt e carregá-las na janela transversal.


Hoje, tenho tentado importar contornos de curvas verdadeiras para um FGDB e deparei-me com o suplemento de conversão de curvas . Não tenho certeza se isso ajuda, mas achei útil para manipular curvas verdadeiras.

Barbarossa
fonte