Suite

Les attributs de jointure QGIS par emplacement ne fonctionnent pas à partir du script Python

Les attributs de jointure QGIS par emplacement ne fonctionnent pas à partir du script Python


J'ai un fichier de formes avec des points et un fichier de formes avec des polygones. Je veux additionner la valeur attributaire de tous les points qui se trouvent dans un certain polygone, et j'aimerais le faire pour chaque polygone de mon jeu de données. L'outil QGIS Join Attributes by Location m'aide à y parvenir et fonctionne parfaitement lorsque vous utilisez l'outil via la boîte à outils de traitement. Cependant, j'aimerais inclure l'outil dans un script automatisé. J'ai essayé de nombreux arguments différents, mais mon code ne fonctionne (toujours) pas et donne un jeu de données où le nouvel attribut de polygone a des valeurs NULL.

J'utilise le code suivant, qui devrait être exactement le même que celui en cours d'exécution de l'outil lorsque j'y accède à partir de la boîte à outils de traitement (j'ai même essayé de copier et d'exécuter exactement le même code à partir de la fenêtre Historique et journal) :

sum = processing.runalg("qgis:joinattributesbylocation","polygonlayer.shp", "pointlayer.shp","['contains']",1,"sum",1,None)

J'utilise QGIS 2.8.2 Wien.


  • Pour QGIS 2.8.2 avec Traitement plug-in 2.9.0 :

    processing.runalg("qgis:joinattributesbylocation", layer1, layer2, u'contains', 1, 'sum', 1, None)
  • Pour QGIS 2.12.2 avec Traitement plug-in 2.12.2 :

    processing.runalg("qgis:joinattributesbylocation", layer1, layer2, u'contains', 0, 1, 'sum', 1, None)

    (notez le paramètre supplémentaire pour "précision")


Comment puis-je trouver le répertoire de scripts ? [dupliquer]

J'utilise os.getcwd() pour obtenir l'emplacement du répertoire du fichier de script. Lorsque j'exécute le script à partir de la ligne de commande, il me donne le chemin correct alors que lorsque je l'exécute à partir d'un script exécuté par code dans une vue Django, il affiche / .

Comment puis-je obtenir le chemin d'accès au script à partir d'un script exécuté par une vue Django ?

METTRE À JOUR:
Résumant les réponses jusqu'à présent - os.getcwd() et os.path.abspath() donnent tous deux le répertoire de travail actuel qui peut ou non être le répertoire où réside le script. Dans la configuration de mon hébergeur Web, __file__ ne donne que le nom de fichier sans le chemin.

N'y a-t-il aucun moyen en Python de (toujours) pouvoir recevoir le chemin dans lequel réside le script ?


Obtenir l'emplacement de l'objet image par image Blender 2.81 +

J'ai un script qui génère un chemin courbe et définit un objet pour qu'il suive le chemin, je peux voir l'objet se déplacer correctement dans le mouvement d'animation, et il se déplace également au bon emplacement (au moins visuellement dans le hublot, les coordonnées quand vous appuyez sur n ne changez pas) lorsque j'utilise bpy.context.scene.frame_set(desirved_frame) . Cependant, lorsque j'essaie d'obtenir l'emplacement et la rotation de cet objet à l'image que j'ai définie, il renvoie simplement l'emplacement d'origine de l'objet à l'image 0. Vous trouverez ci-dessous le code que j'ai utilisé pour générer les données d'animation et ce que je ' m'utilise pour essayer d'obtenir l'emplacement.

J'ai aussi essayé de remplacer la boucle finale par :

Les deux méthodes impriment simplement l'emplacement d'origine de l'objet.

En lisant cette documentation, je ne sais pas comment j'utiliserais les exemples qu'ils montrent pour extraire l'emplacement et la rotation évalués de la classe qu'ils enregistrent, ni même comment appeler la méthode d'exécution.

Vous trouverez ci-dessous quelques solutions et réponses que j'ai lues et essayées, sans succès :

Je ne suis vraiment pas sûr de ce que je fais mal car certaines des questions que j'ai examinées sont assez similaires à mon problème.


Essayer de récupérer le numéro d'image actuel pour une utilisation dans le matériau de l'âge des particules de Cycles

J'essaie de créer un matériau de cycles pour faire éclater une particule lorsqu'elle meurt lors d'une collision avec une autre particule à l'aide de Blender 2.72a.

J'ai réussi à faire en sorte que des particules attaquent et tuent d'autres particules en utilisant la physique Boid, mais faire en sorte que les particules mortes fassent autre chose que disparaître ou rester là s'avère être un problème épineux.

Je crache plusieurs approches. Ma tentative actuelle est de piloter la force d'émission et la transparence en fonction du caractère inopportun de la mort d'une particule. Une particule qui meurt dans une collision aura une vitesse de zéro et un âge inférieur à sa durée de vie. Cependant, étant donné que les particules mortes indiquent 0 pour leur âge, vous ne pouvez pas l'utiliser pour déterminer si une particule vient de mourir de manière anormale ou si elle a expiré il y a cent images. Je peux contourner ce problème si je peux récupérer le numéro d'image actuel de la scène et j'ai même l'extrait de code : bpy.data.scenes['CYCLES'].frame_current Je l'ai enregistré en tant que script et l'ai référencé dans un script Nœud que j'ai pu ajouter à ma graine de particules, mais je ne peux pas accéder à la valeur récupérée.

Je pensais modifier le scriptlet pour remplir une variable globale ou un attribut avec le numéro de trame, puis y accéder avec le nœud Attribute.

Alors, comment puis-je stocker le numéro d'image actuel d'une manière accessible à l'éditeur de matériaux ? J'ai inclus un lien vers mon fichier blend. La bonne réponse n'a pas à implémenter mon code. Si vous avez une idée qui n'a rien à voir avec python, je veux quand même l'entendre.


La sauvegarde SQL d'Ola Hallengren sur l'emplacement réseau ne fonctionne pas

J'ai installé la solution de maintenance SQL Server d'Ola Hallengren sur plusieurs serveurs SQL Express (2008 à 2012 R2) au cours des dernières années. J'ai récemment commencé à avoir des problèmes avec le composant de sauvegarde réseau sur chacun d'eux, un nouveau. J'ai fait fonctionner cela sur plusieurs serveurs dans le passé, donc je sais que cela peut fonctionner, mais je ne peux pas comprendre ce qui l'empêche de fonctionner maintenant. En tant que point d'intérêt, je ne suis pas un DBA et je ne connais presque rien à SQL, c'est pourquoi je suis ici.

Le problème

Sur un serveur en particulier, j'ai mis en place un planning de maintenance il y a environ un an et demi. Il effectuait des sauvegardes nocturnes sur un autre serveur local en utilisant un chemin UNC (et plusieurs autres commandes). Le code du script est le suivant :

Cela a bien fonctionné pendant un certain temps, mais a cessé de fonctionner il y a environ un mois. Je l'ai configuré pour une sauvegarde locale, puis j'ai ajouté une chaîne pour la copier sur l'emplacement distant et un script sur le serveur distant pour nettoyer les anciennes sauvegardes. Pas idéal.

J'ai essayé de l'exécuter en ligne de commande en tant que moi-même et en tant que compte de super autorisations. Voici l'erreur que je reçois dans tous les cas :

Ce que j'ai fait

De toute évidence, SQL pense que l'emplacement réseau n'existe pas, j'ai donc essayé ce que je pouvais pour vérifier que tous les éléments côté réseau étaient en ordre. J'ai extrait une nouvelle copie du script et recréé tous les objets et travaux. J'ai vérifié que les autres scripts (contrôles d'intégrité, mises à jour de statistiques, etc.) fonctionnent. J'ai créé un script qui utilise les mêmes informations d'identification que le script de sauvegarde pour exécuter la copie x des sauvegardes locales sur le serveur cible, j'ai donc les informations d'identification de partage/NTFS appropriées. Ce compte est un compte de domaine (AD) spécialement créé pour les sauvegardes SQL. Je peux sauvegarder localement (avec ce compte), donc j'ai des autorisations de base de données. Je peux accéder au partage en tant que compte de sauvegarde à l'aide de l'Explorateur Windows. Je peux copier manuellement les fichiers vers l'emplacement distant à l'aide de l'Explorateur Windows à l'aide du compte de sauvegarde.

J'ai également le même problème sur plusieurs autres réseaux, ce qui m'a amené à SF. Je suis dans les domaines 2008 R2 et 2012, tous les serveurs sont membres du domaine sans aucune erreur pertinente. Les serveurs sont des machines 2008 R2 et 2012 R2 Standard. J'ai l'impression que quelque chose a dû changer du côté de SQL que je ne peux pas résoudre pour que cela se produise sur 3 réseaux différents et plusieurs serveurs. J'ai utilisé des commandes super basiques - laissant la vérification et le nettoyage hors du travail - et j'obtiens la même erreur. J'ai également utilisé les exemples de commandes sur le site d'Ola à titre de test, avec les mêmes résultats. Je l'ai essayé sur un tout nouveau serveur SQL avec une base de données de test de base, pas d'amour. J'utilise ma ceinture noire dans Google depuis plusieurs jours avec des résultats très décevants (je ne sais peut-être pas quoi chercher ?).

Ce que j'espère obtenir

J'apprécierais vraiment un moyen de tester les connexions aux partages réseau à l'intérieur de la ligne de commande SQL, ou certains documents à lire qui m'y amèneraient. Cela ne me dérange pas de lire que je suis un administrateur système compétent qui est tout simplement en dehors de sa profondeur sur cette question. J'ai tout lu sur le site d'Ola, et j'utilise de toute façon pratiquement les commandes d'exemple mot à mot (et elles ont fonctionné pendant plusieurs mois !?). Je vais travailler dessus ce week-end, et toute aide ou orientation que quelqu'un peut fournir serait grandement appréciée.


Quel est le code Python correct pour appuyer sur &ldquoI&rdquo et sélectionner LocRotScale ?

J'ai déjà fait un test factice et tout le reste de mon code fonctionne. La seule chose qui échoue est d'appeler bpy.ops.anim.keyframe_insert_menu(type = 'LocRotScale') , ce qui apparaît si vous appuyez sur I et que vous le faites manuellement. L'erreur que j'obtiens est :

Fichier "D:Blender2.79scriptsmodulespyops.py", ligne 189, dans appel ret = op_call(self.idname_py(), None, kw) TypeError : Conversion des arguments py en propriétés d'opérateur : enum "location" introuvable dans ('Location', 'Rotation', 'Scaling', 'BUILTIN_KSI_LocRot', 'LocRotScale' , 'BUILTIN_KSI_LocScale', 'BUILTIN_KSI_RotScale', 'BUILTIN_KSI_DeltaLocation', 'BUILTIN_KSI_DeltaRotation', 'BUILTIN_KSI_DeltaScal)

L'idée de mon script est simple, il y a 8 coordonnées dans une liste que je veux parcourir et appliquer chaque coordonnée à un cube.

  1. Frame_set l'image actuelle sur la timeline afin que l'image de départ soit à 0
  2. Je prendrais la coordonnée[i] dans la liste et l'appliquerais au cube
  3. Je saisirais ensuite l'emplacement du cube pour l'animation
  4. mettre à jour le current_frame par =+ 4 à chaque fois. Les images S0 0, 4, 8. seraient les images clés.

Toutes les autres étapes fonctionnent, si je commente l'étape numéro 3, je verrais mon cube se déplacer d'un emplacement à l'autre, j'ai juste besoin de savoir comment saisir chaque emplacement pour l'animation !


1 réponse 1

Certaines modifications de l'API sont plus récentes que d'autres

La méthode bmesh de l'objet nécessite que l'argument 2 soit un depsgraphe, pas une scène, comme l'IIRC l'était avant, vers le moment où la réponse a été écrite.

Consultez des documents plus récents, mais pour ce genre de choses, nous vous recommandons vivement d'utiliser la fonction de saisie semi-automatique de la console

remarquerez que depsgraph ne fait pas la chaîne doc, c'est clairement un argument.

Testez le nettoyage. J'ai apporté des modifications minimes pour que cela s'exécute en tant que gestionnaire de poste de changement de cadre. Avoir utilisé un "Circle" 256 vert comme objet de test, (en lui donnant l'exigence d'avoir au moins autant de verts que le nombre d'angles.)

Le script renvoie une erreur d'index pour le maillage avec trop peu de verts.

La méthode est connectée à un gestionnaire de changement de cadre, elle fera donc "chose" lorsque le cadre change.

_Un exemple de déplacement de quelques cubes avec la lecture de l'animation, pour appeler (gérer) lors d'un événement de changement de cadre la mise à jour du maillage avec le code du gestionnaire.


Premier jeu de mémoire avec PyQt et OOP

C'est donc ma toute première fois sur ce site. J'ai écrit ce code Python très basique avec PyQt5 pour créer un jeu de mémoire. Comme je ne suis pas très familier avec la POO (mais j'essaie de l'être !), j'espère que quelqu'un pourra m'indiquer où je pourrais améliorer mon jeu.

En l'état, l'ensemble fonctionne mais il manque un joli gabarit (c'est quelque chose que je vais améliorer dans un deuxième temps). Ce qui m'intéresse le plus en ce moment, c'est de comprendre si mon code pourrait être mieux organisé d'une manière ou d'une autre (par exemple, en le divisant en différentes classes/sous-classes, au lieu des nombreuses méthodes présentes).

  1. l'utilisateur choisit un dossier d'images (JPG)
  2. une grille avec toutes les images est formée, mais chaque image est couverte par l'image "back.jpg" (elle doit rester dans le même dossier que le code)
  3. le jeu commence

Fondamentalement, je fais en quelque sorte tout en utilisant des images dans un Qgridlayout, qui sont placées dans des boutons avec des écouteurs d'événement. Lorsqu'un signal "onclick" est émis, l'attribut self.status est analysé et le jeu est redémarré ou continue en fonction de cela.

Une dernière chose : les cartes (images) ne sont pas mélangées pour le moment, il me reste encore à implémenter cette fonctionnalité (sinon le jeu serait complètement ennuyeux. ).


Exactement cela - l'emplacement physique de l'objet. Le changer n'affectera rien d'autre à moins qu'un système externe ne l'utilise ou le mette à jour. Par exemple, dans les grandes entreprises, des attributs comme celui-ci peuvent être renseignés et synchronisés avec une base de données de suivi des actifs à l'aide d'un système IdM tel que MS ILM/FIM.

Le pointage d'emplacement des imprimantes est cool pour tout le monde s'il est bien fait. Dans Windows 7, votre vue "Trouver une imprimante" est automatiquement filtrée selon votre emplacement physique. Il s'agit en partie d'une configuration manuelle, en partie d'un sous-réseau IP.

Comme la plupart des attributs AD remplis par les utilisateurs/administrateurs, il est utilisé pour tout ce pour quoi vous voulez l'utiliser. En général, ce serait pour l'emplacement physique de l'objet, comme le souligne Chris McKeown, mais vous pouvez l'utiliser pour tout ce que vous voulez, et cela pourrait être utile si vous êtes une petite entreprise avec tout dans le même emplacement physique, étant donné que, par défaut, Emplacement est affiché plus en évidence que CustomAttribute8 et autres .

J'ai vu un environnement AD il y a un peu de temps où l'administrateur système l'utilisait pour insulter quelque peu subtilement les utilisateurs avec des emplacements comme dans les nuages, perdus dans l'expédition, hébergés à Cologne, et ainsi de suite (pensez que la tête de l'utilisateur est.), donc les utilisations possibles ne sont vraiment limités que par votre créativité (et peut-être votre niveau de malice).


Pourquoi ces lieux de crash n'ont-ils pas été localisés via l'ELT ?

Le 14 janvier 2019, à 9h10, heure indonésienne, le CVR du Lion Air JT-610 écrasé a été retrouvé. Un autre appareil vital a été trouvé plus tôt.

Il y a trois avions modernes qui se sont écrasés dans l'eau en Indonésie :

Adam Air, immatriculé PK-KKW, Boeing 737-400, vol KI514, le 1er janvier 2007, s'est écrasé sur Majene Sea en raison de la défaillance du Système de référence interne (IRS), reposait à 2 000 m sous la surface de la mer.

Air Asia, immatriculation PK-AXC, Airbus A320-216, vol QZ8501, s'est écrasé le 28-décembre-2015, dans la mer de Karimunjawa, en raison de l'échec avec le limiteur de course de gouvernail.

Lion Air, immatriculé PK-LQP, Boeing 737 Max-8, vol JT-610, s'est écrasé le 28 novembre 2018, dans la mer de Java. La cause du crash est toujours sous enquête.

Ces trois lieux d'écrasement n'ont pas été trouvés par le système d'instruments électroniques, mais par des pêcheurs.

Alors ma question est : pourquoi l'avion moderne n'a-t-il pas été localisé via son ELT ?


Voir la vidéo: QGIS Tutorial #16: Joindre des attributs sur la base dun champ commun