Suite

Comment définir des conditions EXCLUDE identiques pour plusieurs calques à la fois ?

Comment définir des conditions EXCLUDE identiques pour plusieurs calques à la fois ?


Nous effectuons des relevés des mauvaises herbes nuisibles et disposons d'une géodatabase avec des classes d'entités ponctuelles distinctes pour chaque espèce distincte. Dans notre carte des mauvaises herbes nocives, nous avons toutes ces espèces organisées en un seul groupe dans la table des matières.

Parfois, nous créons des cartes qui doivent afficher TOUTES les différentes espèces que nous avons étudiées. Nous utilisons généralement une symbologie proportionnelle basée sur notre champ "WeedArea", mais nous devons souvent utiliser la fonction EXCLUDE pour afficher uniquement les points dont les attributs correspondent à certaines valeurs.

Il est difficile de définir la symbologie pour chaque classe d'entités distincte individuellement, lorsque nous utilisons les mêmes conditions pour chacune. Un exemple de fonction d'exclusion que nous pourrions utiliser est SurveyDate >= date '2014-11-01 00:00:00' ET Contrôle = 'NON TRAITÉ'.

Existe-t-il un moyen de modifier facilement la condition d'exclusion de plusieurs classes d'entités à la fois, en quelque chose comme mon exemple ci-dessus ? De même, si nous n'utilisons pas la symbologie proportionnelle (et donc n'utilisons pas non plus la fonction EXCLUDE) mais que nous affichons à la place à l'aide de l'option Catégories -> "Valeurs uniques, plusieurs champs", existe-t-il un moyen de sélectionner la même symbologie toutes les classes d'entités ?


Cela peut être fait avec un peu d'ArcPy de base et des requêtes de définition.

Jetez toutes les couches pour lesquelles vous souhaitez avoir la même requête de définition dans une nouvelle session ArcMap. Ensuite, trouvez/ouvrez le shell python. Dans le shell, copiez/collez ceci, puis appuyez sur Entrée :

mxd = arcpy.mapping.MapDocument(r"CURRENT") pour lyr dans arcpy.mapping.ListLayers(mxd): lyr.definitionQuery = "SurveyDate >= date '2014-11-01 00:00:00' AND Control = ' NON TRAITÉ'"

Modifiez votre code SQL (dans la dernière ligne de code) selon vos besoins et assurez-vous d'entourer votre expression SQL de guillemets doubles. Une fois que vos couches ont leur requête de définition, vous pouvez les faire glisser dans votre session ArcMap de carte finale.

Voici une version qui ne met à jour que les calques d'un groupe de calques donné :

groupLayer = "New Group Layer" sql = "SurveyDate >= date '2014-11-01 00:00:00' AND Control = 'UNTREATED'" mxd = arcpy.mapping.MapDocument ("CURRENT") pour lyr dans arcpy. mapping.ListLayers(mxd) : sinon lyr.isGroupLayer : continuer sinon lyr.name == groupLayer : continuer pour subLyr dans lyr : subLyr.definitionQuery = sql

Mettre à jour la variablegroupeCalqueavec le nom du groupe de couches et la variablesqlavec votre clause where.

Notez que la clause where est inclusive et non exclusive.