Suite

Choisir et zoomer sur des entités à l'aide d'une requête SQL dans ArcPy avec ArcGIS Pro ?

Choisir et zoomer sur des entités à l'aide d'une requête SQL dans ArcPy avec ArcGIS Pro ?


Lors de l'utilisation d'ArcPy avec l'architecture ArcGIS 10.x, il existe un modèle de codage simple que j'utilise fréquemment :

import arcpy mxd = arcpy.mapping.MapDocument("CURRENT") df = arcpy.mapping.ListDataFrames(mxd,"Layers")[0] lyr = arcpy.mapping.ListLayers(mxd,"ne_10m_admin_0_countries",df)[0] lyr.definitionQuery = '"ADMIN" = ' + "'Chili'" df.extent = lyr.getSelectedExtent() arcpy.RefreshActiveView()

Pour le voir en action :

  1. Démarrer ArcMap avec une carte vierge
  2. Ajoutez une couche à l'aide d'un fichier de formes comme ne_10m_admin_0_countries.shp de Natural Earth
  3. Copiez/collez le code ci-dessus dans la fenêtre Python et vous devriez voir le pays du Chili zoomé sur

Cependant, lorsque j'essaie de faire quelque chose de similaire en utilisant ArcPy avec ArcGIS Pro, je trouve :

  1. Démarrer ArcGIS Pro
  2. Choisissez Map.aptx pour ouvrir une carte
  3. Ajoutez une couche à l'aide d'un fichier de formes comme ne_10m_admin_0_countries.shp de Natural Earth
  4. Copiez/collez le code comme ci-dessous dans le volet Python

La requête de définition fonctionne très bien mais la classe Map n'a pas de méthode disponible pour effectuer un zoom sur l'étendue des entités ainsi définies.

import arcpy aprx = arcpy.mp.ArcGISProject("CURRENT") mapx = aprx.listMaps("Map")[0] lyr = mapx.listLayers("ne_10m_admin_0_countries")[0] lyr.definitionQuery = '"ADMIN" = ' + "'Chili'"

Existe-t-il un moyen simple de choisir et de zoomer sur des entités à l'aide d'une requête SQL dans ArcPy avec ArcGIS Pro ?

Comme solution de contournement, j'ai étudié comment incorporer peut-être les classes Layout et MapFrame dans mon modèle de codage et, bien que ce dernier ait unzoomToAllLayersméthode qui a l'air plus optimiste, je n'ai pas encore réussi à trouver un moyen de le faire.


Je ne vois pas comment faire cela en utilisant leClasse de carteSoit.

Le code ci-dessous fonctionne, mais vous devez avoir unDispositionetCadre de carteprésent dans votreProjet. Il est étrange que vous ne puissiez pas le faire dans la vue Carte car vous pouvez cliquer avec le bouton droit sur la couche dans le volet Contenu et cliquer surZoom sur le calque, mais pas via arcpy?

Le zoom pour le code suivant se produit réellement sur le mode Mise en page et non sur le mode Carte.

import arcpy aprx = arcpy.mp.ArcGISProject("CURRENT") mapx = aprx.listMaps("Map")[0] lyr = mapx.listLayers("ne_10m_admin_0_countries")[0] lyr.definitionQuery = '"ADMIN" = ' + "'Chili'" lyt = aprx.listLayouts()[0] mf = lyt.listElements('MAPFRAME_ELEMENT')[0] mf.camera.setExtent(mf.getLayerExtent(lyr, False, True))

Il existe une idée ArcGIS pour autoriser arcpy.mp à modifier l'étendue de la carte dans ArcGIS Pro :

Actuellement, dans la dernière version de [2.4.2], les développeurs ne peuvent utiliser arcpy.mp que pour modifier l'étendue de la carte dans le cadre de la carte, mais pas dans la carte elle-même.

Map Frame est un élément d'une mise en page, mais pour de nombreux projets, une mise en page n'est pas nécessaire, car vous souhaiterez peut-être uniquement afficher la carte résultante à l'écran et vous ne vous souciez pas vraiment de la mise en page d'un document imprimable.

Et dans de nombreux cas, vous souhaitez agrandir la carte sur les entités sélectionnées et vous concentrer sur une zone particulière. Pour ce faire, l'utilisateur devrait logiquement être autorisé à définir l'étendue de la caméra pour la carte 2D spécifiée. Mais cette fonction est manquante ou ne fonctionne pas.

Une fois cela mis en œuvre, cela répondra à l'exigence qui m'a amené à poser cette question. Il est actuellement au statut de Dans le plan de produit donc j'espère que ce n'est pas trop loin.


Voir la vidéo: 6 SketchUp - Comment masquer les objets dun calque? Collège Charles III. Technologie