Suite

Copie de XY dans le presse-papiers à l'aide du complément Python (ArcMap)

Copie de XY dans le presse-papiers à l'aide du complément Python (ArcMap)


J'essaie de créer un outil simple pour copier XY à partir duquel je clique sur le bouton de la souris. Ce que j'ai déjà fait c'est :

  1. créer des fichiers de complément à l'aide de l'assistant de complément Python
  2. créer une barre d'outils et un outil à l'intérieur

dans le fichier *.py j'ai :

import arcpy import pythonaddins import win32clipboard as clipboard class p_tool(object): def __init__(self): self.enabled = True self.shape = "NONE" def onMouseDownMap(self, x, y, button, shift): button = 1 shift = 2 clipboard.OpenClipboard() clipboard.EmptyClipboard() xy = str(x)+"+str(y) clipboard.SetClipboardData(xy, clipboard.CF_TEXT) clipboard.closeClipboard() message = xy pythonaddins.MessageBox(message, " Mes Coordonnées", 0)

À propos de win32clipboard - j'ai testé en python windon dans ArcMap et je peux l'importer et openclipboard() mais emptyclipboard() ne fonctionne pas et me donne cette erreur :

Fichier "", ligne 1, par erreur : (1418, 'EmptyClipboard', 'Le fil n'a pas de presse-papiers ouvert.')


Le code suivant utilise l'approche consistant à appeler un sous-processus et à rediriger le texte vers le presse-papiers.

Quelques points à noter :

  1. Je utilise le surMouseUpMap événement, cela renvoie les coordonnées XY en unités de carte.
  2. J'ai mis une virgule entre les chiffres pour qu'il n'y ait pas d'espace entre eux.
  3. Enveloppé le code dans un essai, sauf pour capturer tout échec.
import arcpy import pythonaddins import subprocess class p_tool(object): """Implémentation pour pythonaddintest_addin.tool (Tool)""" def __init__(self): self.enabled = True self.shape = "NONE" def onMouseUpMap(self, x , y, button, shift) : essayez : xy = str(x)+','+str(y) command = "echo " + xy + " | clip" i=subprocess.check_call(command, shell=True) message = xy pythonaddins.MessageBox(message, 'Mes coordonnées', 0) sauf exception comme e: pythonaddins.MessageBox(str(e),"Error",0)

Définir un nouveau système de coordonnées

Une carte ou une scène a toujours un système de coordonnées horizontales et éventuellement un système de coordonnées verticales. Le système de coordonnées horizontales par défaut est WGS84 Web Mercator pour les cartes et les scènes. Pour les scènes globales, le système de coordonnées horizontales par défaut est WGS84.

Les cartes et scènes vides tirent leurs systèmes de coordonnées de la première couche qui leur a été ajoutée. Lorsque vous ajoutez des couches à une carte ou à une scène, elles sont automatiquement affichées à l'aide du même système de coordonnées de la carte ou de la scène. Vous pouvez spécifier un système de coordonnées pour la carte ou la scène, ou vous pouvez en définir un nouveau. Vous pouvez créer un système de coordonnées si vous connaissez les paramètres exacts requis, ou vous pouvez générer un système de coordonnées suggéré en fonction de l'étendue de vos données et des aspects que vous souhaitez conserver.


Les caractéristiques à copier.

La classe d'entités qui sera créée et dans laquelle les entités seront copiées. Si la classe d'entités en sortie existe déjà et que l'option de remplacement est définie sur true, la sortie sera supprimée en premier. Si la classe d'entités en sortie existe déjà et que l'option de remplacement est définie sur false, l'opération échouera.

Mot-clé de configuration de géodatabase à appliquer si la sortie est une géodatabase ArcSDE ou une géodatabase fichier.

Les paramètres de la grille spatiale 1, 2 et 3 s'appliquent uniquement aux géodatabases fichier et à certaines classes d'entités de géodatabase de groupe de travail et d'entreprise. Si vous n'êtes pas familiarisé avec la définition des tailles de grille, laissez ces options sur 0,0,0 et ArcGIS calculera les tailles optimales pour vous. Pour plus d'informations sur ce paramètre, reportez-vous à la documentation de l'outil Ajouter un index spatial.

Taille de cellule de la deuxième grille spatiale. Laissez la taille à 0 si vous ne voulez qu'une seule grille. Sinon, définissez la taille sur au moins trois fois plus grande que la grille spatiale 1.

Taille de cellule de la troisième grille spatiale. Laissez la taille à 0 si vous ne voulez que deux grilles. Sinon, définissez la taille sur au moins trois fois plus grande que la grille spatiale 2.


Cartographie

Édition

Lorsque vous publiez un service d'entités, la propriété Autoriser la mise à jour des vraies courbes est désormais activée par défaut. De plus, vous avez désormais la possibilité de restreindre les éditeurs pour qu'ils mettent à jour uniquement les vraies courbes dans les services d'entités à l'aide d'un client capable de créer et de modifier de vraies courbes.

Lors de la publication d'un service d'entités, vous avez également la possibilité d'insérer automatiquement des valeurs m NaN lorsque le client modifiant les géométries dans le service d'entités ne fournit pas de valeur m. Vous ne pouvez pas modifier les services d'entités qui contiennent des couches activées pour m de certains clients, tels qu'ArcGIS Online et Portal for ArcGIS . Si votre couche n'a pas besoin des valeurs m, vous pouvez activer la propriété Autoriser les mises à jour de la géométrie sans valeur m sur le service d'entités pour insérer automatiquement une valeur NaN.

Géodatabases

Enregistrer des vues avec la géodatabase

L'outil de géotraitement Inscrire avec la géodatabase a été étendu pour vous permettre d'inscrire des vues. Lorsque vous enregistrez une vue auprès de la géodatabase, la géodatabase stocke les propriétés de la vue, telles que le champ à utiliser pour un ObjectID et des informations sur les attributs spatiaux. Cela améliore les performances lorsque vous ajoutez la vue à une carte, car ArcMap n'a pas besoin de vous inviter ou d'interroger le contenu de la vue pour découvrir ces informations.

Vous pouvez également créer des métadonnées pour les vues enregistrées dans la géodatabase, car les métadonnées sont stockées dans la géodatabase.

Les vues enregistrées peuvent être incluses dans les cartes que vous publiez en tant que services d'entités de requête uniquement.

Tables de fichiers journaux dans les géodatabases dans PostgreSQL et SQL Server

Lorsque vous utilisez un client ArcGIS 10.5 avec une géodatabase dans PostgreSQL ou SQL Server, les tables de fichiers journaux sont créées en tant que tables temporaires. Ces tables de fichiers journaux temporaires sont créées par utilisateur, il n'y a donc pas de conflit de ressources pour plusieurs connexions effectuées par le même utilisateur, et les tables sont automatiquement supprimées à la fin de la session client. L'utilisation de tables temporaires améliore également les performances, car les données insérées dans les tables temporaires n'ont pas besoin d'être écrites dans les journaux de transactions de la base de données.

Les clients ArcGIS 10.5 utiliseront toujours des tables temporaires pour les tables de fichiers journaux dans PostgreSQL et SQL Server. Par conséquent, les administrateurs de géodatabase n'ont plus besoin de modifier les paramètres de table de fichiers journaux pour les géodatabases dans ces deux bases de données. Notez que les clients ArcGIS 10.5 ignoreront toutes les modifications apportées aux fichiers journaux à l'aide de l'outil Configurer les tables de fichiers journaux de la géodatabase.

Nouvelle méthode de stockage pour les attributs de géométrie dans les géodatabases dans SQL Server

Dans ArcGIS 10.5, les classes d'entités que vous créez dans une géodatabase dans SQL Server qui utilisent le stockage Geometry ou Geography stockeront des attributs tels que des ID de point, des multipatchs et des entités paramétriques (courbes vraies) directement dans la table métier. Avant ArcGIS 10.5, ces informations étaient stockées dans une table annexe jointe à la table métier. Cette jointure pouvait entraîner de mauvaises performances si la table annexe contenait de nombreux attributs de géométrie. Cette baisse des performances a souvent été constatée lors de l'utilisation de jeux de données d'atelier parcellaire, par exemple.

Les classes d'entités que vous migrez du type de stockage SDEBINARY vers le stockage Geometry ou Geography utiliseront également ce format.

Si vous avez créé votre classe d'entités Geometry ou Geography ou migré des données vers le stockage Geometry ou Geography avant la version 10.5, vous pouvez exécuter l'outil de géotraitement Migrer le stockage pour déplacer les attributs de géométrie dans la table métier et profiter des améliorations de performances.

Notez que les clients 10.3 et antérieurs ne peuvent pas se connecter aux classes d'entités qui utilisent ce nouveau type de stockage.

Nouveau type de stockage raster par défaut

Lorsque vous créez une géodatabase à l'aide d'ArcGIS 10.5, le paramètre RASTER_STORAGE sous le mot-clé de configuration DEFAULTS est défini sur RASTERBLOB dans les géodatabases dans Oracle, PostgreSQL et SQL Server. Rasterblob fournit un stockage BLOB optimisé des données raster dans la table métier du jeu de données raster ou de la mosaïque, ce qui réduit les opérations d'E/S et améliore les performances.

Si vous mettez à niveau votre géodatabase vers 10.5, votre paramètre RASTER_STORAGE par défaut ne changera pas. Pour tirer parti de ce nouveau stockage raster optimisé, modifiez le paramètre sous votre mot-clé DEFAULTS ou créez un mot-clé qui utilise ce paramètre et spécifiez le nouveau mot-clé lors de la création ou de la copie de jeux de données raster ou de mosaïques. Pour plus d'informations sur la modification ou la création de mots-clés de configuration, voir Modifier les mots-clés de configuration.

Notez que les versions du client ArcGIS antérieures à 10.5 ne peuvent pas ouvrir de jeux de données raster ou de mosaïques qui utilisent le stockage rasterblob. Si votre géodatabase 10.5 est accessible par des clients ArcGIS plus anciens qui doivent travailler avec des rasters, remplacez le paramètre RASTER_STORAGE par défaut dans la géodatabase par BINARY (PostgreSQL ou SQL Server) ou BLOB (Oracle).

Synchroniser les paramètres open_cursors pour les géodatabases dans Oracle

Les géodatabases 10.5 dans Oracle contiennent une procédure stockée, sde.gdb_util.update_open_cursors, qui vous permet de synchroniser la valeur open_cursors que vous avez définie dans Oracle avec le paramètre de votre géodatabase.

Fonctionnalité ST_Transform étendue pour les données ST_Geometry dans PostgreSQL

La fonction SQL ST_Transform dans PostgreSQL prend désormais un deuxième SRID en entrée pour vous permettre de convertir des données entre deux systèmes de coordonnées géographiques différents.

Fin de l'assistance

Vous ne pouvez pas créer ou utiliser des localisateurs dans des géodatabases à l'aide d'ArcGIS 10.5.

ArcGIS ne prend plus en charge la création de jeux de données contenant Oracle SDO_GeoRaster. Vous pouvez toujours afficher les données SDO_GeoRaster dans des géodatabases plus anciennes, mais vous ne pouvez pas créer de nouveaux jeux de données contenant des champs SDO_GeoRaster à l'aide d'un client ArcGIS 10.5.

Raster

La fenêtre Ajustement des blocs a été mise à jour avec de nouveaux outils pour vous aider à ajuster votre mosaïque. Il existe également quatre nouveaux outils de géotraitement pour vous aider dans vos projets d'orthocartographie : Build Stereo Model , Compute Camera Model , Generate Point Cloud et Interpolate From Point Cloud .

Trois fonctions raster sont disponibles pour effectuer un traitement à la volée sur les rasters : fonction de métadonnées clés, fonction de rastérisation des attributs et fonction de remappage zonal.

Les types de raster et capteurs suivants sont pris en charge, à partir de la version ArcGIS 10.5 : ADS, Deimos-2, DubaiSat-2, Jilin-1 et KOMPSAT-3.

Géocodage

Les localisateurs d'adresses stockés dans les géodatabases ne sont plus pris en charge et n'apparaîtront pas en tant qu'entrées dans les outils ou ne seront pas visibles dans ArcGIS 10.5 ou version ultérieure. Les localisateurs ne peuvent plus non plus être créés et enregistrés dans des géodatabases.

Avant la mise à jour vers ArcGIS 10.5, vous devez copier tous les localisateurs enregistrés dans une géodatabase dans un dossier de fichiers. Cela garantira que vos localisateurs restent visibles lors de l'utilisation d'ArcGIS 10.5 et vous évitera d'avoir à créer à nouveau les localisateurs.

Des améliorations de la qualité et des performances ont été apportées aux styles de localisateur d'adresses.

Vous pouvez désormais créer un localisateur d'adresses qui prend en charge la recherche de noms de ville alternatifs en plus des noms de rue alternatifs.


La réponse de @nichijou est bien. Mais il n'est pas nécessaire de mettre le tampon dans une fenêtre. Vous pouvez utiliser find-file-noselect pour visiter un tampon sans l'afficher.

Je ne peux pas reproduire votre erreur et je veux suggérer que vous utilisez éventuellement xclip de manière incorrecte. Cette réponse devrait également profiter aux autres car personne n'a besoin de créer une fonction emacs personnalisée pour que cela fonctionne.

À partir d'un tampon dirigé, je sélectionne un fichier de petite taille et j'entre & pour obtenir la boîte de dialogue asynchrone. Ensuite, j'entre xclip -i . Cela envoie le contenu du fichier sélectionné au presse-papiers PRIMARY, l'un des trois presse-papiers présents dans tous les environnements GUI modernes (les deux autres sont appelés SECONDARY et CLIPBOARD). Ensuite, à partir d'un émulateur de terminal extérieur à emacs, j'exécute xclip -o et je vois le contenu de ce fichier inséré dans le terminal.

Si vous voulez que xclip fonctionne sur le presse-papiers CLIPBOARD (je sais, c'est déroutant, je ne l'ai pas conçu), alors passez-lui les arguments -selection presse-papiers . Personnellement, je l'ai défini comme un alias shell. Il existe également le programme en ligne de commande xsel , qui a des noms d'options plus courts.


Lors de la suppression du contenu du tampon dans Vim, vous pouvez l'envoyer au trou noir enregistrer "_ . De :help quote_ :

Lors de l'écriture dans ce registre, rien ne se passe. Cela peut être utilisé pour supprimer du texte sans affecter les registres normaux.

Utilisez donc simplement cette commande dans votre étape 2:

Ou vous pouvez également utiliser la commande :delete avec une plage :

Cette commande Ex supprime chaque ligne dans le registre du trou noir.

Bien sûr, tout est possible dans Vim !

Il y a un système de registre dans vim, et le presse-papier est le registre + (ou * , ça dépend)

Par défaut, le texte que vous coupez est placé dans le registre du presse-papiers, mais vous pouvez le mettre dans un registre de trou noir ( :h quote_ ) comme ceci :

Le "_ ici dit à vim de mettre ce que vous êtes sur le point de couper dans un registre de trou noir, de sorte que votre registre + (a.k.a. votre presse-papiers) reste intact.

Et la magie ne s'arrête pas là, si c'est une tâche que vous faites souvent, vous pouvez mettre en place un cartographie pour cela, par exemple :

Pour que la prochaine fois que vous aurez besoin de supprimer un fichier entier, il vous suffira d'appuyer sur gd


3 réponses 3

Ce n'est pas tout à fait parfait pour ce que vous voulez, mais je pense que cela pourrait vous rapprocher. Quicksilver a un outil de ligne de commande. Une fois installé, vous pouvez rediriger les fichiers de la ligne de commande vers l'application Quicksilver, puis les envoyer en tant que pièces jointes dans Mail.

Pour installer l'outil de ligne de commande Quicksilver, activez Quicksilver. Ensuite, accédez à Quicksilver > Préférences pour ouvrir la fenêtre des préférences. Cliquez sur Préférences en haut à droite de la fenêtre. Sur la gauche, cliquez sur Command Line Tool et installez.

Dans Terminal, vous pourrez taper

Appuyez sur Entrée pour envoyer ces fichiers au premier volet de Quicksilver. Appuyez sur l'onglet pour accéder au volet Actions et choisissez l'action E-mail/Nouvel e-mail avec pièce jointe. Appuyez sur Entrée et un nouvel e-mail avec vos fichiers sélectionnés en pièce jointe devrait apparaître.

Notez que vous devrez également installer les plugins Mail et Command Line dans Quicksilver (Quicksilver > Préférences > Plug Ins).


Non + presse-papiers ?

Vim nécessite l'indicateur de fonctionnalité +clipboard pour que tout cela fonctionne, vous pouvez vérifier si votre Vim l'a en utilisant :echo has('clipboard') à partir de Vim (si la sortie est 0 , c'est ne pas présent, si c'est 1 , c'est le cas), ou en vérifiant la sortie de vim --version pour +clipboard .

La plupart des distributions Linux sont livrées avec une version "minimal" de Vim par défaut, qui n'a pas de +clipboard , mais vous pouvez généralement l'installer :

  • Debian & Ubuntu : installez vim-gtk3 .
  • Fedora : installez vim-X11 et exécutez vimx au lieu de vim (plus d'informations).
  • Arch Linux : installez gvim (cela activera également le +clipboard pour vim normal).

Vous pouvez également utiliser xclip , xcopy ou xsel pour copier du texte dans le presse-papiers. Consultez les questions suivantes pour trouver des solutions :

Vous pouvez également utiliser un presse-papiers sur des machines distantes si vous activez le transfert X11 via SSH. Ceci est particulièrement utile avec l'astuce ci-dessus car vous pouvez ensuite utiliser xclip pour accéder au presse-papiers de votre bureau. Le Vim sur la machine sur laquelle vous vous connectez aura toujours besoin de la fonction + presse-papiers.

Cela nécessite le paramètre ForwardX11Trusted et devrait ne se faire qu'avec des serveurs de confiance, car cela donne au serveur un contrôle presque total sur votre session X11 :

Pour rendre ces paramètres persistants (vous n'avez donc pas besoin d'ajouter -XY à chaque fois), vous pouvez faire quelque chose comme ceci dans votre


Ce qui suit ne fonctionnera que si vim --version indique que vous avez la fonctionnalité +xterm_clipboard. Sinon, vous devrez installer des packages supplémentaires ou recompiler vim avec cette fonctionnalité ajoutée.

Il y a en fait deux options pour cela :

copie dans le tampon du presse-papiers "habituel" (vous pouvez donc coller en utilisant Ctrl+V, faites un clic droit et sélectionnez "Coller", etc.), tandis que

copies vers la sélection X11 - vous pouvez coller à partir de ce tampon en utilisant un clic du milieu.

Notez que "* et "+ fonctionnent dans les deux sens. Donc, si vous avez sélectionné du texte dans une autre application, vous pouvez le coller dans vim en utilisant "*p et si vous avez copié du texte (en utilisant, disons, Ctrl-C) alors vous pouvez le coller dans vim en utilisant "+p .


Vous devrez utiliser des raccourcis tmux. En supposant que votre raccourci de commande tmux est le raccourci par défaut : Ctrl + b , puis :

Ctrl + b , [ Entrer en mode copie (?).

Déplacer au début/à la fin du texte à mettre en surbrillance.

Commencez à surligner du texte (sur Arch Linux). Lorsque j'ai compilé tmux à partir de la source sur OSX et d'autres Linux, seul Space fonctionne généralement. Le texte sélectionné change les couleurs, vous saurez donc si la commande a fonctionné.

Déplacez-vous à l'extrémité opposée du texte à copier.

Alt + w Copie le texte sélectionné dans le presse-papiers tmux. (Sur Mac, utilisez Esc + w .)

Déplacez le curseur vers le volet tmux opposé ou une fenêtre tmux complètement différente. Placez le curseur à l'endroit où vous souhaitez coller le texte que vous venez de copier.

Ctrl + b , ] Coller le texte copié à partir du presse-papiers tmux.

tmux est assez bon pour mapper des commandes à des raccourcis clavier personnalisés.

Voir Ctrl + b , ? pour la liste complète des raccourcis clavier définis.

Malheureusement, je ne peux pas encore ajouter de commentaire à la réponse d'Alex Leach, je vais donc inclure un addendum ici pour les utilisateurs de Mac OS X :

Si vous utilisez vim et tmux sur macOS (testé sur macOS 10.12.2, tmux 2.3) :

(Supposons que la combinaison de touches de préfixe de tmux est prefix . Le préfixe est ctrl + b par défaut.)

  • Copie:
    1. Appuyez sur préfixe + [ pour entrer en mode copie.
    2. Utilisez les touches fléchées pour aller au début/à la fin de la sélection de texte.
    3. Appuyez sur ctrl + espace (si vous avez défini ctrl + espace comme préfixe, appuyez à la place sur ctrl + espace + espace)
    4. Utilisez les touches fléchées pour passer de l'autre côté de la sélection.
    5. Appuyez sur ctrl + w .
  • Pâte:
    1. Appuyez sur préfixe + ] en mode insertion.

Je me connecte à mon serveur CentOS sur une machine Windows à l'aide du client ssh du terminal ZOC. Voici ce qui fonctionne pour moi :

  • Entrer en mode copie : <prefix> + [
  • Démarrer la copie : <Space>
  • Copier le texte : <Entrée>
  • Coller le texte : <prefix> + ]

Si vous avez ouvert vim, il est préférable d'utiliser le copier-coller de vim pour copier du texte.

Le copier-coller Tmux fonctionnera, mais il y a plusieurs inconvénients.

Tout d'abord, lors de la copie de plusieurs lignes de texte, vous devrez sélectionner plusieurs lignes. Le copier-coller Tmux ne comprend généralement pas que vim a des numéros de ligne ou qu'il y a des marques dans la gouttière de vim (comme des nombres relatifs/des nombres absolus). En conséquence, il les copiera également.

Deuxièmement, j'ai constaté que si le texte a une certaine mise en forme spécifique à la langue et que vous essayez directement de copier-coller en utilisant tmux vers vim, cela gâchera la mise en forme. Cela peut être évité en utilisant de la pâte fixe ! . Cependant, cela demande beaucoup plus de travail.

Utilisez "+y pour copier et "+p pour coller

Vim fournit nativement une méthode pour copier-coller entre le tampon vim et le presse-papiers du système, en utilisant soit "+y soit "*y . Puis coller en utilisant "+p ou "*p . Cela évitera de copier les nombres relatifs dans la gouttière ou d'autres marques aléatoires qui ne sont pas pertinentes pour vim


Voir la vidéo: Création dun complément Python pour ArcMap