Suite

Les paramètres d'intervalle de grille se bloquent avant de modifier les valeurs dans le compositeur d'impression de QGIS


J'utilise QGIS 2.4 sous Mac OS 10.10 Yosemite. J'essaie juste de produire une carte avec une symbologie cartographique dans le compositeur d'impression. Données cartographiques : fichiers de formes de polygones et de lignes projetés dans SAD69 / zone UTM 23S/ EPSG:29193, échelle de dessin 1:124,051. Tout d'abord, j'ajoute une nouvelle carte sur le canevas et change l'échelle de la carte ; par la suite, j'essaie de créer une grille à partir des propriétés de l'élément, dans l'ordre suivant : je coche la case Afficher la grille ; puis, je sélectionne l'option croisée comme type de grille ; Ensuite, je change les intervalles X et Y en, disons, 10,0000000. Voici le point : après avoir modifié l'intervalle Y, Mac OS s'affiche et QGIS cesse de répondre.

Qu'est-ce que je fais mal ou saute des étapes dans la construction de la grille ?


Je pense que le problème est survenu parce que vous utilisez un intervalle sans correspondance (à partir de la capture d'écran que vous publiez, je ne vois pas les unités d'intervalle, que ce soit sur mapunits, milimeter ou centimeter)

Ou si dans votre machine, les unités d'intervalle n'étaient pas affichées, assurez-vous que votre couche utilise des crs avec une unité de distance (comme un mètre ou un pied). Il suffit de regarder les propriétés de la couche et d'aller dans l'onglet métadonnées et de voir les crs utilisés (généralement les crs sans unité de distance (degré) afficher

+proj=longlat +datum=WGS84 +no_defs

si tel est le cas, vous devez réenregistrer votre couche (données) et modifier le CRS de vos nouvelles données avec un CRS qui a une unité de distance comme les mètres

et essayez à nouveau d'utiliser le compositeur d'impression


Comment résoudre LinAlgError & ValueError lors de la formation du modèle arima avec Python

J'essaie d'implémenter un modèle de série chronologique et j'obtiens des exceptions étranges qui ne me disent rien. Je me demande si je fais une erreur ou si c'est totalement attendu. Voici les détails.

Lors de l'entraînement de mon modèle, j'essaie de faire une recherche de grille pour trouver les meilleurs paramètres (p, d, q). Voici le code complet (et j'expliquerai plus bas ce qui se passe ici):

Le reproductible le code ci-dessous est essentiellement une copie de https://machinelearningmastery.com/grid-search-arima-hyperparameters-with-python/, avec quelques légères modifications.

Et voici la sortie (pas tout mais ça donne assez d'informations) :

Le code essaie simplement tous les différents paramètres donnés, entraîne le modèle, calcule le MSE (erreur quadratique moyenne) pour chaque paramètre donné, puis sélectionne le meilleur (basé sur le MSE minimum).

Mais pendant la procédure de formation, le code continue de lancer des exceptions LinAlgError et ValueError, ce qui ne me dit rien.

Et pour autant que je puisse le suivre, le code n'entraîne pas vraiment certains paramètres lorsque ces exceptions sont levées, puis passe simplement au paramètre suivant qui sera essayé.

Pourquoi vois-je ces exceptions ? Peuvent-ils être ignorés ? Que dois-je faire pour le résoudre?


Pourquoi le critère d'information d'Akaike (AIC) favorise-t-il parfois un modèle sur-équipé ?

Comme exercice pour développer une expérience pratique de travail avec des critères de sélection de modèle, j'ai calculé les ajustements des données de mpg sur autoroute par rapport aux données de cylindrée du moteur à partir de l'ensemble de données d'exemple tidyverse mpg en utilisant des modèles polynomiaux et B-spline de complexité paramétrique croissante allant de 3 à 19 degrés de liberté (notez que le degré ou le nombre df dans l'une ou l'autre des familles de modèles compte le nombre de coefficients ajustés supplémentaires outre L'interception).

Les résultats de la procédure d'ajustement sont présentés dans le graphique ci-dessous. La ligne bleue montre le résultat de régression prévu sur un ensemble de valeurs de cylindrée du moteur régulièrement espacées le long de la plage de l'ensemble de données d'entrée, tandis que les points orange-rouge montrent le résultat aux valeurs dans l'ensemble de données d'origine qui ont été réellement utilisées pour dériver le en forme:

11 degrés de liberté, les lignes bleues (qui sont les plus visibles là où il n'y avait pas d'observations dans l'ensemble de données d'entrée) commencent à montrer des signes classiques de surapprentissage : elles se tortillent et tournent énormément, variant beaucoup plus largement que les données d'entrée elles-mêmes, certains cas s'étendant jusqu'à la région non physique (c'est-à-dire, plongeant dans un mpg négatif, qui n'a pas d'interprétation physique). De plus, les deux classes de modèles (polynôme vs B-spline) présentent un caractère aléatoire dans les emplacements de ces creux et ondulations. Un graphique supplémentaire ci-dessous montre les différences entre les deux familles de modèles par rapport au nombre croissant de paramètres de modèle. Pour les modèles plus simples avec moins de paramètres, la différence est uniformément faible, généralement < 1-2 mpg sur toute la plage de l'ensemble de données, tandis que pour les modèles avec plus de paramètres, la différence est grande et devient généralement plus divergente à mesure que le nombre de paramètres augmente :

Sur la base du surajustement apparent que je peux voir avec un nombre plus élevé de paramètres de modèle ajustés, je m'attendrais à ce que la plupart des critères de sélection de modèle choisissent un modèle optimal comme ayant < 10 coefficients ajustés. Cependant, j'ai extrait les valeurs du critère d'information d'Akaike (AIC) renvoyées avec chacun des modèles ajustés, et ce n'est pas réellement ce qui se passe dans ce cas. Au lieu de cela, les modèles les plus complexes avec le plus grand nombre de paramètres ajustés présentent les valeurs AIC les plus petites et sont donc favorisés par AIC :

Éditer: sur la base de la réponse d'un autre contributeur, j'ai modifié le graphique ci-dessus pour afficher à la fois AICc et AIC. Comme prévu, l'utilisation d'AICc au lieu d'AIC entraîne une correction qui est en effet plus importante pour les modèles avec un plus grand nombre de paramètres, mais pas assez importante pour faire une différence dans le résultat final :

Ma question: Que se passe-t-il ici? Pourquoi l'AIC donne-t-elle un résultat contre-intuitif, favorisant apparemment les modèles sur-équipés ? Et existe-t-il des critères alternatifs bien établis dont on pourrait s'attendre à ce qu'ils fonctionnent mieux dans ce cas, en sélectionnant un modèle moins compliqué qui ne présente pas un surapprentissage aussi évident ?

Pour référence, le code qui produit ces tracés est ici (Éditer: mis à jour pour produire la version 2 du graphique AIC en fonction des degrés de liberté d'entrée) :


1 réponse 1

Je suis récemment tombé sur le même message d'erreur, le même que celui qui est apparu lorsque j'ai utilisé fig.savefig . Je pense que le problème se produit peut-être plus tôt dans le code, plutôt que dans la fonction savefig elle-même. Pour mes tracés, j'ai retracé le problème à un argument désormais obsolète dans plt.scatter() - j'avais utilisé edgecolors='' , qui devrait maintenant être edgecolors=None , et cela provoquait le même message d'erreur de 'ValueError: Expected Tableau à 2 dimensions, obtenu 1' lorsque j'ai essayé d'enregistrer la figure.

Par exemple, ce bloc de code génère l'erreur, mais si l'argument edgecolors est remplacé par =None, le code s'exécute sans problème.

Je me demande si vous avez utilisé un argument déconseillé similaire lorsque vous complotiez? Il était plus facile de remonter en effectuant un petit tracé de test dans ipython, car l'avertissement de dépréciation était correctement déclenché, ce qui ne l'était pas lors de la simple exécution de fichiers .py.

Edit: Je viens de voir que vous avez inclus votre code en bas - je pense que vous avez le même problème, vous avez utilisé edgecolors="" dans votre appel à fill_between


2 réponses 2

Ne duplique aucun des points de révision de code de @Peilonrayz .

Arrêtez de lire des fichiers entiers en mémoire lorsque vous pouvez traiter le fichier ligne par ligne en un seul passage, et arrêtez de créer d'énormes listes en mémoire qui sont ensuite itérées une seule fois. Ces deux choses créent une énorme pression de mémoire inutile qui peut être évitée en bouclant et/ou en utilisant des expressions génératrices.

En utilisant une simple boucle sur toutes les lignes du fichier :

Pas d'expression régulière. Pas de lecture du fichier entier en mémoire. Pas de création d'une liste de valeurs de confiance individuelles à résumer par la suite.

De plus, nous avons corrigé un bug ! Si " X-DSPAM-Confidence: " apparaît au milieu d'une ligne, au lieu d'être au début comme l'exige le texte du problème, nous n'essayons pas de le traiter.

Mais peut-être vouliez-vous une méthode de programmation plus fonctionnelle, où vous :

  1. trouver toutes les lignes de confiance,
  2. extraire les valeurs de confiance, et
  3. calculer la moyenne

. le tout sous forme d'étapes distinctes que vous pouvez composer ensemble et réutiliser pour résoudre d'autres problèmes. N'ayez pas peur ! Nous pouvons le faire également! Saisissez les expressions du générateur :

Tout d'abord, ouvrons le fichier et lisons toutes les lignes correspondantes dans une liste, en utilisant la compréhension de liste :

Cette deuxième instruction parcourt chaque ligne du fichier, vérifie si la ligne commence par le texte souhaité et, dans l'affirmative, l'inclut dans la liste en cours de construction. Nous pouvons plus tard itérer sur les lignes pour traiter davantage chaque ligne individuellement.

C'est à peu près ce que nous voulons faire. Eh bien, c'est exactement ce que nous voulons faire, mais nous ne voulons pas tout faire d'un coup. Si nous modifions le [. ] à (. ) , on passe de la compréhension de liste à une expression génératrice.

Maintenant, la deuxième déclaration a fait. rien. Nous n'avons pas encore lu le premier caractère du fichier. Ce que nous avons renvoyé est une expression génératrice qui, lorsque nous demandons la première valeur, commence à lire les lignes jusqu'à ce qu'elle en trouve une qui correspond, puis suspend son exécution et renvoie cette valeur.

D'accord. Extrayons uniquement les valeurs de confiance :

Oups ! C'est la compréhension de la liste. Il bouclera sur toutes les lignes que le générateur de lignes peut produire, sautera le préfixe et renverra le reste. Encore une fois, changez ces [. ] à (. ) :

Mieux! Maintenant, ce sont toujours des chaînes, nous devrons donc les convertir en valeurs à virgule flottante. Trop facile. Il suffit de les mapper :

confidences est un générateur. Si vous avez dit list(confidences) , vous créeriez cette liste en mémoire de valeurs flottantes pour toutes les valeurs " X-DSPAM-Confidence: " dans le fichier. Et vous pouvez ensuite additionner (. ) et len ​​(. ) la liste de valeurs pour calculer la moyenne. Mais nous ne voulons pas réaliser la liste en mémoire, donc .

. on demande des valeurs au générateur de confidences, on les additionne une à la fois en comptant au fur et à mesure. Lorsque le générateur est épuisé, la boucle for se termine et nous retournons la moyenne.

Remarque : la solution sans générateur était plus robuste en convertissant les chaînes de valeurs de confiance en flottants, via un essai. sauf bloc. La solution d'expression génératrice illustrée ci-dessus omet cela. La robustesse peut être améliorée en utilisant une correspondance plus précise lors de la recherche des lignes " X-DSPAM " (regex). Alternativement, une fonction génératrice pourrait être utilisée, qui rejette les valeurs non flottantes.

Noter (extrait du commentaire de @Roland Illig) : comme les expressions génératrices retardent l'exécution de leur opération, toutes les ressources qu'elles utilisent doivent rester disponibles jusqu'à la fin de leur traitement. Ils ne peuvent pas être utilisés pour calculer la confiance moyenne du spam si le fichier à partir duquel ils lisent est fermé avant que la moyenne n'ait été calculée. Dans les exemples ci-dessus, les expressions du générateur sont entièrement consommées dans le corps du bloc with open(. ) as file:, donc le fichier est resté ouvert.

Cela ne signifie pas que les expressions du générateur doivent toutes apparaître dans l'instruction with. Ils peuvent être répartis sur de nombreuses fonctions, mais leur exécution doit être limitée à l'intervalle d'ouverture du fichier :


6 réponses 6

ServerAliveInterval : nombre de secondes pendant lesquelles le client attendra avant d'envoyer un paquet nul au serveur (pour maintenir la connexion active).

ClientAliveInterval : nombre de secondes pendant lesquelles le serveur attendra avant d'envoyer un paquet nul au client (pour maintenir la connexion active).

La définition d'une valeur de 0 (la valeur par défaut) désactivera ces fonctionnalités afin que votre connexion puisse être interrompue si elle est inactive trop longtemps.

ServerAliveInterval semble être la stratégie la plus courante pour maintenir une connexion active. Pour éviter le problème de tuyau cassé, voici la configuration ssh que j'utilise dans mon fichier .ssh/config :

Le réglage ci-dessus fonctionnera de la manière suivante,

  1. Le client attendra inactif pendant 60 secondes (temps ServerAliveInterval) et enverra un "paquet nul no-op" au serveur et attendra une réponse. Si aucune réponse n'arrive, il continuera d'essayer le processus ci-dessus jusqu'à 10 (ServerAliveCountMax) fois (600 secondes). Si le serveur ne répond toujours pas, le client déconnecte la connexion ssh.

ClientAliveCountMax côté serveur peut également aider. Il s'agit de la durée pendant laquelle un client est autorisé à ne pas répondre avant d'être déconnecté. La valeur par défaut est 3, comme dans trois ClientAliveInterval.

Ceci est expliqué dans le manuel sshd_config ( man sshd_config ):

Intervalle ClientAlive

Définit un délai d'attente en secondes après lequel, si aucune donnée n'a été reçue du client, sshd enverra un message via le canal crypté pour demander une réponse au client. La valeur par défaut est 0, indiquant que ces messages ne seront pas envoyés au client. Cette option s'applique uniquement à la version 2 du protocole.

ClientAliveCountMax

La valeur par défaut est 3. Si ClientAliveInterval (voir ci-dessous) est défini sur 15, et ClientAliveCountMax est laissé à la valeur par défaut, les clients SSH qui ne répondent pas seront déconnectés après environ 45 secondes. Cette option s'applique uniquement à la version 2 du protocole.

Pour les options client, voir l'explication dans man ssh_config :

ServerAliveInterval

Définit un délai d'attente en secondes après lequel, si aucune donnée n'a été reçue du serveur, ssh enverra un message via le canal crypté pour demander une réponse au serveur. La valeur par défaut est 0, indiquant que ces messages ne seront pas envoyés au serveur. Cette option s'applique uniquement à la version 2 du protocole.

ServerAliveCountMax

La valeur par défaut est 3. Si, par exemple, ServerAliveInterval est défini sur 15 et ServerAliveCountMax est laissé à la valeur par défaut, si le serveur ne répond plus, ssh se déconnectera après environ 45 secondes. Cette option s'applique uniquement à la version 2 du protocole.

Sur la base de ci-dessus, 0 signifie qu'il est désactivé. Par conséquent, vous devez définir ces valeurs suffisamment élevées pour éviter Tuyau cassé Erreur.


Si vous parlez de fichiers JPEG, alors l'utilitaire jpeginfo est exactement ce que vous recherchez. Il peut vérifier les fichiers pour différents types d'erreurs et de corruption JPEG et soit renvoyer un code d'erreur (la chose la plus utile pour les scripts), soit simplement supprimer les fichiers avec des erreurs.

Je l'utilise dans le cadre de mon transfert de fichiers initial, pour m'assurer que tout est bien copié sans compter sur une vérification manuelle. (Après cela, je m'assure que leurs sommes de contrôle ne changent pas dans le cadre de ma protection normale de sauvegarde/bitrot.)

Le programme est en ligne de commande et est fourni sous forme de code source, mais il devrait être facile à construire et à utiliser sur n'importe quelle distribution Linux ou sur un Mac avec un environnement de développement correctement configuré. Je suis sûr que vous pourriez même le faire sous Windows avec Cygwin ou MinGW. (Par exemple, bien que je ne puisse garantir son intégrité, cet article de blog semble légitime et comprend un téléchargement précompilé.) Pour le créer vous-même :

Cela devrait créer une commande jpeginfo que vous pouvez soit exécuter sur place, soit copier où vous le souhaitez (éventuellement en utilisant make install ).

Ensuite, vous l'exécutez comme ceci:

Ici, test1.jpg est parfaitement correct, et test2.jpg j'ai supprimé quelques octets de la fin, et test3.jpg j'ai modifié quelques octets aléatoires dans l'en-tête.

Si vous avez des fichiers RAW, consultez cette page de l'American Society of Media Photographers sur la validation DNG, ou une autre sur les détails de la validation des données, qui couvre l'utilisation du convertisseur DNG d'Adobe pour valider par lots les formats RAW propriétaires. (Malheureusement, il s'agit d'une opération d'interface graphique et pas nécessairement facilement scriptable.)

Si vous avez une caméra qui sort nativement la version 1.2 de DNG, c'est encore mieux, car cela inclut une somme de contrôle MD5 intégrée des données d'image. Malheureusement, cela ne semble pas être stocké avec les métadonnées d'image normales - ou au moins exiftool et exiv2 ne le reconnaissent pas, et ils lisent les fichiers 1.2 DNG en général - ce qui signifie que pour autant que je sache actuellement la validation Adobe l'outil est le seul moyen de profiter de cela aussi.


Hfrhyu

Dois-je utiliser un compte de messagerie personnel ou officiel lors de l'inscription à des sites Web externes à des fins professionnelles ?

Comment tracer un diagramme de Farey ?

La régression bootstrap permet-elle l'inférence ?

Si un druide centaure se transforme en élan géant, ses caractéristiques de charge se cumulent-elles ?

"Le corps de mon collègue est incroyable"

Pourquoi les Allemands ont-ils interdit la possession de pigeons de compagnie à Rostov-sur-le-Don en 1941 ?

Formation incassable contre le cri du carnarium

Pourquoi mon fichier journal est-il si volumineux ? 22 Go. J'exécute des sauvegardes de journaux

Comment déplacer le joueur tout en permettant aux forces de l'affecter

LWC et paramètres complexes

Y a-t-il jamais eu un axiome rendu un théorème ?

Les séparateurs de cabine sont-ils utilisés pour « cacher » le flex de l'avion ?

Une planète peut-elle avoir une attraction gravitationnelle différente selon sa position en orbite autour de son soleil ?

Quels sont les avantages et les inconvénients des one shots par rapport aux campagnes ?

Cette nourriture est-elle un pain ou une miche de pain ?

Comment est-il possible de modifier le mot de passe de l'utilisateur après le cryptage du stockage ? (sur OS X, Android)

Pourquoi la "communication du pain" dans l'arène de Catching Fire a-t-elle été laissée de côté dans le film?

Est-ce qu'un fil qui pend m'électrocute vraiment si je me tiens dans l'eau ?

Qu'est-ce que le roulement de 19 ans du GPS et présente-t-il un problème de cybersécurité ?

Compte de messagerie attaqué (vraiment) - que puis-je faire ?

parents vieillissants sans investissement

Doomsday-horloge pour ma planète fantastique

Pourquoi la délocalisation des aéroports ne se fait pas progressivement ?

Où remplir ma bouteille en Inde ?

Appeler une fonction Python pour chaque page d'un atlas

QGIS Atlas with insert mapComment filtrer la légende par contenu de carte dans composer avec des couches raster ?Définition d'une grille dans QGIS qui ajuste automatiquement ses intervalles ?Le script de traitement QGIS cesse de fonctionner après la première exécutionAjout d'entités traitées et d'une couche au projet QGIS 3Comment rendre l'arrière-plan d'une carte transparent dans une mise en page ? Widget de plug-in, inclure l'extension de fichier par défautQGIS Atlas avec insert mapPyQGIS - QgsProcessingParameterFeatureSink, pourquoi une entrée utilisateur est-elle requise ? PYQGIS 3 Utilisation de la sortie de l'algorithme GRASS v.distanceQGIS Python obtient le nom de la page de l'atlas actuel

J'ai fait un script pour faire des calculs pour chaque page d'un atlas QGIS (QGIS Atlas avec insert map)

Le script ajuste le cadre de délimitation d'une carte sur la page de mise en page. Pour le faire fonctionner pour chaque page, j'ai créé une zone de texte où le script ne renvoie rien. Je ne me soucie pas de la valeur de retour, je veux juste l'effet secondaire de l'ajustement de la boîte englobante. La solution fonctionne bien, mais elle semble un peu lourde.

Y a-t-il un autre endroit où je pourrais mettre le script pour qu'il s'exécute une fois par page pour mon atlas ?

(en utilisant qgis 3.6.1 sur Windows 10)

Correction: En testant un peu plus, il s'avère que certaines cartes sont exportées avant la fin du rendu (je récupère des ensembles de données relativement volumineux à partir d'un serveur wms). Lorsque je parcoure manuellement les cartes, cela va un peu lentement, mais lorsque j'exporte l'ensemble de l'atlas, pour environ un tiers des cartes, la carte que j'ajuste manuellement montre la carte de l'ancienne page.

J'ai fait un script pour faire des calculs pour chaque page d'un atlas QGIS (QGIS Atlas avec carte d'insertion)

Le script ajuste le cadre de délimitation d'une carte sur la page de mise en page. Pour le faire fonctionner pour chaque page, j'ai créé une zone de texte où le script ne renvoie rien. Je ne me soucie pas de la valeur de retour, je veux juste l'effet secondaire de l'ajustement de la boîte englobante. La solution fonctionne bien, mais elle semble un peu lourde.

Y a-t-il un autre endroit où je pourrais mettre le script pour qu'il s'exécute une fois par page pour mon atlas ?

(en utilisant qgis 3.6.1 sur Windows 10)

Correction: En testant un peu plus, il s'avère que certaines cartes sont exportées avant la fin du rendu (je récupère des ensembles de données relativement volumineux à partir d'un serveur wms). Lorsque je parcoure manuellement les cartes, cela va un peu lentement, mais lorsque j'exporte l'ensemble de l'atlas, pour environ un tiers des cartes, la carte que j'ajuste manuellement montre la carte de l'ancienne page.

J'ai fait un script pour faire des calculs pour chaque page d'un atlas QGIS (QGIS Atlas avec carte d'insertion)

Le script ajuste le cadre de délimitation d'une carte sur la page de mise en page. Pour le faire fonctionner pour chaque page, j'ai créé une zone de texte où le script ne renvoie rien. Je ne me soucie pas de la valeur de retour, je veux juste l'effet secondaire de l'ajustement de la boîte englobante. La solution fonctionne bien, mais elle semble un peu lourde.

Y a-t-il un autre endroit où je pourrais mettre le script pour qu'il s'exécute une fois par page pour mon atlas ?

(en utilisant qgis 3.6.1 sur Windows 10)

Correction: En testant un peu plus, il s'avère que certaines cartes sont exportées avant la fin du rendu (je récupère des ensembles de données relativement volumineux à partir d'un serveur wms). Lorsque je parcoure manuellement les cartes, cela va un peu lentement, mais lorsque j'exporte l'ensemble de l'atlas, pour environ un tiers des cartes, la carte que j'ajuste manuellement montre la carte de l'ancienne page.

J'ai fait un script pour faire des calculs pour chaque page d'un atlas QGIS (QGIS Atlas avec insert map)

Le script ajuste le cadre de délimitation d'une carte sur la page de mise en page. Pour le faire fonctionner pour chaque page, j'ai créé une zone de texte où le script ne renvoie rien. Je ne me soucie pas de la valeur de retour, je veux juste l'effet secondaire de l'ajustement de la boîte englobante. La solution fonctionne bien, mais elle semble un peu lourde.

Y a-t-il un autre endroit où je pourrais mettre le script pour qu'il s'exécute une fois par page pour mon atlas ?

(en utilisant qgis 3.6.1 sur Windows 10)

Correction: En testant un peu plus, il s'avère que certaines cartes sont exportées avant la fin du rendu (je récupère des ensembles de données relativement volumineux à partir d'un serveur wms). Lorsque je parcoure manuellement les cartes, cela va un peu lentement, mais lorsque j'exporte l'ensemble de l'atlas, pour environ un tiers des cartes, la carte que j'ajuste manuellement montre la carte de l'ancienne page.


1 réponse 1

Je n'ai pas QGIS sous la main pour essayer pour le moment, mais je pense que @parent renvoie une entité, vous le voulez donc comme paramètre pour une fonction qui prend une entité en entrée (par exemple, geometry(<feature>) ).

Qu'en est-il de l'attribut() ? Vous pouvez essayer filter:=attribute(@parent,'field')򗧈 - gardez à l'esprit que le nom du champ est entre guillemets simples et sensible à la casse ici. IIRC.

EDIT: Cela ne fonctionne que dans QGIS 3.x car @parent n'est pas disponible dans 2.x

Merci pour l'idée. Malheureusement ça ne marche pas non plus. Je ne sais pas quelle valeur '@parent' appelle ici, mais cela ne filtre rien, la formule donne simplement la valeur totale non filtrée. J'ai essayé de mettre '@parent' dans une variété d'endroits différents dans l'expression d'attribut mais jusqu'à présent en vain.

Désolé @Isaacson, je ne sais pas comment j'ai raté votre commentaire avant. J'aurais dû ajouter que cette expression ne fonctionne que dans Q 3.x et au-dessus. Réponse maintenant modifiée.


Introduction

Le terme « heure d'or » est un concept bien connu parmi les fournisseurs de systèmes de traumatologie et de services médicaux d'urgence (SMU), ce qui suggère que la morbidité et la mortalité sont affectées si les patients blessés ne reçoivent pas de soins définitifs dans la première heure suivant la blessure. Bien que cette affirmation sur la relation entre le temps et les résultats des patients traumatisés semble raisonnable, comme de nombreux concepts en médecine, des preuves solides pour étayer cette croyance sont difficiles à trouver dans les études précédentes (Lerner et Moscati, 2001, Rogers et al., 2015). Il existe deux études de Sampalis et al. du Québec dans les années 1990 (Sampalis et al., 1999, Sampalis et al., 1993), et ils ont trouvé des corrélations significatives entre la réduction du temps hors de l'hôpital et la diminution de la mortalité chez les patients gravement blessés. Cependant, la littérature plus récente offrait généralement des preuves non concluantes voire négatives de ce concept (Di Bartolomeo et al., 2007, Kleber et al., 2013, Stiell et al., 2008). En 2010, Newgard et al. a mené l'une des enquêtes les plus complètes sur les intervalles EMS en incluant 3 656 patients traumatisés transportés par 146 agences EMS vers 51 centres de traumatologie, et aucune corrélation n'a pu être trouvée entre les intervalles EMS et la mortalité chez les patients blessés présentant une anomalie physiologique (Newgard, et al., 2010 ). En 2015, ils ont réexaminé « l'heure d'or » pour les patients en état de choc et de traumatisme crânien. Pourtant, il n'y avait aucune association entre le temps et le résultat dans cet échantillon nord-américain (Newgard, et al., 2015).

Malgré ces preuves contradictoires, le transport rapide vers les installations médicales est devenu une norme de triage sur le terrain pour les prestataires de services médicaux d'urgence. C'est particulièrement vrai pour les patients traumatisés de la route, qui représentent une part importante de l'ensemble des patients traumatisés. Le problème est, pour les prestataires de services médicaux d'urgence, dans quels établissements ces patients traumatisés de la route doivent-ils être envoyés ? Aux États-Unis, les centres de traumatologie sont classés par l'American College of Surgeons (ACS) du niveau I au niveau III, et le Field Triage Decision Scheme a été développé par le Committee on Trauma (ACSCOT) comme lignes directrices pour le processus de triage sur le terrain depuis 1986. , et a été périodiquement mis à jour (Newgard, et al., 2011). Ces directives suggèrent qu'en général, tous les patients souffrant de blessures graves devraient être transportés vers des centres de traumatologie de niveau I/II, tandis que le reste devrait être transporté vers des installations locales (Wang, Sasser, & Jurkovich, 2009). Cependant, contrairement à d'autres principales causes de traumatismes telles que les chutes, les collisions graves avec des véhicules à moteur ne se produisent généralement pas dans les résidences des personnes. Selon la National Highway Traffic Safety Administration (NHTSA), alors que seulement 24% du total des accidents se produisent dans les zones rurales, les accidents ruraux représentaient 59% de tous les accidents mortels car ils peuvent ne pas être proches des centres de traumatologie (Hu, Dong, & Huang , 2018).

Bien que les centres de traumatologie aux États-Unis maintiennent une croissance soutenue, leur répartition géographique variable à travers les États entraîne une inégalité d'accès aux soins de traumatologie (Branas et al., 2005, Hu et al., 2018). Selon une étude de Lerner et al. (2011), 42 États ont adopté les directives ACSCOT pour améliorer la précision du triage des traumatismes, parmi lesquels 29 États ont modifié les directives officielles pour répondre à un besoin géographique ou démographique unique au sein de l'État. De nombreux protocoles de triage locaux définissent que si le temps de transport estimé est inférieur à une certaine valeur, tout patient adulte subissant un traumatisme majeur doit être transporté vers le centre de traumatologie de niveau I II le plus proche, sinon être transporté vers un établissement de bas niveau, mais ces estimations de transport les limites varient considérablement de 20 à 45 minutes, et même plus d'un État à l'autre (Hu, Dong, Dong, et al., 2018). En outre, la plupart des États ne centralisent pas l'autorité sur les services EMS. À titre d'exemple, 32 agences EMS locales en Californie élaborent leur propre politique de triage qui régit les 58 comtés de l'État (Staudenmayer, Lin, Mackersie, Espagne, & Hsia, 2014). Une étude longitudinale de Staudenmayer et al. (2014) ont identifié qu'il existe une variabilité régionale significative dans les schémas de triage pour les patients gravement blessés en Californie, démontrant que le schéma de triage sur le terrain peut même varier d'un comté à l'autre.

De multiples facteurs peuvent contribuer au risque de mortalité chez les patients traumatisés, tels que le sexe, l'âge, la gravité de la blessure, le mécanisme de la blessure et les intervalles EMS. Les différents modèles de triage sur le terrain pourraient-ils influencer l'association entre les intervalles EMS et la mortalité ? Une hypothèse raisonnable est que pour certaines zones rurales, les prestataires de services médicaux d'urgence peuvent être enclins à envoyer des patients de la route souffrant de blessures graves vers les hôpitaux locaux en fonction du temps de transport estimé vers les centres de traumatologie, tandis que le reste est considéré comme moins gravement blessé directement vers les centres de traumatologie. Cela peut entraîner le problème du biais de sélection de l'échantillon parmi les études précédentes. Par exemple, afin de minimiser l'effet du type d'hôpital (hôpital de traumatologie ou non traumatisé) sur les résultats, l'étude susmentionnée de Newgard et al. (2020) n'ont inclus que les patients transportés directement vers les centres de traumatologie lors de la sélection des participants. D'un autre côté, la différence entre un centre sans traumatologie et un centre de traumatologie peut contrecarrer l'avantage d'un accouchement en temps opportun. Une revue systématique de la littérature par Celso et al. (2006) ont révélé qu'il y avait une réduction de 15 % de la mortalité chez les patients gravement blessés en raison de la présence d'un système de traumatologie. Plusieurs études ont également suggéré que lorsque les patients étaient livrés directement dans des centres de traumatologie au lieu d'hôpitaux non traumatisés locaux, les temps de transport plus longs n'étaient pas liés à des résultats indésirables (Nirula et al., 2010, Sampalis et al., 1997, Sampalis et al., 1999). Il est nécessaire d'identifier les modèles de triage entre les États et les comtés, et de clarifier les intervalles EMS et les résultats associés des patients traumatisés sur la route sur la base des modèles de triage sur le terrain.

L'objectif principal de cet article est d'examiner les modèles de triage sur le terrain au niveau du comté, et d'identifier davantage la corrélation entre les intervalles EMS et la mortalité parmi les patients gravement blessés sur la route. Pour atteindre cet objectif, les données d'accident du système de rapport d'analyse des décès (FARS) entre 2013 et 2017 ont été adoptées et un logiciel de système d'information géographique (SIG) a été utilisé pour calculer le temps de transport estimé vers les principaux centres de traumatologie. Les différents modèles de soins préhospitaliers au niveau du comté ont été démontrés en utilisant les données de l'Ohio et de la Caroline du Nord comme exemples, puis des analyses de corrélation entre les intervalles EMS et les taux de mortalité au niveau du comté ont été effectuées. Les résultats détaillés de la corrélation entre les États ont été comparés davantage pour tenter d'identifier l'effet des modèles de triage sur le terrain sur les intervalles EMS et les résultats associés.


Isochrones de temps de conduite à partir d'un seul fichier de formes à l'aide de QGIS, PostGIS et Pgrouting

Ceci est un article invité par Chris Kohler @Chriskohler8.

Introduction:

Ce guide fournit des instructions étape par étape pour produire des isochrones de temps de conduite à l'aide d'un seul fichier de formes vectorielles. La méthode décrite ici consiste à créer un réseau de routage à l'aide d'un seul fichier de formes vectorielles de vos données routières dans une boîte virtuelle. De plus, le réseau est construit en créant des nœuds de début et de fin (nœuds source et cible) sur chaque segment de route. Nous utiliserons Postgresql, avec les extensions PostGIS et Pgrouting, comme base de données. Veuillez considérer que ce type de routage est juste, en ce qui concerne la précision, car les algorithmes de routage sont basés sur les emplacements des nœuds et non sur des adresses spécifiques. Je travaille actuellement sur un flux de travail amélioré pour que les points d'adresse du site servent de nœuds pour optimiser les résultats. L'un des nombreux avantages de ce workflow est l'absence de coût financier à produire (en dehors de la collecte de vos données routières). Je vais fournir des instructions pour créer et utiliser votre machine virtuelle dans ce guide.

Étapes :–Obtenir la boîte virtuelle (commencer)–

Intro 2. Démarrer le téléchargement/l'installation OSGeo-Live 11 (https://live.osgeo.org/en/overview/overview.html).

Les images utilisées dans ce flux de travail afficheront 10.5, bien que la version 11 puisse être appliquée de la même manière. Assurez-vous de télécharger la version : osgeo-live-11-amd64.iso. Si vous avez du mal à le trouver, voici le lien direct vers le téléchargement (https://sourceforge.net/projects/osgeo-live/files/10.5/osgeo-live-10.5-amd64.iso/download)
Intro 3. Prêt pour la création de machine virtuelle : Nous utiliserons la suite OSGeo-Live 11 téléchargée avec une machine virtuelle que nous créons pour commencer notre flux de travail. Les étapes pour créer votre machine virtuelle sont répertoriées ci-dessous. De plus, voici les étapes d'un atelier précédent avec des détails supplémentaires sur la configuration de votre machine virtuelle avec osgeo live (http://workshop.pgrouting.org/2.2.10/en/chapters/installation.html).

1. Créez une machine virtuelle : Dans cette étape, nous commençons à créer la machine virtuelle hébergeant notre base de données.

Ouvrez Oracle VM VirtualBox Manager et sélectionnez "Nouvelle" situé en haut à gauche de la fenêtre.

Remplissez ensuite le nom, le système d'exploitation, la mémoire, etc. pour créer votre première VM.

2. Ajoutez un contrôleur IDE : Le but de cette étape est de créer un espace réservé pour la suite osgeo 11 à implémenter. Dans la fenêtre principale de la boîte virtuelle, cliquez avec le bouton droit sur votre nouvelle machine virtuelle et ouvrez les paramètres.

Dans la fenêtre des paramètres, sur le côté gauche, sélectionnez l'onglet de stockage.

Trouver " ajoute un nouveau contrôleur de stockage ” bouton situé en bas de l'onglet. Be careful of other buttons labeled “adds new storage attachment”! Sélectionnez " adds new storage controller ” button and a drop-down menu will appear. From the top of the drop-down select “Add IDE Controller”.

You will see a new item appear in the center of the window under the “Storage Tree”.

3. Add Optical Drive: The osgeo 11 suite will be implemented into the virtual machine via an optical drive. Highlight the new controller IDE you created and select “add optical drive”.

A new window will pop-up and select “Choose Disk”.

Locate your downloaded file “osgeo-live 11 amd64.iso” and click open. A new object should appear in the middle window under your new controller displaying “osgeo-live-11.0-amd64.iso”.

Finally your virtual machine is ready for use.
Start your new Virtual Box, then wait and follow the onscreen prompts to begin using your virtual machine.

–Getting Virtual Box(end)—

4. Creating the routing database, and both extensions (postgis, pgrouting): The database we create and both extensions we add will provide the functions capable of producing isochrones.

To begin, start by opening the command line tool (hold control+left-alt+T) then log in to postgresql by typing “psql -U user” into the command line and then press Enter. For the purpose of clear instruction I will refer to database name in this guide as “routing”, feel free to choose your own database name. Please input the command, seen in the figure below, to create the database:

You can use “c routing” to connect to the database after creation.

The next step after creating and connecting to your new database is to create both extensions. I find it easier to take two-birds-with-one-stone typing “psql -U user routing” this will simultaneously log you into postgresql and your routing database.

When your logged into your database, apply the commands below to add both extensions

5. Load shapefile to database: In this next step, the shapefile of your roads data must be placed into your virtual machine and further into your database.

My method is using email to send myself the roads shapefile then download and copy it from within my virtual machines web browser. From the desktop of your Virtual Machine, open the folder named “Databases” and select the application “shape2pgsql”.

Follow the UI of shp2pgsql to connect to your routing database you created in Step 4.

Next, select “Add File” and find your roads shapefile (in this guide we will call our shapefile “roads_table”) you want to use for your isochrones and click Open.

Finally, click “Import” to place your shapefile into your routing database.

6. Add source & target columns: The purpose of this step is to create columns which will serve as placeholders for our nodes data we create later.

There are multiple ways to add these columns into the roads_table. The most important part of this step is which table you choose to edit, the names of the columns you create, and the format of the columns. Take time to ensure the source & target columns are integer format. Below are the commands used in your command line for these functions.

7. Create topology: Next, we will use a function to attach a node to each end of every road segment in the roads_table. The function in this step will create these nodes. These newly-created nodes will be stored in the source and target columns we created earlier in step 6.

As well as creating nodes, this function will also create a new table which will contain all these nodes. The suffix “_vertices_pgr” is added to the name of your shapefile to create this new table. For example, using our guide’s shapefile name , “roads_table”, the nodes table will be named accordingly: roads_table_vertices_pgr . However, we will not use the new table created from this function (roads_table_vertices_pgr). Below is the function, and a second simplified version, to be used in the command line for populating our source and target columns, in other words creating our network topology. Note the input format, the “geom” column in my case was called “the_geom” within my shapefile:

Below is an example(simplified) function for my roads shapefile:

8. Create a second nodes table: A second nodes table will be created for later use. This second node table will contain the node data generated from pgr_createtopology function and be named “node”. Below is the command function for this process. Fill in your appropriate source and target fields following the manner seen in the command below, as well as your shapefile name.

To begin, find the folder on the Virtual Machines desktop named “Bases de données” and open the program “pgAdmin lll” located within.

Connect to your routing database in pgAdmin window. Then highlight your routing database, and find “SQL” tool at the top of the pgAdmin window. The tool resembles a small magnifying glass.

We input the below function into the SQL window of pgAdmin. Feel free to refer to this link for further information: (https://anitagraser.com/2011/02/07/a-beginners-guide-to-pgrouting/)

  1. Create a routable network: After creating the second node table from step 8, we will combine this node table(nœud) with our shapefile(roads_table) into one, new, table(réseau) that will be used as the routing network. This table will be called “network” and will be capable of processing routing queries. Please input this command and execute in SQL pgAdmin tool as we did in step 8. Here is a reference for more information:( https://anitagraser.com/2011/02/07/a-beginners-guide-to-pgrouting/ )

10. Create a “noded” view of the network: This new view will later be used to calculate the visual isochrones in later steps. Input this command and execute in SQL pgAdmin tool.

11.​ Add column for speed:​ This step may, or may not, apply if your original shapefile contained a field of values for road speeds.

In reality a network of roads will typically contain multiple speed limits. The shapefile you choose may have a speed field, otherwise the discrimination for the following steps will not allow varying speeds to be applied to your routing network respectfully.

If values of speed exists in your shapefile we will implement these values into a new field, “traveltime“, that will show rate of travel for every road segment in our network based off their geometry. Firstly, we will need to create a column to store individual traveling speeds. The name of our column will be “traveltime” using the format: ​double precision.​ Input this command and execute in the command line tool as seen below.

Next, we will populate the new column “traveltime” by calculating traveling speeds using an equation. This equation will take each road segments geometry(shape_leng) and divide by the rate of travel(either mph or kph). The sample command I’m using below utilizes mph as the rate while our geometry(shape_leng) units for my roads_table is in feet​. If you are using either mph or kph, input this command and execute in SQL pgAdmin tool. Below further details explain the variable “X”.

How to find X​, ​here is an example​: Using example 30 mph as rate. To find X, we convert 30 miles to feet, we know 5280 ft = 1 mile, so we multiply 30 by 5280 and this gives us 158400 ft. Our rate has been converted from 30 miles per hour to 158400 feet per hour. For a rate of 30 mph, our equation for the field “traveltime” equates to “shape_leng / 158400*60″. To discriminate this calculations output, we will insert additional details such as “where speed = 30”. What this additional detail does is apply our calculated output to features with a “30” value in our “la vitesse” field. Note: your “la vitesse” field may be named differently.

Repeat this step for each speed value in your shapefile examples:

The back end is done. Great Job!

Our next step will be visualizing our data in QGIS. Open and connect QGIS to your routing database by right-clicking “PostSIG” in the Browser Panel within QGIS main window. Confirm the checkbox “Also list tables with no geometry” is checked to allow you to see the interior of your database more clearly. Fill out the name or your routing database and click “d'accord”.

If done correctly, from QGIS you will have access to tables and views created in your routing database. Feel free to visualize your network by drag-and-drop the network table into your QGIS Layers Panel. From here you can use the identify tool to select each road segment, and see the source and target nodes contained within that road segment. The node you choose will be used in the next step to create the views of drive-time.

12.Create views​: In this step, we create views from a function designed to determine the travel time cost. Transforming these views with tools will visualize the travel time costs as isochrones.

The command below will be how you start querying your database to create drive-time isochrones. Begin in QGIS by draging your network table into the contents. The visual will show your network as vector(lines). Simply select the road segment closest to your point of interest you would like to build your isochrone around. Then identify the road segment using the identify tool and locate the source and target fields.​

Place the source or target field value in the below command where you see ​VALUE​, in all caps​.

This will serve you now as an isochrone catchment function for this workflow. Please feel free to use this command repeatedly for creating new isochrones by substituting the source value. Please input this command and execute in SQL pgAdmin tool.

*AT THE BOTTOM OF THIS WORKFLOW I PROVIDED AN EXAMPLE USING SOURCE VALUE “2022”

13.Visualize Isochrone: Applying tools to the view will allow us to adjust the visual aspect to a more suitable isochrone overlay.

​After creating your view, a new item in your routing database is created, using the “view_name” you chose. Drag-and-drop this item into your QGIS LayersPanel. You will see lots of small dots which represent the nodes.

In the figure below, I named my view “take1“.

Each node you see contains a drive-time value, “cost”, which represents the time used to travel from the node you input in step 12’s function.

Start by installing the QGIS plug-in “ Interpolation” by opening the Plugin Manager in QGIS interface.

Next, at the top of QGIS window select “Raster” and a drop-down will appear, select “Interpolation”.

A new window pops up and asks you for input.

Select your “​view”​ as the​ vector layer​, select ​”cost​” as your ​interpolation attribute​, and then click “Add”.

A new vector layer will show up in the bottom of the window, take care the type is Points “. For output, on the other half of the window, keep the interpolation method as “TIN”, edit the ​output file​ location and name. Check the box “​Add result to project​”.

Note: decreasing the cellsize of X and Y will increase the resolution but at the cost of performance.

Cliquez sur “OK” on the bottom right of the window.

A black and white raster will appear in QGIS, also in the Layers Panel a new item was created.

Take some time to visualize the raster by coloring and adjusting values in symbology until you are comfortable with the look.

14. ​Create contours of our isochrone:​ Contours can be calculated from the isochrone as well.

Find near the top of QGIS window, open the “Raster” menu drop-down and select Extraction → Contour.

Fill out the appropriate interval between contour lines but leave the check box “Attribute name” unchecked. Cliquez sur “OK”.

15.​ Zip and Share:​ Find where you saved your TIN and contours, compress them in a zip folder by highlighting them both and right-click to select “compress”. Email the compressed folder to yourself to export out of your virtual machine.


Voir la vidéo: composeur dimpression 2 (Octobre 2021).