Suite

Empêche arcpy.Append de planter si les données sont trop longues pour le champ

Empêche arcpy.Append de planter si les données sont trop longues pour le champ


Nous ajoutons un tas d'informations de la base de données de quelqu'un d'autre dans la nôtre. Il s'agit en grande partie d'informations textuelles, et la base de données d'origine ne semble pas avoir beaucoup de limite sur la longueur de ces chaînes. Le nôtre a été configuré en grande partie avec des limites par défaut de 50 sur les champs de texte.

Donc, naturellement, il échouera parfois à importer, en lançant une erreur comme :

ExecuteError : ERREUR 001156 : Échec de l'OID d'entrée 69838, impossible d'écrire la valeur « James Island - Subdivision non indiquée, pas de marqueur » dans le champ de sortie SUBDIVISION
Échec de l'exécution (Ajouter).

SUBDIVISIONpeut prendre 50 caractères, et ArcPy a juste essayé de pousser 51 caractères, et donc il a échoué et s'est écrasé.

À moins d'augmenter la longueur de tous les champs de texte de notre base de données (ce qui semble fonctionner très bien jusqu'à ce que je rencontre la prochaine chaîne super longue qui dépasse la limite nouvellement étendue), existe-t-il un moyen élégant de gérer de tels cas tout en obtenant le données à ajouter ? En d'autres termes, existe-t-il un moyen de dire à la fonction Append que j'aimerais qu'elle tronque simplement les chaînes qui ne correspondent pas (idéalement en lançant un message m'informant de ce qui s'est passé) ?


je ne connais pas trop arcpy.append mais je suppose que vous pourriez parcourir votre ensemble de données avant en utilisant ajouter et tronquer simplement toute entrée trop longue.

Vous devrez utiliser un UpdateCursor pour parcourir votre ensemble de données, puis vérifier la longueur de chaque entrée en utilisant len(). Si la longueur dépasse 50 caractères, vous la couperez.

Le code ressemblerait à ceci :

yourFC = "pathToYourFeatureClass" fields = ('toBeChecked') avec arcpy.da.UpdateCursor(yourFC, fields) comme curseur : pour la ligne dans le curseur : si len(row[0]) > 50 : longEntry = row[0] row[ 0] = longEntry[:50] cursor.updateRow(row)

(Je ne peux pas tester cela pour le moment et écrire de mémoire ; vous devrez peut-être faire de petits ajustements ; je peux le tester demain)

Cela ne change rien directement dans votre ajouter code, mais cela l'empêcherait sûrement d'échouer. Oui, cela peut prendre un peu de temps à s'exécuter en fonction de la taille de votre ensemble de données, mais au final, cela prendra moins de temps que de s'ennuyer avec un outil en panne :-)

Si vous optez pour cela, n'oubliez pas que vous devez appeler votre curseur à partir du module d'accès aux données, tel que arcpy.da.SearchCursor, car il est beaucoup plus rapide que le curseur d'origine !

ÉDITER:
Je viens d'avoir la chance de tester l'extrait de code que j'ai posté hier soir et cela fonctionne très bien.

Pour l'illustrer, un tableau comme celui-ci :

Deviendrait ceci :


Lorsque vous utilisez l'outil d'ajout via l'interface graphique, si vous utilisez l'option "NO_TEST" pour le type de schéma, vous pouvez utiliser le contrôle de mappage de champ. Développez l'arborescence de la carte des champs pour le champ de texte avec lequel vous rencontrez des problèmes et vous verrez un nœud pour chaque jeu de données d'entrée. Si vous faites un clic droit sur chaque nœud et cliquez sur format, vous obtiendrez des options pour spécifier la position de début et de fin de ce que vous allez lire dans ce champ de saisie. Si votre ensemble de données cible n'accepte que 50 caractères, définissez la position de fin sur 50 caractères et tout devrait bien se passer.

Vous utilisez cependant arcpy. Vous pouvez lancer l'ajout dans un modèle et exporter le modèle vers un script python, mais l'argument de mappage de champ se terminera par une longue chaîne. Si votre flux de travail est statique, vous pouvez modifier manuellement la chaîne, et cela devrait fonctionner. Si les données que vous ajoutez sont un peu plus dynamiques, vous devrez peut-être créer par programme votre mappage de champ. Consultez les rubriques d'aide d'arcgis pour FieldMapping et FieldMap. FieldMap a un appel de méthode setEndTextPosition qui serait l'équivalent de ce que j'ai décrit dans l'interface graphique.

Je ne sais pas quelle version d'arcgis vous utilisez, mais ma copie d'arcgis est un peu ancienne à 10.0 grâce à l'informatique de mon entreprise, donc les rubriques d'aide que j'ai liées sont pour 10.0. Assurez-vous d'utiliser la rubrique d'aide pour votre version.


Cela concerne la réponse de @BritishSteel et leur code.

L'utilisation d'un curseur et de ce code verbeux semble un peu exagéré pour cela.

Si vous souhaitez simplement tronquer un champ à 50 caractères pour tous les enregistrements/entités, utilisez simplement l'outil CalculateField (ou arcpy.CalculateField_Management dans un script).

Cela finit par être un script à une ligne! Quelque chose comme…

arcpy.CalculateField_management(featureClass, "FIELD_NAME", "'!FIELD_NAME![:50]'", "PYTHON_9.3")

Mais la réponse de @MWrenn sur l'utilisation de l'option de format intégrée de l'outil Ajouter pour lire uniquement les premiers caractères du champ est encore meilleure. Vous n'avez pas à modifier toutes vos données sources de cette façon.


J'abandonnerais la fonction "each" au profit d'une boucle for car elle est plus rapide. J'ajouterais également quelques attentes en utilisant le "setTimeout" mais seulement de temps en temps et seulement si nécessaire. Vous ne voulez pas attendre 5 ms à chaque fois, car le traitement de 3 500 enregistrements prendrait environ 17,5 secondes.

Vous trouverez ci-dessous un exemple utilisant une boucle for qui traite 100 enregistrements (vous pouvez modifier cela) à des intervalles de 5 ms, ce qui donne une surcharge de 175 ms.

Je comparerais également les différentes parties du traitement XML pour voir s'il existe un goulot d'étranglement quelque part qui peut être corrigé. Vous pouvez comparer dans firefox en utilisant le profileur de firebug et en écrivant sur la console comme ceci :

Définissez un délai d'attente entre les traitements pour éviter que le cycle de boucle ne consomme toutes les ressources du navigateur. Au total, cela ne prendrait que quelques secondes pour tout traiter et tout parcourir, ce qui n'est pas déraisonnable pour 3 500 éléments.

J'envisagerais de convertir les 3500 éléments de XML en JSON côté serveur ou encore mieux de les télécharger sur le serveur converti, afin qu'il soit natif de JS à partir du getgo.

Cela minimiserait votre charge et réduirait également la taille du fichier.

vous pouvez définirTimeout () avec une durée de ZÉRO et cela produira comme vous le souhaitez

De longues boucles sans geler le navigateur sont possibles avec le framework Turboid. Avec lui, vous pouvez écrire du code comme :

Plus de détails dans cet article turboid.net : De vraies boucles en Javascript

Javascript est monothread, donc à part setTimeout , vous ne pouvez pas faire grand-chose. Si l'utilisation de Google Gears est une option pour votre site, ils offrent la possibilité d'exécuter du javascript dans un véritable fil d'arrière-plan.

Vous pouvez utiliser l'API des travailleurs HTML5, mais cela ne fonctionnera que sur Firefox 3.1 et Safari 4 betas atm.

J'ai eu le même problème qui se produisait lorsque l'utilisateur actualisait la page successivement. La raison en était deux boucles for imbriquées qui se sont produites plus de 52 000 fois. Ce problème était plus sévère dans Firefox 24 que dans Chrome 29 car Firefox plantait plus tôt (environ 2000 ms plus tôt que Chrome). Ce que j'ai simplement fait et cela a fonctionné, c'est que j'ai utilisé des boucles "for" au lieu de chacune, puis j'ai remanié le code afin de diviser l'ensemble du tableau de boucles en 4 appels séparés, puis de fusionner le résultat en un seul. Cette solution a prouvé qu'elle fonctionnait.

L'autre solution qui a également fonctionné pour moi était la même solution implémentée avec les API Worker de HTML5. Utilisez le même concept dans les workers car ils évitent que votre navigateur ne soit gelé car ils s'exécutent en arrière-plan de votre thread principal. Si cela ne fonctionnait pas simplement avec l'API Workers, placez chacune des instances de loopForSubset dans différents travailleurs et fusionnez le résultat dans l'appelant principal de Worker.

Je veux dire que ce n'est peut-être pas parfait, mais cela a fonctionné. Je peux aider avec des morceaux de code plus réels, si quelqu'un pense toujours que cela pourrait leur convenir.


12 réponses 12

mon bogue corrigé en supprimant le dossier de construction (à l'intérieur d'android / app) et en l'exécutant

Vous pouvez trouver le nom de votre application dans votre package.json, sous le champ de nom.

De plus, lorsque vous recherchez des erreurs traitant spécifiquement de la réaction native, essayez d'exécuter

De cette façon, vous n'avez pas à analyser l'intégralité du fichier journal.

J'exécutais un projet Android sur mon PC Linux, puis j'y ai apporté quelques modifications sur un PC MacOS, et quand j'ai ramené le projet sur Linux, j'ai fait face à ce plantage

dans le dossier Android, exécutez simplement :

puis essayez de l'exécuter à nouveau.

Mon application RN fonctionnait correctement avant, tout à coup, un jour, cela ne fonctionne pas, continue de planter sans journal d'erreurs. Tout ce que j'ai à faire est de: supprimer le dossier build et .gradle sous le dossier Android, puis réexécuter, cela fonctionne. J'espère que ça pourra aider quelqu'un.

Cela peut être dû au fait que SOLoader est absent.

est ajouté sous les dépendances dans android/app/build.gradlle

nettoyez votre build cd android ./gradlew clean

Essayez de regrouper ./gradlew bundleRelease

Essayez d'exécuter npx react-native run-android --variant=release

deux étapes faciles ont résolu mon problème.

ouvrez Android Studio et supprimez le bundle hors ligne de src/main/asset.. (** le cas échéant) ouvrez MainApplication.java et supprimez l'importation suivante.. importez com.facebook.react.BuildConfig

J'ai eu le même problème, peut-être avez-vous fait les mêmes erreurs que moi.

Assurez-vous que vous n'avez pas modifié le nom du package de l'application (ex : com.myapp.app).

J'ai perdu beaucoup de temps là-dessus. On dirait que quelqu'un d'autre a publié une application du même nom sur Google Play, et je ne l'ai pas modifiée correctement à chaque endroit où je devrais sur la mienne.


Dans MySQL Workbench, l'utilisation de &ldquoTable Data Import Wizard&rdquo pour importer CSV crée une table vide

J'essaie d'importer un fichier csv dans une table MySQL à l'aide de l'assistant d'importation de données de table. La section exemple en bas de l'écran Configurer les paramètres d'importation semble correcte et lorsque j'exécute l'importation, elle indique que toutes mes entrées ont été chargées avec succès. Cependant, lorsque je vais voir le contenu de la table, seules les colonnes sont là et aucune de mes données réelles n'est chargée. Est-ce que quelqu'un sait pourquoi cela peut se produire et comment le corriger?

Voici quelques lignes de mon fichier CSV :

STATION,STATION_NAME,ÉLÉVATION,LATITUDE,LONGITUDE,DATE,MLY-TAVG-NORMAL,MLY-TMAX-NORMAL,MLY-TMIN-NORMAL,Température moyenne,Température max.,Température min GHCND:USW00094085,PIERRE 24 S SD US,647.4, 44.0194,-100,353,201001,218,322,113,21,8,32,2,11.3 GHCND:USW00094085,PIERRE 24 S SD US,647.4,44.0194,-100.353,201002,246,354.137,24.6,35,4,13.7 GHCND:USW00094085,PIERRE 24 S SD US, 647,44,0194,-100,353,201003,339,451,226,33,9,45,1,22,6 GHCND:USW00094085,PIERRE 24 S SD US,647.4,44.0194,-100.353,201004,463,588,337,46,3,58.8,33.7 GHCND:USW00094085,PIERRE 24 S SD US 647,4 44,0194, 100,353,201005,573,696,450,57,3,69.6,45

Voici quelques images du processus d'importation :

Et voici ce que je vois lorsque j'essaie d'afficher la table nouvellement créée :


9 réponses 9

Vous devriez pouvoir exécuter la fonction compacte à partir de votre code VBA.

J'avais l'extrait ci-dessous mis en signet il y a longtemps lorsque je travaillais sur l'accès.

Vous pouvez le mettre dans votre code pour le contourner.

REMARQUE : vous pouvez également envisager de passer à un système de base de données plus important si vous rencontrez ces types de problèmes de mise à l'échelle.

A quelles tailles avez-vous affaire ? Quel est le code d'erreur en cas de plantage ? Je serais surpris si c'est simplement parce que le fichier devient "trop ​​gros", mais j'imagine qu'il y a une limite. Il semble, d'après votre description de tous les éléments temporaires, qu'il pourrait y avoir des améliorations de conception qui pourraient aider.

EDIT: Je m'attends à ce que vous réalisiez qu'il n'est pas trivial de remplacer la base de données par autre chose - même si vous essayez de conserver tout ce qui se trouve dans le mdb en plus des tables. Les requêtes d'accès sont uniques, Access SQL n'est pas standard et vous recommenceriez.

La plupart des applications Access que j'ai vues offrent de nombreuses possibilités de refactorisation et ce n'est généralement pas si difficile si a) vous comprenez la logique et les règles métier, et b) vous avez une solide compréhension de la programmation Access. Mais ce serait plus ou moins vrai pour toutes les alternatives. Si j'étais vous et que vous êtes un peu court dans l'un ou l'autre domaine, vous pourriez peut-être obtenir de l'aide. Mais j'essaierais d'abord de sauver l'application Access.

Il y a aussi une suggestion d'une autre affiche sur le déplacement des tables dans une ou plusieurs MDB attachées. C'est une technique solide et éprouvée en général. Mais d'abord, j'aimerais comprendre quelle est la véritable cause du problème.

Je pousserais les données vers MS SQL (les données permanentes et les tables intermédiaires) et vous pouvez laisser la partie code dans MS Access pour le moment.

Cela résout deux gros problèmes :

  1. Les données seront intrinsèquement plus stables/fiables (je ne peux pas vous dire combien de fois j'ai eu une base de données MS Access corrompue).
  2. Votre base de données Access ne grandira/changera pas beaucoup (elle devrait atteindre un équilibre une fois que tout le code a été exécuté et compilé).

Ces deux solutions signifient que vous n'avez plus à compresser/réparer la base de données, vous pouvez obtenir une version gratuite (l'édition Express) de MS SQL et ce n'est pas si difficile à faire.

Si vous ne souhaitez pas passer à SQL Express ou similaire, vous pouvez creuser les idées suivantes :

  • Ouvrez une autre base de données d'accès « externe » (fichier mdb) pour toutes les tables temporaires, afin que vous puissiez mettre toutes les données temporaires dans le fichier externe, en jetant le fichier mdb lorsque vous fermez votre application. Vous manipulerez ensuite dans votre code l'objet 'currentDb' et une autre base de données que vous construisez au démarrage et à laquelle vous vous connectez via une connexion jet, OLEDB ou ODBC
  • Séparez vos tables permanentes de votre code et, si nécessaire, importez les données dans votre interface client locale pour créer vos tables temporaires. Cela peut être fait par exemple en liant la base de données externe au fichier local/client à l'aide de "DoCmd.transferDatabase acLink". Cela peut également être fait en se connectant aux données permanentes via une connexion OLEDB, en ouvrant le ou les jeux d'enregistrements nécessaires et en les enregistrant localement sous forme de fichiers XML. Il existe de nombreuses autres solutions qui peuvent être mises en œuvre ici.

L'état des choses en ce qui concerne la taille des fichiers Jet est interminablement problématique pour moi.

Je regarde actuellement un morceau de mon propre code VBA à partir de la base de données Access A, car il s'agit d'une série de champs à enregistrement unique mises à jour en utilisant ADO à une table sur la base de données Access B (via une référence de requête pouvant être mise à jour dans la base de données A). Le seul champ est un CHAR(8). Avec toutes les 4 mises à jour qui passent, la base de données B augmente d'environ 8 Ko. Aucune bonne excuse pour cela. L'ajout à la taille du fichier ralentit considérablement les performances à chaque croissance de fichier, les mises à jour ralentissent d'environ une par seconde (dans une table d'environ 30 à 40 000 enregistrements utilisant des recherches SQL à enregistrement unique et aucun index nulle part) à une par 5-10 secondes. Maintenant, j'admets, j'ai compacté/réparé la base de données B avant d'exécuter ce code de mise à jour, peut-être que si je ne l'avais pas fait, les performances n'auraient pas été aussi mauvaises. Si le champ cible pour la mise à jour avait été, disons, de type Mémo, je me serais attendu à cela. Mais effectuer une mise à jour sur un champ CHAR() et obtenir ce résultat n'est tout simplement pas raisonnable.

La plupart des solutions ci-dessus (aucune critique particulière pour une solution envisagée) semblent être des solutions valables pour les applications qui utilisent un arrangement d'applications métier relativement permanent (parler aux mêmes bases de données cibles tout le temps). Le mien ne l'est pas. . . Je ne peux pas modifier la base de données cible (base de données B), car elle est générée et consommée par l'outil d'un fournisseur que nous utilisons pour exporter et importer des données depuis leur application.

Je comprends et félicite les auteurs ci-dessus pour avoir trouvé des solutions aux problèmes des utilisateurs. Cependant, je ne peux pas le laisser reposer quand pauvre la conception/la mise en œuvre du logiciel empêche les utilisateurs d'utiliser un produit tel qu'ils s'attendent à ce qu'il fonctionne.


Trouver le centre de gravité entre deux points

Salut, j'ai un très grand ensemble de données qui contient deux ensembles de Lat/long. Un ensemble de lat/long est pour le point de départ et l'autre pour le point de fin d'un événement particulier. Ce que je dois faire, c'est trouver le centroïde de chaque point de départ et de fin pour chaque ligne (événement) trouvée dans l'ensemble de données, il y a plus de 26 000 lignes trouvées dans chacune des 6 feuilles pour ce projet particulier.

On dirait que vous pouvez le faire sans python. Vous pouvez créer deux nouveaux champs dans votre table pour le centre Lat et Long et utiliser le calculateur de champ pour calculer les valeurs.

Si vous préférez utiliser python, vous pouvez faire quelque chose comme ça.


Ceux-ci pourraient être utiles si vous choisissez la route python.

par DanPatterson_Re fatigué

Bonjour Jane, je poste un extrait Python. des trucs très basiques, pas d'interception d'erreurs, mais c'est si facile à modifier pour en faire un outil de script, comme bon vous semble. Je pense que c'est juste bon au début de poster un "exemple de code" au moins pour montrer l'idée ou la technique, puis de l'améliorer si nécessaire.

Je ne suis pas sûr des paramètres de projection -- sujet très intéressant cependant, et très important pour bien faire les choses, veuillez modifier ces paramètres si nécessaire pour améliorer vos résultats.

Cela lit simplement Excel pour les données définies (plages nommées uniquement), crée un événement multipoint xy à l'aide d'un tableau et d'une classe multipoint. Le "truc" qui peut ne pas être immédiatement apparent est l'endroit où 5 lignes doivent être commentées si vous ne voulez pas "voir" les centroïdes tels qu'ils ont été calculés avant la projection. il était facile de laisser cela en rapport avec le commentaire de Dan Patterson sur l'erreur associée à la recherche du centre réel. C'est beaucoup plus complexe en termes de systèmes de coordonnées et de méthodes de transformation qu'il n'y paraît au premier abord. . pourquoi la comparaison était justifiée. Vous ne pouvez probablement rien déterminer de concluant avec ces données, mais il existe des différences dans les 2 ensembles de données (regardez le zip ci-joint, le gdb contenu - le script est également répertorié ci-dessous à des fins de visualisation):

multipointPCS_1 (le résultat GCS projeté, centroïde calculé avant la projection)
multipointPCS_2 (le résultat PCS, centroïde calculé après la projection de la couche d'événements)

Bonjour Jane, je poste un extrait Python. des trucs très basiques, pas d'interception d'erreurs, mais c'est si facile à modifier pour en faire un outil de script, comme bon vous semble. Je pense que c'est juste bon au début de poster un "exemple de code" au moins pour montrer l'idée ou la technique, puis de l'améliorer si nécessaire.

Je ne suis pas sûr des paramètres de projection -- sujet très intéressant cependant, et très important pour bien faire les choses, veuillez modifier ces paramètres si nécessaire pour améliorer vos résultats.

Cela lit simplement Excel pour les données définies (plages nommées uniquement), crée un événement multipoint xy à l'aide d'un tableau et d'une classe multipoint. Le "truc" qui peut ne pas être immédiatement apparent est l'endroit où 5 lignes doivent être commentées si vous ne voulez pas "voir" les centroïdes tels qu'ils ont été calculés avant la projection. il était facile de laisser cela en rapport avec le commentaire de Dan Patterson sur l'erreur associée à la recherche du centre réel. C'est beaucoup plus complexe en termes de systèmes de coordonnées et de méthodes de transformation qu'il n'y paraît au départ. . pourquoi la comparaison était justifiée. Vous ne pouvez probablement rien déterminer de concluant avec ces données, mais il existe des différences dans les 2 ensembles de données (regardez le zip ci-joint, le gdb contenu - le script est également répertorié ci-dessous à des fins de visualisation):

multipointPCS_1 (le résultat GCS projeté, centroïde calculé avant la projection)
multipointPCS_2 (le résultat PCS, centroïde calculé après la projection de la couche d'événements)

Merci Wayne, j'apprécie vraiment votre aide. J'ai fait une feuille en ajoutant deux colonnes puis en utilisant le champ cal St_lat +End_lat/2 pour trouver les centroïdes, mais cela prend du temps.. alors merci pour le script, j'ai hâte de l'essayer.

Sûr. je pense juste, mais si j'ai le temps, je peux peut-être vous montrer comment l'implémenter correctement en tant qu'outil de script, avec quelques petites modifications bien sûr.
Si vous le souhaitez, envoyez une copie xlsx contenant quelques feuilles de travail abrégées que vous n'avez pas encore faites - zip et attachez ici si elles ne sont pas trop grandes.
Je dis "abrégé" en raison de la limite de taille que vous pouvez attacher avec succès. il est rapide et facile de joindre environ 1000 enregistrements chacun sur 2 feuilles. (2 feuilles valent mieux que 1 car vous verrez alors le résultat du bouclage sur les feuilles - je pourrais le partitionner moi-même, mais préféreriez que vous le fassiez pour que ce soit le plus "original" possible. Je noterai tout ce que je pourrai) devez « réparer » pour que la course soit réussie.)

Vous avez également 10.0, donc tout ce que je compresse et attache, vous devriez pouvoir le décompresser et l'exécuter, aussi simple que cela. Je vais faire en sorte que la boîte à outils soit "à chemin relatif" pour pouvoir trouver à la fois le script py et le plus grand ensemble d'exemples de données que vous envoyez, quel que soit l'endroit où vous le placez. Vous verrez comment il fonctionne et l'appliquerez au reste de vos données xlsx.

Comment ça sonne? Je suis juste curieux à ce sujet car cela pourrait être extrêmement utile à des fins de formation - les nouveaux utilisateurs sont beaucoup plus à l'aise (et parfois moins méfiants vis-à-vis d'ArcGIS) lorsqu'ils peuvent utiliser leurs données de cette manière plus immédiate, les données sur lesquelles ils ont travaillé dans Excel. c'est donc presque comme si ArcGIS se « conformait » pour utiliser les données dans un autre environnement de manière interopérable plutôt que d'exiger la conversion complète en amont. Encore techniquement une conversion pour que le traitement soit terminé, mais je pense que cela semble au moins moins intrusif pour l'utilisateur.

Sûr. je pense juste, mais si j'ai le temps, je peux peut-être vous montrer comment l'implémenter correctement en tant qu'outil de script, avec quelques petites modifications bien sûr.
Si vous le souhaitez, envoyez une copie xlsx contenant quelques feuilles de travail abrégées que vous n'avez pas encore faites - zip et attachez ici si elles ne sont pas trop grandes.
Je dis "abrégé" en raison de la limite de taille que vous pouvez attacher avec succès. il est rapide et facile de joindre environ 1000 enregistrements chacun sur 2 feuilles. (2 feuilles valent mieux que 1 car vous verrez alors le résultat du bouclage sur les feuilles - je pourrais le partitionner moi-même, mais préféreriez que vous le fassiez pour que ce soit le plus "original" possible. Je noterai tout ce que je pourrai) doivent « réparer » pour que la course soit réussie.)

Vous avez également 10.0, donc tout ce que je compresse et attache, vous devriez pouvoir le décompresser et l'exécuter, aussi simple que cela. Je vais faire en sorte que la boîte à outils soit "à chemin relatif" pour pouvoir trouver à la fois le script py et le plus grand ensemble d'exemples de données que vous envoyez, peu importe où vous le placez. Vous verrez comment il fonctionne et l'appliquerez au reste de vos données xlsx.

Comment ça sonne? Je suis juste curieux à ce sujet car cela pourrait être extrêmement utile à des fins de formation - les nouveaux utilisateurs sont beaucoup plus à l'aise (et parfois moins méfiants vis-à-vis d'ArcGIS) lorsqu'ils peuvent utiliser leurs données de manière plus immédiate, les données sur lesquelles ils ont travaillé dans Excel. c'est donc presque comme si ArcGIS se « conformait » pour utiliser les données dans un autre environnement de manière interopérable plutôt que d'exiger la conversion complète en amont. Encore techniquement une conversion pour que le traitement soit terminé, mais je pense que cela semble au moins moins intrusif pour l'utilisateur.

Salut Wayne, merci pour votre intérêt continu. Voici un excel avec les feuilles contenant quelques exemples de données. J'ai hâte d'avoir de vos nouvelles à ce sujet.

Jane, la pièce jointe pointCentroidTest.zip (message n° 5 ci-dessus) contient les éléments suivants :

- le script, pointCentroidTest.py.
- la géodatabase fichier, stage.gdb.
- la feuille de calcul Excel de test, avePairCoords.xlsx.

Lorsque vous téléchargez et décompressez le contenu, le script est conçu pour accéder au xlsx en entrée et au gdb en sortie, mais ils doivent rester « côte à côte » ou dans le même dossier racine. Cela peut très bien être transformé en un outil de script, mais je ne me suis pas embêté - la tâche la plus importante à accomplir est de savoir si cela peut gérer votre entrée et créer des centroïdes dans votre projection NAD 1983 BC Environment Albers.

Pour 'adapter' cela à l'exemple que vous avez fourni, j'ai téléchargé et copié Wayne_exel.xls dans le même dossier que le script et gdb (et, bien sûr, le test xlsx d'origine). Ensuite, j'ai dû changer le fichier d'entrée auquel le script accède. La seule ligne du script qui doit être modifiée pour s'exécuter sur le nouvel exemple doit être celle où l'espace de travail est défini :

arcpy.env.workspace = os.path.join(rootpath, 'Wayne_exel.xls')

Cependant cela ne fonctionnera pas - Pourquoi ? Étant donné que l'échantillon que vous avez fourni n'est pas dans le format anticipé que nous avons déjà établi -- ce script s'exécutera sur les enregistrements du formatage de champ explicite suivant, où « n » représente le nième ensemble de coordonnées lat/lon de la même « station » collectées sur une date n correspondante :

ID, DATE1, LAT1, LON1, DATE2, LAT2, LON2, . , DATEn, LATn, LONn

Il vous manquait les informations d'en-tête et les 2 premiers champs - et Sheet1 n'avait aucun sens pour moi. Donc, ce que j'ai fait, c'est d'entrer un en-tête "factice" et de m'assurer que les champs nécessaires existaient pour les feuilles 2 et 3 (et supprimé la feuille 1). J'ai également défini des noms pour les plages sur chaque feuille de calcul et enregistré dans un nouveau fichier, Wayne_exel.xlsx à utiliser dans le script. Il s'est déroulé sans erreur - je joins un petit PDF décrivant la procédure.

Je joins également un script révisé pour "copier" les centroïdes uniquement dans un nouveau fc (en utilisant le même gdb qu'avant). . pense que je vais également essayer de joindre votre feuille de calcul révisée, que j'ai enregistrée au format xlsx. la ligne de commande dans le script reflète l'entrée révisée :

arcpy.env.workspace = os.path.join(rootpath, 'Wayne_exel.xlsx')

Pour l'utiliser, copiez le xlsx et le script fournis au même emplacement racine que la pièce jointe précédente a été décompressée - celle contenant gdb sera requise. Plus d'informations fournies dans le PDF ci-joint.


Conclusion

Le succès des interventions en matière de contrôle routier doit être associé au contexte des pays, étant donné qu'il existe des différences dans l'efficacité des systèmes administratifs et juridiques au sein des pays du continent africain. Le niveau de ressources des populations est également crucial dans l'utilisation des amendes. L'impact serait négligeable, voire aggraverait les conditions de vie, s'il s'appliquait aux populations les plus défavorisées. Enfin, l'éducation à la sécurité routière ainsi que la sensibilisation à la protection routière semblent être les interventions les plus adaptées aux pays africains même si une stratégie de changement des comportements doit être adoptée, adaptée à chaque contexte socio-économique et culturel national. L'analyse globale de cette étude de cadrage révèle qu'il y a un manque d'interventions dans le domaine de la sécurité routière sur le continent, alors même que la Décennie mondiale de la sécurité routière et de nombreuses activités de sensibilisation des communautés scientifiques avaient souligné l'urgence de la situation. Les financements disponibles dédiés spécifiquement au sujet sont certainement insuffisants pour produire de nouvelles connaissances issues de la recherche. Un dernier point à prendre en compte est que les quelques interventions menées pourraient être mieux évaluées afin d'obtenir des éléments de réplication afin d'orienter les expérimentations vers d'autres lieux et à d'autres échelles.


5 RÉSUMÉ ET CONCLUSIONS

Notre recherche a développé une nouvelle méthodologie pour évaluer l'impact de la conception des intersections sur la sécurité routière, basée sur la vision par ordinateur et l'apprentissage en profondeur. Tout d'abord, tous les emplacements d'intersection en Australie ont été identifiés et les images satellite correspondantes ont été collectées. Une série d'étapes de prétraitement personnalisées a été développée pour mettre l'accent sur les caractéristiques des images satellite brutes liées à la sécurité routière. Les caractéristiques de haut niveau ont ensuite été extraites de la représentation condensée dans un AE profond. Une fonction de perte a été formulée pour renforcer la rareté de la couche de goulot d'étranglement de l'AE, en privilégiant la qualité des caractéristiques à la reconstruction parfaite de l'image. Les images ont été regroupées à l'aide de t-SNE sur la base des caractéristiques extraites. Enfin, le comportement de conduite a été exploré à l'aide de données télématiques enregistrées. Il a été constaté que les événements HA (par véhicule) étaient plus fréquents aux intersections à quatre voies simples qu'aux intersections à trois voies. Les intersections en T ont enregistré l'une des fréquences HD les plus basses (un proxy pour les accidents et les quasi-accidents). De plus, des vitesses moyennes constamment faibles ont été enregistrées sur les ronds-points, ce qui a contribué à la moindre gravité des accidents observée dans les études précédentes. De plus, plusieurs caractéristiques de conception particulièrement dangereuses ont été identifiées dans des groupes d'intersections similaires.


2 réponses 2

Les questions succinctes sont encouragées sur Stack Exchange. J'apprécie la façon dont vous faites remarquer que Stack Exchange peut être considéré comme un référentiel de questions au profit des futurs utilisateurs. Cela dit, toutes les questions doivent suivre les directives du site. Notre centre d'aide a une page sur ce sujet :

Comment poser une bonne question ?

Nous serions ravis de vous aider. Pour augmenter vos chances d'obtenir une réponse, voici quelques conseils :

Chercher et rechercher

Avez-vous bien cherché une réponse avant de poser votre question ? Partager vos recherches aide tout le monde. Dites-nous ce que vous avez trouvé et pourquoi il n'a pas répondu à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de réitérer des réponses évidentes, et surtout, cela vous aide à obtenir une réponse plus précise et pertinente !

Soyez sur le sujet

Notre communauté est définie par un ensemble spécifique de sujets que vous pouvez consulter dans le centre d'aide. Veuillez vous en tenir à ces sujets et éviter de demander des opinions ou des discussions ouvertes. Si votre question porte sur le site lui-même, posez-la sur notre site de méta-discussion. Si vous recherchez un sujet différent, il peut être traité sur un autre site Stack Exchange.

Être spécifique

Si vous posez une question vague, vous obtiendrez une réponse vague. Mais si vous nous donnez des détails et un contexte, nous pouvons fournir une réponse utile.

Rendez-le pertinent pour les autres

Nous aimons aider autant de personnes que possible à la fois. Expliquez clairement comment votre question est pertinente pour plus de personnes que vous, et plus d'entre nous seront intéressés par votre question et disposés à l'étudier.

Garde l'esprit ouvert

La réponse à votre question n'est peut-être pas toujours celle que vous vouliez, mais cela ne veut pas dire qu'elle est fausse. Une réponse concluante n'est pas toujours possible. En cas de doute, demandez aux gens de citer leurs sources ou d'expliquer comment/où ils ont appris quelque chose. Même si nous ne sommes pas d'accord avec vous, ou si nous ne vous disons pas exactement ce que vous vouliez entendre, rappelez-vous : nous essayons simplement de vous aider.

De manière générale, les questions de codage qui demandent « Voici mon problème, pouvez-vous écrire le code pour moi ? » ou "Je dois effectuer la tâche A, B, C, D, E, F. --voici mon code pour faire A, comment puis-je faire B, C, D, E, F. " ne sont pas bien reçus.

Si vous effectuez une recherche sur le site Google ou GIS SE et que vous ne trouvez pas la réponse, c'est probablement un bon candidat pour notre forum.


Dernier mot

Il est facile de se sentir dépassé à l'idée de devenir l'enseignant de votre enfant. Au lieu de cela, considérez cela comme une opportunité unique et utilisez-la pour créer un lien plus fort avec votre enfant, en créant des souvenirs qu'ils n'oublieront jamais. Nous sommes en territoire inconnu pour tout le monde – aucun de nous n'a connu une pandémie comme celle-ci au cours de notre vie. Vous pouvez donc être très flexible dans la façon dont vous abordez les universitaires de votre enfant.

Au lieu de considérer l'enseignement à domicile comme une liste de contrôle des leçons à couvrir, plongez-vous dans l'apprentissage avec vos enfants. Posez des questions, recherchez des sujets ensemble, collaborez à l'écriture et au dessin d'un roman graphique, essayez des activités pratiques et n'oubliez pas de jouer.

L'école peut ressembler à beaucoup de choses, pas seulement à des feuilles de travail et à des quiz mathématiques, mais aussi à la pâtisserie, à la peinture, aux jeux, à l'exploration dans la cour ou à la construction avec des Legos. Tout compte, alors allez-y et amusez-vous avec.

Vous redoutez l'enseignement à domicile de vos enfants ou vous l'attendez avec impatience ? Si vous êtes un vétéran de l'enseignement à domicile, avez-vous des conseils ?