Vous générez des polygones elliptiques à courbe vraie dans la géodatabase fichier à l'aide d'ArcPy?


9

En arrière-plan, cette question est née de la tentative de réponse à une question sur Comment générer des polygones qui se chevauchent à partir des lignes sorties de l'outil Table vers Ellipse?

À l'aide de l'interface graphique d'ArcMap 10.1, il est très facile de numériser de vrais polygones de courbe en une classe d'entités de géodatabase fichier à l'aide de l' outil de construction Ellipse, mais ...

Est-il possible d'écrire des polygones elliptiques à courbe vraie lors de la lecture de lignes (arcpy.da.SearchCursor) à partir d'une table contenant un point central, un axe principal, un axe mineur et un azimut pour chacun?

J'avais espéré qu'il pourrait y avoir un jeton disponible avec arcpy.da.InsertCursor pour ce faire, mais SHAPE@semble être limité par ce que l' objet Geometry prend en charge, et cela ne semble pas inclure de vraies courbes.


1
J'ai cherché autour, et la seule chose que j'ai trouvée qui pourrait être légèrement utile est la suivante .
Paul

1
Et pour cela, cette Q&R pourrait être utile: gis.stackexchange.com/questions/80/…
blord-castillo

Si vous souhaitez rédiger une réponse à ce sujet, je voterai volontiers, mais je laisserai probablement Accepter pour une réponse ArcPy sans ArcObjects (que je fournirai en créant un lien vers une idée ArcGIS si personne d'autre ne le fait).
PolyGeo

Je sais que c'est un ancien post, mais j'ai trouvé un moyen de contourner cela avec arcpy. Cela nécessite quelques calculs, mais voir ma réponse ci-dessous.
crmackey

Réponses:


11

Bien que les objets Arcpy Geometry ne prennent pas en charge les vraies courbes, à la version 10.3, Esri a implémenté les vraies courbes dans l'API REST et a donc dû implémenter la prise en charge JSON dans FeatureSets. Vous pouvez donc "tromper" arcpy en le faisant pour vous si vous créez une courbe dans une structure JSON .

Voici un exemple: créez un fichier JSON avec de vraies courbes (cela utilise un arc circulaire et une courbe de Bézier), quelque chose comme ceci:

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

Ensuite, chargez-le dans un ensemble d'entités et enregistrez-le dans une classe d'entités.

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

Et boom, vous avez de vraies courbes! Voici ce qu'il a créé dans ArcMap:

entrez la description de l'image ici

Donc, dans votre cas, vous pouvez peut-être créer une structure json en convertissant les fonctionnalités originales dans un ensemble de fonctionnalités et en jouant avec le JSON, ou en parcourant les lignes d'un curseur de recherche. Le calcul peut être un peu délicat pour obtenir ce que vous voulez, mais c'est certainement faisable.


Je dois également mentionner que vous n'avez pas besoin de former un ensemble complet de fonctionnalités, vous pouvez simplement passer la géométrie JSON directement dans le arcpy.AsShape(geojson, True)ainsi pour récupérer un objet géométrique.


1

Nous avons rencontré le même problème lorsque nous avons dû dessiner des centaines de parcelles de descriptions légales dans une géodatabase. Les outils COGO étaient la seule chose qui nous permettrait de dessiner et de conserver de vraies courbes. Malheureusement, les outils COGO ne sont pas scriptables.

Cependant, nous avons pu convertir les descriptions légales au format txt, ce qui nous a permis de les charger dans la fenêtre de cheminement pour créer nos formes. Selon le format de la table, vous pouvez (à l'aide de Python) convertir vos tables en txt, puis les charger dans la fenêtre de cheminement.


Aujourd'hui, j'ai essayé d'importer de vrais contours de courbe dans un FGDB et j'ai parcouru le complément de conversion Curve . Je ne sais pas si cela aide, mais je l'ai trouvé utile pour manipuler de vraies courbes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.