Suite

ArcObjects .NET - Comment fermer/libérer FeatureClass, Workspace, Factory

ArcObjects .NET - Comment fermer/libérer FeatureClass, Workspace, Factory


J'ai un long processus. Je veux éviter les fuites de ressources ou les connexions de base de données malveillantes.

À intervalles pendant le processus, je veux faire ceci:

  1. obtenir une fabrique d'espaces de travail ArcSDE (Oracle)
  2. ouvrir un espace de travail de l'usine (à quel point j'obtiens une connexion à la base de données ouverte)
  3. obtenir une classe d'entités ou une table existante sur l'espace de travail,
  4. interroger la classe d'entités ou la table, parcourir le curseur faire mon travail
  5. puis relâchez/fermez tout de telle sorte que:

    • La connexion à la base de données et le verrouillage de la table du point de vue d'ArcSDE/Oracle (comme révélé par quelque chose comme "sdemon -o info -I users" ou une requête de la table sde.table_locks) est fermé/libéré.
    • le processus est résilient aux redémarrages d'ArcSDE/Oracle (c'est-à-dire que je ne laisse pas quelque chose en suspens qui ne fonctionnera pas plus tard après le redémarrage nocturne)
    • Toutes les références RCW, COM et la mémoire sont libérées.

Fondamentalement, en raison de la nature longue du processus, Je veux être vraiment sûr de ne pas avoir de fuites de ressources ou de connexions malveillantes, et mon processus peut survivre aux redémarrages d'ArcSDE/Oracle.

J'ai vu des discussions telles que :

Et ce, dont je cite

Chaque fabrique d'espaces de travail gère un pool d'espaces de travail actifs actuellement connectés qui sont référencés par l'application. Lorsque l'une des méthodes Open* répertoriées précédemment est appelée, la fabrique d'espaces de travail vérifie si un espace de travail a déjà été ouvert avec un ensemble de propriétés correspondant. Si tel est le cas, une référence à l'instance existante est renvoyée.

Tout cela me suggère que je devrait release (par exemple, classe ComReleaser ou boucle Marshal.ReleaseComObject() équivalente), probablement dans cet ordre :

  • le curseur
  • classe d'entités/table
  • espace de travail
  • usine d'espace de travail

Ensuite, il y a des discussions comme celle-ci où les gens font tout cela, et peut-être même saupoudrent System.GC.Collect() et leur connexion à la base de données est toujours active.

Oh gourous, quelle est la dernière dope droite à ce sujet ?


Vous avez déjà couvert de nombreux aspects dans votre article. Cependant, pour développer votre question, suivez toujours ce modèle :

if (obj!=null) ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(obj); obj = nul ;

Appelez ensuiteSystem.GC.Collect()pour forcer le ramasse-miettes à supprimer toute référence au SGBD.

L'ordre de publication doit être les curseurs, les entités (IFeature), les classes d'entités, les espaces de travail et autres ArcObjects instanciés.

ArcGIS Desktop et l'application ArcEngine sont STA (application à thread unique). Il n'est ni sûr ni conseillé d'utiliser ArcObjects sur plusieurs threads (Workers) ; On peut utiliser la sérialisation et la désérialisation des objets pour y parvenir. Pour plus de détails, jetez un œil ici.


Récupération de la fabrique de classe COM pour le composant avec CLSID a échoué en raison de l'erreur suivante : 80040154

J'ai développé un service Windows utilisant C#.NET pour générer un rapport PDF. Pour générer un fichier PDF, j'utilise une dll tierce. L'application s'exécute sur ma plate-forme Windows XP. Lorsque j'ai déployé le service dans la version 64 bits de Windows Server 2008, j'ai eu cette erreur :

La récupération de la fabrique de classe COM pour le composant avec CLSID <46521B1F-0A5B-4871-A4C2-FD5C9276F4C6> a échoué en raison de l'erreur suivante : 80040154.

J'ai enregistré la DLL à l'aide de la commande regsvr32. J'ai pu voir ce CLSID dans le registre. Mais le problème persiste.

Quel pourrait être le problème?


ArcObjects .NET - Comment fermer/libérer FeatureClass, Workspace, Factory - Systèmes d'information géographique

ArcObject .Net avec VS 2013

Veuillez prendre ce référentiel comme un mémo pour vous guider à travers la configuration, le débogage et le développement d'AO.

Leçon 1 : Configuration de l'environnement et débogage

OK, commençons notre premier projet AO en VS2013 ! Dans la barre de menus : FICHIER -> Nouveau projet, puis ouvrez l'arborescence dans le volet gauche de la boîte de dialogue d'ouverture, recherchez Visual C# -> ArcGIS -> Compléments pour bureau -> Complément ArcMap.

Dans l'assistant de compléments ArGIS, assurez-vous de cocher l'option "Bouton" sous Types de compléments. Cela créera un modèle de contrôle de bouton pour ArcMap. Vous devriez pouvoir trouver un fichier cs avec le nom "Button1.cs". Veuillez remplacer ce fichier par le sur ici. Avant de créer le contrôle du bouton, ouvrez Soultion Explorer de votre VS 2013, faites un clic droit sur le nom du projet et choisissez les propriétés. Double Check 2 lieux :

  1. Le framework cible dans la section Application doit être ".NET Framework 4"
  2. Dans la section Débogage, assurez-vous que "Démarrer le programme externe" est défini comme votre programme ArcMap

Toujours sous Explorateur de solutions, faites un clic droit sur les références et choisissez "Ajouter des références ArcGIS". Nous avons besoin des deux références suivantes pour construire cette solution. Ils ne sont pas inclus dans ce modèle par défaut :

Vous êtes maintenant prêt à créer la solution ! Avant de faire cela, il y a encore du ménage que nous devons faire sur ArcMap. Accédez à votre dossier d'installation ArcMap, il se trouve généralement à l'emplacement suivant : C:Program Files (x86)ArcGISDesktop10.3in, recherchez un fichier nommé "ArcMap.exe.config". Ouvrez-le avec les privilèges d'administrateur. Il s'agit d'un fichier XML et recherchez la section suivante située en haut du fichier :

Par défaut, ArcMap est configuré pour s'exécuter sur .Net Framework Runtime 2.0, ce qui est en conflit avec le contrôle de bouton que nous allons créer dans VS 2013. Commentez cette ligne et décommentez la ligne ci-dessus pour activer .Net Framework Runtime 4.0 pour ArcMap . OK, maintenant vous devriez pouvoir le construire sans aucun problème. Afin de vous assurer que nous sommes sur la même page pour la section suivante, veuillez vérifier votre fichier "config.esriaddinx". Vous pouvez trouver ce fichier sous Explorateur de solutions. Voici ce que j'ai (j'ai supprimé des sections non liées)

Cela nous donne un bon résumé sur l'outil que nous venons de construire. Son nom est "ArcMapAddin1" et sa cible est contre ArcMap 10.3 exécuté contre .Net Framework Common Lauguage Runtime 4.0. Ce contrôle de bouton a été intitulé "Mon bouton" et classé sous "Contrôles de complément". Gardez-les en tête, vous en aurez besoin plus tard.

Si nous cliquons sur le bouton "Démarrer" avec une flèche verte dans VS2013, vous devriez pouvoir voir qu'ArcMap démarre. VS2013 fera tout le sale boulot pour nous : invoquez ArcMap 10.3 et attachez le débogueur à son processus, chargez tous les symboles nécessaires à partir de divers assemblys pour faciliter le débogage. Nous sommes alors prêts à déboguer !

Vous pouvez mettre un point d'arrêt sur n'importe quelle ligne de source dans Button1.cs, mais rien ne se passe, n'est-ce pas ? C'est parce que ce contrôle est un composant de l'interface utilisateur et nécessite que l'utilisateur clique dessus pour invoquer une action. Alors, où est notre bouton ? Ce n'est pas sur l'interface utilisateur ! Eh bien, c'est vraiment gênant et ESRI peut faire un meilleur travail en ajoutant automatiquement le bouton sur la barre d'outils pendant le débogage.

Quoi qu'il en soit, nous devrons le faire manuellement. Vous devrez aller dans Personnaliser -> Add-In Manager, vous devriez pouvoir voir notre bouton sous "Mes compléments", grâce à ESRI ! Le nom doit correspondre au nom dans config.esriaddinx, le fichier XML auquel je vous demande de prêter attention.

Ensuite, cliquez sur le bouton "Personnaliser. ", dans l'onglet Barres d'outils, vous pouvez créer une nouvelle barre d'outils pour contenir notre travail. J'en ai créé un appelé "Monkeybar", vous pouvez le nommer comme vous le souhaitez, assurez-vous simplement qu'il ne dupliquera pas ceux existants dans ArcMap. Basculez vers l'onglet Commandes, le volet de gauche répertorie toutes les catégories disponibles, vous vous souvenez de ce que je vous ai dit de retenir ? Le nom de la catégorie est « Commandes de complément » ! Si vous cliquez dessus, sur le côté droit, vous devriez pouvoir voir "Mon bouton" comme commande.

Vous pouvez maintenant faire glisser « Mon bouton » sur votre nouvelle barre d'outils ! La prochaine étape consistera à ajouter des couches sur la carte. Le moyen le plus rapide de le faire est d'ajouter un fond de carte qui apportera également le système de coordonnées. J'ai choisi ESRI World Topo. Il a une projection web de type Mercator. Vous pouvez trouver mon fichier mxd ici

Maintenant, si vous cliquez sur le bouton (par défaut, il s'agit d'une icône ronde bleue), vous devriez pouvoir voir quatre points ronds rouges s'afficher aux quatre coins de la carte. Vous devrez peut-être zoomer au maximum pour les voir. Si vous placez un point d'arrêt à la ligne 59 de Button1.cs et cliquez sur notre bouton dans ArcMap, l'exécution sera suspendue et vous pourrez effectuer un débogage étape par étape sur la source Button1.cs dans VS2013.

Vous remarquerez peut-être que la plupart des logiques de Button1.cs sont en dehors de la fonction OnClick. Que se passe-t-il si vous souhaitez déboguer le code, disons, à la ligne 33 ? Eh bien, cette fonction est appelée "le constructeur par défaut de la classe" et n'est invoquée qu'une seule fois lorsque ce bouton est cliqué à chaque première fois. Afin de déboguer les codes, nous devrons terminer la session de débogage en cours en cliquant sur le bouton carré rouge dans VS 2013, puis mettre un nouveau point d'arrêt à la ligne 33 et recommencer.

BTW, quelqu'un peut-il me dire ce que signifie la ligne 36? À quoi sert la section à droite du signe += ? Si vous ne le savez pas, il est temps de passer en revue C# avant de passer aux prochaines leçons.

Leçon 2 : faire le gros du travail en dehors d'ArcMap

Lors de la sortie d'Arcpy, l'une des choses intéressantes est que les SIG sont autorisés à effectuer le travail de traitement des données sans avoir à ouvrir ArcMap. AO vous permet de le faire dès le premier jour, vous avez juste besoin d'un peu plus d'effort de programmation :)

Dans cette session, nous allons développer une application de ligne de commande Windows capable de s'exécuter sans qu'ArcMap soit impliqué (ce n'est pas tout à fait vrai : si vous n'avez pas de licence ArcEngine, vous devez toujours avoir ArcMap installé sur le système pour pour obtenir l'accès à la licence). Quoi qu'il en soit, fermons les yeux et prétendons qu'ArcMap est hors du radar ici.

Afin de présenter un cas amusant, j'ai décidé de jouer avec des données réelles de la base de données sur la restauration des Grands Lacs. Grâce à son interface Map, vous pouvez télécharger tous les projets GLRD au format csv. Nous prendrons ce dump comme données source. Chaque ligne de ce fichier contient un enregistrement de projet avec lat/lon, que nous pouvons convertir en une classe d'entités ponctuelles. Si vous êtes un GISer, vous l'avez probablement fait des centaines de fois, vous pouvez vous demander : quelle est la partie amusante de cela ? D'accord, ajoutons un peu de plaisir : et si je veux seulement extraire le projet pour l'état du Michigan ? Eh bien, si vous avez encore du mal à trouver l'endroit pour télécharger ce fichier csv, veuillez cliquer ici.

Revenons à VS2013. FICHIER -> Projet, dans le volet gauche de la fenêtre Nouveau projet : Installé -> Modèles -> Visual C# -> ArcGIS, si vous cliquez sur "Extender ArcObjects", le volet central affichera tous les modèles disponibles, veuillez choisir "Console Application ( Bureau)". Vous devriez voir "ArcGIS Project Wizard" apparaître, sur la première page, nous conserverons tout par défaut et cliquerons sur "Suivant". Ensuite, vous devrez choisir le type de licence pour vos produits ESRI afin que le programme sache quels composants peuvent être intégrés à votre programme. J'ai choisi "Avancé" puis cliquez sur Terminer pour charger le modèle.

Si vous ouvrez "Solution Explorer", vous devriez voir deux fichiers cs créés par ESRI. Veuillez remplacer "Program.cs" par ceci. Encore une fois, avant de construire le programme, vous devrez ajouter quelques références supplémentaires. Vous vous souvenez de la 1ère étape de "ArcGIS Project Wizard" ? Je vous ai convaincu de l'ignorer, vous pourriez en fait y charger des références supplémentaires.

1.ESRI.ArcGIS.Version 2.ESRI.ArcGIS.Geodatabase 3.ESRI.ArcGIS.Geometry

Maintenant, vous devriez être capable de construire le programme. Cet outil est censé s'exécuter en ligne de commande avec deux arguments :

C:DesktopConsoleApplication1.exe glrd.csv michigan

Le premier argument est le chemin d'accès au fichier csv que vous venez de télécharger, le second est le nom de l'État. Si vous ne parvenez pas à fournir ces deux arguments, le programme se terminera immédiatement. Ensuite, vous pouvez vous demander : comment pourrais-je configurer cela insdie VS2013 ? Dans l'Explorateur de solutions, faites un clic droit sur le projet, puis allez dans "Propriétés", sous Débogage, placez les arguments dans "Arguments de ligne de commande". Ce faisant, chaque fois que vous déboguez le programme, les éléments que vous y placez lui seront fournis.

Il s'agit d'une application "autonome" et nous allons nous concentrer sur le code. Il y a deux tâches effectuées dans le code :

  1. Analyser un fichier csv Excel à l'aide d'une requête SQL
  2. Créer une géodatabase fichier et la remplir avec une géométrie de point et des attributs

La première tâche est nécessaire si nous devons d'abord filtrer le contenu. Pour le cas que j'ai mis en place, nous aimerions connaître uniquement les projets dans un seul État des Grands Lacs. Nous y sommes parvenus à la ligne 33 en utilisant OleDbCommand contre Excel. Microsoft propose une approche très soignée pour manipuler les données Excel à l'aide d'une instruction SQL. Je le recommande fortement à votre travail de programmation.

Si nous trouvons un nombre positif de projets pour un état, nous pouvons les mettre dans une géodatabase. Veuillez prêter attention au déroulement de ce processus :

  1. Obtenez la fabrique capable de créer une géodatabase basée sur des fichiers, voir ligne 135.
  2. Créez une nouvelle classe d'entités à la ligne 147.
  3. Bouclez les enregistrements de projet, créez une nouvelle entité, puis insérez-les dans la classe d'entités via FeatureBuffer et FeatureCursor, qui sont recommandés pour l'insertion en bloc. Voir ligne 156. Une fois la boucle terminée, videz le curseur pour réécrire tous les enregistrements sur le disque.

Lors de la création de la classe d'entités, vous devrez définir :

Il s'agit d'une procédure assez standard. Je suis surpris qu'ESRI n'ait pas d'extrait de code ou d'échantillon de code pour cela. Je ne trouve cela que sur le compte github d'ESRI. Sachez que l'exemple utilise "esriDataSourcesFile.TextFileWorkspaceFactory", ce qui a libéré le programmeur de la gestion directe du fichier csv. Cependant, la liberté vient toujours de la compréhension du système. Avec l'approche que j'ai introduite, vous avez maintenant plus de flexibilité pour traiter les fichiers Excel.

Avant de conclure, revenons au modèle par défaut qu'ESRI nous propose :

Ce sont les routines pour initialiser les composants ESRI, y compris la licence, puis tout arrêter à la fin. Votre code qui implique des éléments ESRI doit être écrit entre les deux.

Avant de fermer, pourriez-vous jeter un œil à la signature de la fonction ParseCSV, que signifie List<dynamic> ? Si vous lisez attentivement le code, quel est le type de choses que nous jetons dans la liste à la ligne 38 ? Encore une fois, si vous n'en avez aucune idée, vos connaissances en C# doivent être mises à jour !

OK, nous avons tous terminé. A la prochaine, que la force soit avec vous !

Leçon 3 : ArcObjects ou ArcPy, être ou ne pas être

Tout d'abord, je n'ai pas l'intention de créer une guerre sainte ici. Les deux sont super ! Je veux seulement illustrer la différence entre AO et AP dans un cas particulier. Espérons que, peu importe que vous soyez un partisan AO ou AP, cela pourrait vous aider à choisir le bon outil pour la bonne tâche.

Décrivons d'abord la tâche : si vous connaissez Graph en tant que structure de données dans le contexte de l'informatique, vous savez peut-être qu'il s'agit d'une structure fondamentale pour effectuer tout type d'opérations, telles que le traçage de réseau, le chemin le plus court, le débit maximal, etc. Étant donné un jeu de données pré-traité NHD Plus pour les Grands Lacs au format fichier de géodatabase, nous aimerions créer le graphique sous sa forme de liste adjacente. En examinant attentivement la géodatabase, nous avons découvert qu'il existe deux classes d'entités particulièrement utiles pour cette tâche : NHD_Flowline et Hydro_Net_Junctions. Comme vous le savez peut-être, NHD Plus est un ensemble de données qui a été traité et construit avec un réseau de flux utilisant la technologie ESRI. Cependant, la géodatabase ESRI est propriétaire, nous ne pouvons donc pas tirer parti des données existantes pour créer notre liste de contiguïté (j'exagère un peu ici car ESRI fournit une bibliothèque C++ open source pour manipuler la géodatabase basée sur des fichiers).

En utilisant ces deux classes d'entités, nous pourrions effectuer notre travail à l'aide d'ArcPy de manière assez simple. Voici le code. Vous remarquerez peut-être que le script utilisait le fichier shp au lieu de la géodatabase. Je n'ai pas menti, j'ai une version utilisant Geodatabase ici. Si vous travaillez pour mon employeur, vous devriez pouvoir le voir. Si vous configurez ce script sur votre bureau avec ArcMap 10.3 installé et NHD Plus pour les Grands Lacs prêt (faites-moi savoir si vous avez besoin de ce 'NHDPlusV21_GL_04.gdb' utilisé dans le test), vous constaterez peut-être que cela peut vous prendre jusqu'à 6 à 12 heures pour terminer. Je parie que vous remarquerez également que le goulot d'étranglement est ici et ici.

Pouvons-nous y apporter des améliorations ? Malheureusement, nous ne pouvions vraiment pas faire grand-chose car ESRI n'a exposé que des fonctionnalités limitées à ArcPy, principalement le géotraitement en utilisant tout ce qui se trouve dans la boîte à outils d'ArcMap. En d'autres termes, tous vos scripts ArcPy font une chose : une combinaison du nombre d'outils qu'ESRI propose dans ArcMap. Vous avez une capacité de 64 bits mais pas beaucoup d'aide pour ce cas, qui est plus susceptible d'être lié au processeur.

Retournons la pièce et vérifions l'autre côté : ArcObjects .Net, ce successeur maléfique d'ArcObject pour Visual Basic fournit une couche mince au-dessus des COM ArcObjects et censé pouvoir accéder à tous les aspects des technologies ESRI, eh bien, si vous avez licence appropriée achetée. Afin d'avoir un jeu équitable, nous nous en tiendrons à la même méthodologie qu'ArcPy utilise. Nous pensons que nous pourrions avoir un script C# mieux exécuté en utilisant AO en se basant sur le fait qu'AO offre une granularité plus fine que AP en termes de programmation. En brisant ces deux goulots d'étranglement et en allant un peu plus loin dans l'AO, nous pouvons faire une différence.

Tout d'abord, commençons par expliquer la partie ennuyeuse : Voici deux POCO pour représenter le nœud et ses successeurs :

Le sommet en tant que nœud est utilisé pour suivre l'identifiant du nœud, le nombre de flux entrants et le plus important : les nœuds en aval stockés dans une liste. La classe DownstreamNode contient l'ID de nœud, l'ID de flux entrant et le plus important : les données de vitesse dans une liste (notre pensée initiale est d'utiliser ces vitesses pour calculer le temps de trajet le long des flux).

Dans le script C#, nous devons ouvrir la géodatabase basée sur un fichier et obtenir les références aux classes d'entités que nous aimerions examiner :

Puisque nous avons maintenant des classes d'entités en main, nous sommes prêts à aborder les requêtes spatiales, qui se font généralement dans ArcPy par trois lignes de code :

La troisième ligne "arcpy.SelectLayerByLocation_management" est la clé. Étant donné que nous allons devoir parcourir chaque point de jonction avec la couche NHD_Flowline (un point contre toutes les polylignes), nous soupçonnons que "SelectLayerByLocation_management" peut être inefficace en raison de la conception. "SelectLayerByLocation_management" est probablement programmé de cette façon :

  1. Construire un index spatial sur NHD_Flowline
  2. Rechercher dans l'index en utilisant un point donné et trouver tous les candidats résidant sur un sous-arbre de polylignes
  3. Balayage linéaire de tous les candidats par rapport à un point donné à l'aide d'opérateurs géométriques pour exclure les faux positifs
  4. Retourner l'ensemble de résultats

Il est possible que la première étape, l'index, soit reconstruite à chaque fois que nous invoquons "arcpy.SelectLayerByLocation_management", ce qui est un gaspillage. Et si nous le construisions une fois et utilisions le même index pour tous les points ? On m'a dit que la requête spatiale AO devrait être effectuée à l'aide de :

Je ne sais pas comment cela a été implémenté, mais cela ressemble vraiment à "arcpy.SelectLayerByLocation_management". Je décide donc d'emprunter une autre voie : "IFeatureIndex" et "IIndexQuery2", ce qui semble prometteur en nous donnant un contrôle d'échelle plus fin. Voici mon code :

Nous créons une coclasse FeatureIndex et lui demandons de créer l'index spatial par rapport à la classe d'entités donnée (il semble que FeatureIndex crée en fait un index sur le système de fichiers, je pensais qu'il pourrait tirer parti de l'index à l'intérieur de la géodatabase.) IIndexQuery2, qui a une méthode appelée : IntersectedFeatures. Si nous avons raison, cela effectuera les étapes ci-dessus de 2 à 4.

Nous pouvons facilement assembler des codes en tant qu'application de console ESRI à l'aide de C#, si vous avez suivi mes tutoriels précédents. Une chose qui vaut la peine de mentionner est de calculer la longueur géodésique d'une polyligne avec des coordonnées lon/lat. Dans ArcPy, encore une fois, une seule ligne de code est nécessaire :

Vous pensez peut-être que c'est censé être aussi simple. Eh bien, retenez votre pensée, voyez comment cela a été fait dans AO, étant donné que polyLine est une IPolyline :

Désolé, ne me demandez pas comment une instance LinearUnitClass par défaut pourrait fonctionner ici. C'est assez désordonné. J'ai tenu mon impulsion pour y mettre mon propre code Haversine parce que j'espère qu'ESRI a une meilleure solution près du pôle Nord/Sud. Vous devez le croire ! :) Encore une fois, un gourou de l'AO m'a dit que cette longueur géodésique sur la polyligne devrait être effectuée au niveau des segments en utilisant une méthode différente. Je n'ai pas beaucoup creusé: j'ai en fait intentionnellement rendu mon code C# un peu désordonné, j'ai même essayé d'utiliser Linq mais Linq de C# est pâle comparé à la compréhension de liste de Python. Parce que je sais: C# sur CLR contre COM sur la plate-forme Windows va certainement être plus rapide que Python, sans parler d'ArcPy qui est au-dessus du wrapper des wrappers.

Si vous pouviez compiler le code avec succès, ne soyez pas si pressé de l'exécuter, préparez une tasse de café et ayez votre livre préféré en main, le dernier script ArcPy a pris des heures ! Eh bien, sur mon ordinateur portable, j'ai eu le temps de prendre une tasse de café et de lire des nouvelles en ligne, cependant, étonnamment, cette version AO a été achevée en 15 minutes ! Mes calculs sont mauvais, quelqu'un peut-il me dire combien de fois celui-ci est plus rapide que la version AP ?

Encore une fois, je ne veux pas prouver que AO est meilleur que AP ou vous convaincre de passer à AO. J'aimerais donner à chacun la possibilité de mettre à jour votre base de connaissances et de sortir des sentiers battus ! Il est possible que vous perdiez le sens de la performance alors que vous profitez du moins de lignes de code d'ArcPy. J'aime ArcPy, vraiment, mais dans beaucoup de scénarios, j'ai l'impression de porter un T-shirt pour un adolescent. Donc, mon conseil est le suivant : si vous vous souciez des performances ou si vous pensez qu'ArcPy a été trop lent pour vous, vous pouvez envisager d'utiliser ArcObject, qui ne vous décevra généralement pas, du moins pas cette fois pour notre cas de test. :)

Je sais, je sais, nous sommes censés discuter d'ArcObject, pas d'ArcPy. Cependant, auparavant, sur "ArcObject .Net avec VS 2013". (d'accord, nous ne sommes pas une série télévisée :), j'ai été choqué par le gain de performances en passant d'ArcPy à ArcObject. J'ai pensé que cela pourrait valoir la peine de faire une enquête sur ArcPy, sa mise en œuvre et ses capacités. Si vous ne prévoyez pas d'apprendre ArcPy, veuillez ignorer ce chapitre.

ArcPy a été introduit pour la première fois en 2010 avec l'avènement d'ArcGIS 10 (enfin, c'est vraiment juste 9.4, mais le nommer 10 l'a rendu plus récent. ). En fait, il y avait "arcgisscripting" dans ArcGIS 9.2, il prenait en charge non seulement Python, mais aussi d'autres langages de script, tels que VBScript, Perl. Cependant, peu de temps après que Microsoft a arrêté la prise en charge de VB, VBScript, Jscript, ESRI a pris la décision de supprimer tous les scripts sauf Python. Il était destiné à fournir une capacité de script sur les tâches de géotraitement uniquement. La boîte à outils de géotraitement a fait ses débuts dans ArcMap 9.2. Il a été conçu pour simplifier certains travaux de traitement de données :

  1. Boîte à outils d'analyse
  2. Boîte à outils de cartographie
  3. Boîte à outils de conversion
  4. Boîte à outils de gestion des données
  5. Boîte à outils d'édition
  6. Boîte à outils de géocodage
  7. Boîte à outils de référencement linéaire
  8. Boîte à outils multidimensionnelle
  9. Boîte à outils de statistiques spatiales

Dans ArcPy, chaque fonction de géotraitement dans ArcMap est définie comme une fonction à l'intérieur des modules ArcPy. Vous pouvez générer l'enveloppe contextuelle d'une classe d'entités ponctuelles à l'aide des deux lignes de code suivantes :

La fonction "MinimumBoundingGeometry_management" est équivalente à l'outil de "Minimum Bounding Geometry", qui se trouve dans ArcMap-> Toolbox -> Data Management. ArcPy automatise simplement cet outil en permettant à l'utilisateur d'envoyer les paramètres de cet outil de manière programmée. Après un deuxième examen, vous remarquerez peut-être que toutes les fonctions suivent la même convention de nommage :

nom de l'outil + '_' + alias de la boîte à outils

Si vous n'êtes pas sûr de l'alias d'une boîte à outils particulière, faites un clic droit sur la boîte à outils puis sur la propriété.

Selon le blog ESRI, voici le but d'ArcPy :

"ArcPy est un package de site qui s'appuie sur (et est le successeur) du module arcgisscripting à succès. Son objectif est de créer la pierre angulaire d'un moyen utile et productif d'effectuer l'analyse de données géographiques, la conversion de données, la gestion des données et l'automatisation des cartes avec Python."

Dans la première édition d'ArcPy, outre le géotraitement, il fournit également quelques autres modules : Mapping (arcpy.mapping), Spatial Analysis (arcpy.sa) et Geostatistical Analyst (arcpy.ga). Dans 10.1, l'accès aux données (arcpy.da) et l'heure (arcpy.time) ont été introduits. Il comprend également d'autres bibliothèques/utilitaires.

Comme nous le savons tous, toute la personnalisation de la production ESRI peut être effectuée via ArcObject et ArcObject a été développé sur la base du système Microsoft COM contre Windows. Par exemple, le moyen d'exécuter des outils de géotraitement est via la coclasse GPDispatch (définition de coclasse). Il permet uniquement à l'utilisateur d'envoyer des arguments par chaîne et de consommer le résultat renvoyé par l'interface. Par conséquent, ESRI l'appelle un "objet à grain grossier", voir ici. ArcPy, cependant, implémente ses fonctionnalités de géotraitement au-dessus de cette interface. Comme l'indique une partie du document ESRI, ArcPy est également un modèle à grain plus grossier.

"Arcpy.mapping a été conçu pour l'analyste SIG professionnel (ainsi que pour les développeurs). Traditionnellement, les scénarios énumérés ci-dessus devaient être réalisés à l'aide d'ArcObjects et il s'est souvent avéré être un environnement de programmation très difficile à apprendre pour le professionnel SIG moyen. Arcpy.mapping est un modèle d'objet granulaire, ce qui signifie que les fonctions sont conçues de manière à ce qu'une seule fonction arcpy.mapping puisse remplacer de nombreuses lignes de code ArcObjects."

Par conséquent, vous pouvez facilement faire quelque chose d'incroyable via ArcPy en seulement quelques lignes de code :

Les codes ci-dessus rendront toutes les fonctionnalités du mxd, en utilisant la configuration définie dans le mxd, dans un fichier pdf.

Vous voudrez peut-être demander : devrions-nous considérer ArcPy comme un remplacement d'ArcObject ? Pourtant, selon ESRI :

"Arcpy.mapping n'est pas un remplacement pour ArcObjects mais plutôt une alternative pour les différents scénarios qu'il prend en charge. ArcObjects est toujours nécessaire pour le développement plus fin et la personnalisation des applications, tandis que arcpy.mapping est destiné à automatiser le contenu des documents cartographiques et des couches existants déposer."

Vous voudrez peut-être aussi savoir : si ArcPy est capable d'appeler directement ArcObject ? La réponse est non. Mais, j'en suis sûr, ArcPy communique toujours avec ArcObject indirectement, implicitement. Comme toujours, "la curiosité a tué le chat". Je vais ouvrir un peu le capot d'ArcPy et voir ce qu'il y a dedans. Sur mon bureau, ArcPy a été installé à :

C:Program Files (x86)ArcGISDesktop10.2arcpyarcpy

Vous y trouverez une structure de package de module python classique. Il y a un sous-dossier appelé "arcobjects", êtes-vous convaincu ? Je suis sûr que non. Alors, ouvrons quelques fichiers py. La classe "MapDocument" est définie dans _mapping.py. La déclaration de la classe est comme :

Si vous êtes familier avec C# ou Java, vous pouvez considérer les "mixins" comme une interface. Il n'y a pas de constructeur explicite défini dans MapDocument, donc, selon l'ordre de résolution de méthode de Python (MRO, profondeur d'abord avant 2.3 et algorithme C3 après, vous pouvez examiner le comportement de MRO par class.mro()), les constructeurs de ses classes de base sera invoqué :

Il semble que MapDocumentMethods appelle sa classe de base init directement si super() renvoie réellement sa classe de base. Cependant, puisque nous traitons ici d'héritage multiple, super(MapDocumentMethods, self).init(mxd) invoque en fait le constructeur de la deuxième classe de base de MapDocument : "_BaseArcObject". Si vous souhaitez en savoir plus sur les comportements fantaisistes de super, veuillez cliquer ici. Jetons un coup d'œil sur _BaseArcObject :

Il a un constructeur capable de prendre des arguments d'entrée de longueur variable. Il définit également une variable membre statique, "_arc_object". La fonction "gp._gp.CreateObject" est en fait définie dans l'espace de noms "geoprocessing", rappelez-vous que nous avons mentionné que le géotraitement est le premier module introduit pour ArcPy ? Pour gp, il s'agit d'une instance de la classe Geoprocessor :

Maintenant, nous avons atteint l'origine : ArcPy communique avec ArcObject via "arcgisscripting", qui est le prédécesseur d'ArcPy. Vous ne trouverez pas arcgisscripting dans le dossier ArcPy, il réside en fait dans "C:Program Files (x86)ArcGISDesktop10.2in", avec le nom de "arcgisscripting.pyd", qui est en fait une DLL.

Comme nous l'avons vu dans le chapitre précédent et dans ce chapitre, en raison de l'interopérabilité avec COM, vous devez vous attendre à une perte de performances si vous utilisez ArcPy et non ArcObject. Le montant de la perte que vous pourriez subir dépend vraiment des tâches. Voici un benchmark que j'ai trouvé sur Internet contre ArcGIS 9.3. @dbGLC m'a rappelé que ce graphique était tiré d'une présentation discutant de la possibilité d'invoquer AO COM directement à l'aide de Python en utilisant certains packages Python COM, tels que comtypes. Le fil de discussion original est ici. Vous pouvez y trouver beaucoup d'idées brillantes.

Encore une fois, ce chapitre est destiné à vous aider à comprendre ce qui fait d'ArcPy. ArcObject et ArcPy sont tous deux d'excellents outils pour différents scénarios. Si vous souhaitez en savoir plus sur ArcPy, je vous recommande les dépôts d'ESRI sur github ici. Faites-moi savoir si vous pouvez trouver une fonction de géotraitement coûteuse appelée à l'intérieur d'une boucle énorme. :)

Leçon 5 : Diagramme de modèle d'objet ArcObjects (OMD)

Si vous êtes un développeur AO chevronné, peu importe que vous préfériez VBA, VB, VB.Net, C#, Java ou C++ (classé par la popularité :), vous devez prendre ces diagrammes parfois pour rechercher au moins un objectif. Eh bien, si vous êtes un débutant AO, tout comme moi, vous pouvez penser que j'ai été exagéré. Je ne te blâmerai pas parce que je le pensais aussi. Cependant, une fois que vous commencez sérieusement à implémenter une fonction via AO, ces diagrammes seront votre arme ultime, surtout après quelques recherches google qui vous font perdre du temps. Sans blague, j'ai toujours plaisanté avec mes collègues : un développeur senior est quelqu'un qui pourrait résoudre une énigme technique qui n'est pas résolue par les moteurs de recherche. Malheureusement, ArcObjects entre dans cette catégorie plus que les autres technologies ! Deux raisons : 1. AO a un groupe d'utilisateurs relativement petit 2. ESRI a fait un très mauvais travail pour maintenir la documentation API du développeur. Je paie 1 500 $ par an pour un abonnement EDN, mais je me sens toujours impuissant plus souvent que prévu.

Les gens apprennent toujours de leurs propres leçons (enfin, quelqu'un tombe dans la même rivière plus d'une fois). Après quelques expériences frustrantes avec les documents Google et EDN, je me suis soudainement souvenu de l'époque où j'étais jeune : j'ai vu ces gourous de l'AO se tenir et ruminer devant un énorme tableau blanc avec un diagramme de quelques pieds de long cloué dessus. Je me suis souvenu que le diagramme qu'ils regardaient s'appelait AO Object Model Diagram, alias OMD (Oh My Darling) ! Attends une minute, où sont mes chéris ? Sur mon bureau, ils sont situés dans :

C:Program Files (x86)ArcGISDeveloperKit10.4Diagrams

Il y a 68 pdfs dans ce dossier, eh bien il y en avait beaucoup moins pour la version précédente d'AO. Si vous êtes un amateur comme moi, je vous recommande de lire d'abord GeoDatabaseObjectModel.pdf. Il contient la plupart des éléments dont vous pourriez avoir besoin pour démarrer la programmation AO. Jetons un coup d'oeil ensemble!

Tout d'abord, vous devez comprendre qu'ESRI est un adepte sincère d'UML. Tous les symboles étranges que vous pouvez voir sont en fait dérivés de diagrammes de classes UML avec une invention ESRI. Voici une bonne référence pour le diagramme de classes UML. Si vous ne voulez pas passer 3 minutes à passer en revue ces concepts et symboles associés, ESRI a un UML 101 sur chaque diagramme.

ESRI a fait son invention. Que sont l'interface entrante et l'interface sortante ? Même après avoir suivi le cours d'UML pour un semaster complet, il n'y a aucune idée de ce qu'ils pourraient être ! Ne vous inquiétez pas, ESRI propose des explications dans sa série « Learning ArcObjects » qui est disponible en ligne et hors ligne pour chaque version. Voici le charpter : Lecture des OMD. Maintenant, vous savez peut-être que l'interface entrante est l'interface que la classe spécifiée implémente réellement, l'interface sortante est en fait le registre d'événements, ESRI l'appelle récepteur d'événements. C'est une astuce à l'ancienne pour enregistrer votre gestionnaire d'événements. Si vous êtes aussi naïf que moi, vous pouvez simplement le considérer comme un événement dans le contexte de .Net.

Rappelez-vous que j'ai mentionné auparavant que ces gourous ont imprimé un ORM aussi grand qu'une carte à petite échelle en utilisant un traceur? Pourquoi? Si vous ouvrez GeoDatabaseObjectModel.pdf, voici ce que vous pouvez bien voir à moins que vous n'ayez un téléviseur LED extrêmement grand comme écran :

Maintenant, vous savez pourquoi le traceur est nécessaire, n'est-ce pas :)

Si vous connaissez l'interface qui vous intéresse, il est toujours pratique de rechercher directement l'OMD correspondant. Sinon, vous avez l'impression de jouer à cache-cache.

OK, jouons à cache-cache. Voici l'affaire : j'aimerais ouvrir une GeoDatabase basée sur un fichier et obtenir les informations sur les classes d'entités qu'elle contient. Si vous êtes un programmeur, vous savez peut-être que l'ouverture d'un fichier à partir du disque utilise généralement des fonctions telles que "open", ou "openfile", etc. Puisque nous sommes POO, il existe une classe dans laquelle nous pouvons appliquer cette fonction. Avant de plonger dans l'océan de mes chéris, je prends vos bras et vous dis : attendez une minute, encore une chose que je dois mentionner : trois règles de survie pour jouer avec My Darlings (OMD) :

je. Pendant le traçage d'interface, chaque fois qu'une interface qui implémente IUnknown est atteinte, vous savez que c'est la fin. Remarquez que j'utilise l'"interface" workd et non la classe ? AO est construit sur le standard Microsoft COM. Cela signifie essentiellement que chaque appel de fonction doit être effectué sur une instance d'une sorte d'interface. Par protocole, chaque interface définie sous le domaine de COM doit implémenter l'interface IUnknown. Ne vous inquiétez pas de ce qu'il y a dans IUnknown, le garder inconnu n'est pas une mauvaise idée. Tout ce que vous devez savoir, c'est que c'est une impasse une fois que nous voyons une interface dans OMD qui implémente directement IUnknown. Nous avons atteint le plus haut niveau de la hiérarchie OMD.

WorkspaceFactory est une classe qui implémente IWorkspaceFactory, qui est une interface entrante et implémente IUnknown. Cela nous indique que IWorkspaceFactory est une interface de haut niveau.

II. L'accès aux fonctions définies dans une interface se fait toujours via des instances d'un certain type de classe. Ce type de classe est soit une classe Coclass, soit une classe "instanciable", qui est un type de classe dont l'instance ne peut être récupérée que via d'autres classes. Cela pourrait signifier une récupération depuis l'usine, un singleton ou une conversion ascendante. Utilisons toujours WorkspaceFactory comme exemple.

Dans .Net, WorkspaceFactory sur OMD est implémenté en deux unités : l'interface "WorkspaceFactory" et la classe "WorkspaceFactoryClass", qui implémente l'interface "WorkspaceFactory" avec d'autres interfaces que WorkspaeFactory devrait faire selon OMD. "WorkspaceFactory" est une interface vide qui fonctionne probablement comme un espace réservé. Pourquoi? Je ne sais pas. Si vous le savez, merci de me le faire savoir :)

À partir de la décompilation, nous pouvons dire que le constructeur de WorkspaceFactoryClass est avec le modificateur d'accès "interne", ce qui signifie qu'il n'est accessible qu'à l'intérieur de l'assembly. "extern" signifie que ce constructeur est implémenté ailleurs. L'attribut MethodImpl associé au constructeur est affecté avec MethodImplOptions.InternalCall, qui indique "l'appel est interne, c'est-à-dire qu'il appelle une méthode qui est implémentée dans le Common Language Runtime.". Tout cela garantit que nous ne pouvons pas créer une instance de WorkspaceFactoryClass dans notre code. Par conséquent, WorkspaceFactoryClass se qualifie pour être un classe "instanciable".

Sur OMD, la classe abstraite, la classe instanciable et la coclasse peuvent être facilement identifiées par la forme du rectangle. La classe abstraite est un rectangle ombré 2D, la classe instanciable est un rectangle 3D sans ombre, la coclasse est un rectangle ombré 3D.

III. Étant donné que ces classes implémentent généralement plusieurs interfaces. C'est très typique de voir dans le code AO, pour accéder à une méthode déclarée dans l'interface D, qui est implémentée dans la classe C, vous devez d'abord obtenir une instance de la classe A, puis la transtyper vers une interface B en utilisant "as". Puisque la classe C implémente à la fois l'interface B et l'interface D, vous transmettez maintenant tout ce que vous avez en main de B vers D.

Maintenant, vous pouvez plonger ! Le seul indice dont nous disposons est qu'il semble que tous les ensembles de données soient accessibles via le modèle de conception Abstract Factory. Puisque nous aimerions ouvrir une GDB basée sur un fichier, je trouve FileGDBWorkspaceFactory dans DataSourcesGDBObjectModel.pdf

Il a un rectangle 3D ombré, nous pouvons donc initialiser une instance de FileGDBWorkspaceFactory directement ou créer une telle chose via un réflecteur. Il possède une interface entrante : IWorkspaceFactory et cette interface est décrite dans GeoDatabaseObjectModel.pdf. Voir l'image précédente, il a une fonction appelée "OpenFromFile()", qui est la méthode que nous attendons. Cette méthode renvoie une interface IWorkspace, voir le schéma ci-dessous :

Notez qu'il implémente IFeatureWorkspace, puisque nous recherchons les moyens d'accéder aux informations sur les classes d'entités, cela semble intéressant. OK, il a deux méthodes : OpenFeatureClass et OpenFeatureDataset, la première permet d'accéder à une classe d'entités si le nom d'alias de la classe d'entités est connu à l'avance, la dernière, en revanche, permet de boucler les classes d'entités à l'intérieur d'une classe d'entités jeu de données si les noms des classes d'entités sont inconnus, mais que le nom du jeu de données de classe d'entités est donné.

En examinant la déclaration de FeatureDataset, l'interface IFeatureClassContainer définit le moyen d'accéder à IFeatureClass via l'index, qui correspond exactement aux fonctions que nous espérons parcourir toutes les classes d'entités dans un fichier GDB. Vous trouverez ci-dessous le code pour illustrer ce processus. Il s'agit d'une copie directe de mon projet qui nécessite le développement d'un SOE.

Eh bien, j'espère que cet exemple est assez simple pour vous donner une idée de la façon d'utiliser OMD. Pour être honnête, je ne suis pas sûr d'avoir fait du bon travail ici. Donc, si je ne l'ai pas fait, merci de me le faire savoir. :)

Leçon 6 : Extension d'objet ArcGIS Server (SOE) et outil de géotraitement##

Cela faisait un moment que je n'avais pas eu l'occasion de mettre à jour cette série. J'ai copié/collé quelques notes que j'ai prises pour notre projet ici. D'après mon expérience personnelle, ces deux approches de développement côté serveur sont toutes deux utiles, bien que SOE semble être plus populaire et plus performant, l'outil de géotraitement offre une possibilité aux développeurs qui migrent depuis Arcpy. En outre, l'outil de géotraitement dispose d'un workflow naturel déjà conçu pour gérer les tâches de géotraitement qui peuvent prendre beaucoup de temps. Si vous demandez mon oponion, je dois dire "Luke, use force!".

###Extension d'objet serveur (SOE)###

####Introduction Développement d'extensions d'objet serveur (SOE) est le moyen standard proposé par ESRI pour personnaliser le comportement du serveur ArcGIS. Bien sûr, SOE est également un COM.

La meilleure référence pour cette fonctionnalité, eh bien, si vous avez installé le SDK, se trouve dans le fichier d'aide :

ArcObjects SDK for ArcGIS 10.4 -> Aide ArcObjects pour les développeurs .NET -> Développement avec ArcGIS -> Extension d'ArcGIS for Server -> Développement d'extensions d'objet serveur

La note ici ne vous guidera PAS pour développer une entreprise d'État. Au lieu de cela, nous suivons la procédure pour déboguer, créer et déployer correctement le SOE sur le bureau et le serveur ArcGIS.

Eh bien, ne soyez pas déçu si vous venez ici et vous attendez à apprendre à coder SOE. En suivant le document répertorié dans l'aide du SDK, vous devriez pouvoir le faire. Ou, si vous avez besoin d'un raccourci avec un échantillon complet, vous pouvez essayer ce github ESRI.

####Débogage Sans ArcGIS Server, le débogage SOE doit être effectué au niveau du test unitaire. Si vous ne souhaitez pas séparer la logique SOE du fichier de code de modèle SOE par défaut, essayez un framework de maquette, tel que moq. Cependant, le développeur ESRI n'a pas rendu ses classes "conviviales pour les maquettes", par exemple, la classe ServerLogger est définie comme une classe scellée, ce qui empêche la plupart des infrastructures de maquette d'hériter et de la remplacer par une maquette.

Si vous disposez d'une capacité de débogage sur ArcGIS Server, voici quelques conseils :

  1. Assurez-vous d'ouvrir le projet SOE en utilisant le compte administrateur
  2. Lorsque vous vous connectez aux processus ArcGIS Server, assurez-vous de sélectionner tous les fichiers ArcSOC.exe avec le type de (Géré)

Je n'ai pas pu déboguer le code dans Init, Shutdown et Construct. SOE s'exécute dans le conteneur ArcSOC. Étant donné que ces 3 fonctions sont invoquées lors de la construction et de l'arrêt du SOE, il est difficile de dire à quel processus je peux m'attacher.

####Déployer le déploiement SOE suit une procédure en deux étapes en supposant que le type SOE est MapServer et que le service est REST.

  1. Si vous créez un projet SOE dans VS, un fichier "soe" sera créé en tant qu'archive. Dans ArcGIS Server Manager, accédez à Site -> Extensions -> Add Extension, téléchargez ce fichier "soe" et ArcGIS Server s'occupera de tout pour vous, comme l'enregistrement COM.
  2. Préparez les données cartographiques dans ArcMap et publiez-les en tant que services de carte avec l'option de « mise en scène », ce qui signifie « Ne pas télécharger, préparer simplement les données ». Cela créera un fichier sd dans "C:UsershellocomradeAppDataLocalESRIDesktop10.4Staging". Dans ArcGIS Server Manager, Services -> Publish Service, alimentez l'assistant avec le fichier sd et sous Capabilities, assurez-vous de vérifier le SOE que vous téléchargez à l'étape 1. Si tout se passe bien, le service de carte sera démarré avec votre SOE.
  3. Allez sur "http://localhost:6080/arcgis/rest/services/" et sélectionnez le service de carte défini à l'étape 2, faites défiler vers le bas de la page, vous devriez voir "Extensions prises en charge" apparaître.

####Introduction Développement d'une fonction de géotraitement personnalisée est une "nouvelle" fonctionnalité ESRI publiée via ArcPy ? En fait, depuis la version 9.3, cette fonctionnalité a été fournie à ArcObject .Net. Cependant, la documentation était "cachée" dans le livre et ESRI semblait timide pour présenter cette fonctionnalité au développeur AO. Vous ne pouvez même pas trouver de modèle dans l'intégration de Visual Studio pour cette fonctionnalité via AO .Net SDK. Vous devrez tout refaire à partir de zéro

La meilleure référence pour cette fonctionnalité, eh bien, si vous avez installé le SDK, se trouve dans le fichier d'aide :

ArcObjects SDK for ArcGIS 10.4 -> Aide ArcObjects pour les développeurs .NET -> Développement avec ArcGIS -> Apprentissage d'ArcObjects -> Extension d'ArcObjects -> Outils de fonction de géotraitement personnalisés

J'espère que vous comprenez maintenant pourquoi j'ai dit qu'ESRI était timide à ce sujet. Voir l'arborescence ?

Le mémo ici ne vous guidera PAS pour créer un tel outil. Au lieu de cela, nous suivons la procédure pour créer et déployer correctement cet outil dans ArcMap et sur le serveur ArcGIS.

Eh bien, ne soyez pas déçu si vous venez ici et vous attendez à apprendre à coder un tel outil. En suivant le document répertorié dans l'aide du SDK, vous devriez pouvoir le faire. Ou, si vous avez besoin d'un raccourci avec un échantillon complet, qui manque dans la documentation d'aide du SDK, vous pouvez essayer ce github ESRI.

Remarque : lorsque vous implémentez IGPFunction2, IsLicensed peut simplement renvoyer true sans condition si vous êtes sûr que cet outil ne sera pas distribué à un tiers qui ne connaît peut-être pas le type de licence, en particulier les extensions, requis. Pourquoi? si vous envisagez d'utiliser cet outil sur le bureau, le moteur et le serveur, vous devrez tous les vérifier dans un if. sinon si. sinon, si vous avez oublié et que isLicensed renvoie false, votre outil ne fonctionnera pas. Pourquoi simplement retourner true de isLicensed sans vérifier et laisser le logiciel d'hébergement (notre outil n'est qu'une dll) dire à l'utilisateur si l'outil peut être exécuté en lançant une exception pendant l'exécution ? :) Ce n'est pas élégant cependant.

####Enregistrement Étant donné une base de code source prête à être compilée en tant que COM géré dans VS 2013, la première chose que je ferais est de cliquer avec le bouton droit sur le nom du projet -> propriétés -> Build, cochez "S'inscrire pour COM Interop". Cela rendra le type à l'intérieur de l'assembly visible pour le client COM via l'utilitaire : RegAsm.exe. En cochant cette case, le compilateur C# générera un fichier tlb et utilisera le fichier tlb pour terminer l'enregistrement. Cette étape fait en fait NE PAS semble plus nécessaire pour la série ArcGIS 10. ESRI a décidé d'enregistrer à la fois le COM natif et le COM géré sans utiliser le registre du système via son propre outil "ESRIRegAsm.exe". Que diable ? Même ESRI ne fait plus confiance au registre du système MS, c'est triste.

"Des informations supplémentaires sur le produit doivent être fournies lors de l'enregistrement à l'aide d'un utilitaire Esri appelé ESRIRegAsm.exe. ESRIRegAsm.exe remplace l'utilitaire standard Microsoft RegAsm.exe."

Si vous avez un projet de bibliothèque de classes ArcGIS créé via un modèle ArcGIS, l'enregistrement se fera automatiquement en tant qu'événement post-construction. C'est pourquoi le complément ArcMap peut toujours s'afficher automatiquement dans ArcMap. Cependant, ce n'est pas vrai pour notre cas, puisque nous développons une fonction GP qui n'est pas aussi bien supportée par ESRI en termes d'intégration VS.

Mais c'est OK. ESRI n'est pas si méchant. Naviguez simplement sur le dossier de votre dll compilée, faites un clic droit dessus, dans le menu contextuel, voir "S'inscrire" ? ça va le faire ! Le monde est-il parfait ? Non! Lorsque cette boîte de dialogue d'enregistrement s'affiche, vous pouvez voir le produit comme « Desktop » ou « Engine » ou les deux affichés. Ensuite, vous devrez en choisir un pour l'inscription.

Mais l'objectif d'un outil GP est qu'il peut fonctionner en tant que service GP sur le serveur ArcGIS. Où est l'enregistrement de mon serveur ArcGIS ? Il s'avère qu'il existe deux ESRIRegAsm.exe ! L'un pour la ligne 32 bits d'ESRI, l'autre pour la ligne serveur 64 bits.

32 bits : C:Program Files (x86)Common FilesArcGISin

64 bits : C:Program FilesCommon FilesArcGISin

Si vous souhaitez enregistrer votre outil pour le serveur, utilisez le deuxième binaire en ligne de commande. (Assurez-vous d'ouvrir cmd en utilisant les privilèges d'administrateur coz ne demandera pas de confirmer l'autorisation d'administrateur comme d'autres logiciels peuvent le faire, vous obtiendrez donc une erreur "Impossible d'écrire sur le disque"). C'est ce que j'ai fait:

"C:Program FilesCommon FilesArcGISinesriregasm.exe" c: empGPNetTrace.dll

J'ai intentionnellement ignoré l'option /p:, la boîte de dialogue contextuelle me demandera donc de choisir le produit avec lequel je souhaite m'inscrire. Une chose que vous voudrez peut-être savoir est la suivante : une fois l'enregistrement terminé et le produit activé, par exemple ArcGIS Server, cette dll à l'endroit enregistré, dans notre cas sous C:Temp, sera verrouillée par le processus. Vous ne pourrez pas le mettre à jour. Alors faites NE PAS enregistrez la dll sous votre dossier bin ou obj pour un projet VS, l'éditeur de liens VS ne pourra plus créer de dll pour vous.

Tout d'abord, vous devez ajouter cet outil sur ArcMap en tant que boîte à outils. Dans la fenêtre du catalogue. Créez une nouvelle boîte à outils sous "Ma boîte à outils", puis cliquez avec le bouton droit sur la boîte à outils nouvellement créée, Add->Tool, cela fera apparaître une liste de toutes les boîtes à outils enregistrées, y compris celle que nous venons d'enregistrer. Comment trouver notre outil ? Eh bien, cela dépend de l'outil lui-même.

La deuxième fonction "GetFunctionNames" est une méthode définie dans l'interface "IGPFunctionFactory", elle est requise pour que le logiciel ESRI puisse extraire le nom de l'outil de l'implémentation de cette interface. Le nom apparaissant sur la liste de la boîte à outils en tant que root sera "name.Category", qui est "NetworkNavigation", et le nom de l'outil supplémentaire sera name.DisplayName, qui est "Network Trace", en interne, cet outil est suivi par nom .Name, qui est "TraceNetwork". Maintenant, vous devriez pouvoir trouver et ajouter l'outil sur ArcMap.

Très bien, les préliminaires sont terminés. Déboguons ! Puisque notre outil a été compilé en tant que dll, nous devons attacher le débogueur à n'importe quel binaire qui exécute réellement le code dans notre bibliothèque. Sous VS, Debug->Attach to Process. Pour ce faire, vous devez vous assurer d'ouvrir VS à l'aide d'un compte administrateur.

En supposant que vous parveniez à obtenir un travail de traitement en arrière-plan 64 bits avec votre code, cela signifie que vous avez

dans ton code. S'il échoue lors de l'exécution, la rumeur veut que votre dll n'ait pas été correctement enregistrée avec ESRIRegAsm.exe 64 bits. Je n'arrive pas à faire fonctionner cette partie sur mon bureau, mais vous pourriez avoir de la chance. Si c'est le cas, vous devrez attacher le débogueur avec le processus nommé "RuntimeLocalSerer.exe". Il existe en fait deux processus portant le même nom. L'un s'exécute pour le CLR géré, l'autre pour le COM natif. Je pense que vous devriez attacher avec Managed one (vérifiez la colonne Type dans le tableau "Available Processes". Cela a été dit, vous pouvez attacher avec les deux en appuyant sur Ctrl sur le clavier tout en cliquant sur le nom du processus.

Disons que le traitement en arrière-plan 64 bits ne fonctionne pas bien avec vous. Ensuite, vous devrez le désactiver dans ArcMap. Géotraitement -> Options de géotraitement -> Traitement en arrière-plan -> Activer, décochez la case "Activer" pour désactiver le traitement en arrière-plan. Maintenant, vous pouvez simplement attacher le débogueur avec le processus ArcMap.


Espaces de travail multi-racines

Les espaces de travail multi-racines sont une fonctionnalité avancée de VS Code qui vous permet de configurer plusieurs dossiers distincts pour faire partie de l'espace de travail. Au lieu d'ouvrir un dossier en tant qu'espace de travail, vous ouvrirez un fichier JSON <name>.code-workspace qui répertorie les dossiers de l'espace de travail. Par example:

Un espace de travail multi-racine ouvert dans VS Code

Noter: La différence visuelle entre l'ouverture d'un dossier et l'ouverture d'un fichier .code-workspace peut être subtile. Pour vous donner un indice qu'un fichier .code-workspace a été ouvert, certaines zones de l'interface utilisateur (par exemple, la racine de l'explorateur de fichiers) affichent un (Espace de travail) suffixe à côté du nom.

Espaces de travail multi-racines sans titre

Il est facile d'ajouter ou de supprimer des dossiers dans votre espace de travail. Vous pouvez commencer par ouvrir un dossier dans VS Code, puis ajouter plus tard d'autres dossiers comme bon vous semble. À moins que vous n'ayez déjà ouvert un fichier .code-workspace, la première fois que vous ajoutez un deuxième dossier à un espace de travail, VS Code créera automatiquement un espace de travail "untitled". En arrière-plan, VS Code conserve automatiquement un fichier untitled.code-workspace pour vous qui contient tous les dossiers et paramètres d'espace de travail de votre session en cours. L'espace de travail restera "untitled" jusqu'à ce que vous décidiez de l'enregistrer sur le disque.

Un espace de travail multi-racine sans titre ouvert dans VS Code

Noter: Il n'y a vraiment aucune différence entre un espace de travail sans titre et un espace de travail enregistré autre que le fait qu'un espace de travail sans titre est automatiquement créé pour vous pour votre commodité et sera toujours restauré jusqu'à ce que vous l'enregistriez. Nous supprimons automatiquement les espaces de travail sans titre (après vous avoir demandé confirmation) lorsque vous fermez une fenêtre dans laquelle un espace de travail sans titre est ouvert.


Récepteur 4.12 pour Windows

Noter: Citrix vous recommande de télécharger la dernière version de l'application Citrix Workspace. La version 1904 ou ultérieure contient des correctifs de sécurité critiques. Pour plus d'informations, consultez l'article du centre de connaissances CTX251986

Compatible avec
Windows 10, 8.1, 7, 2008R2, Thin PC ainsi que Windows Server 2016, 2012 et 2012R2.

Sommes de contrôle ADB1AFF0625F6EE0C9745F6F8C523398CF3F4732EB3D2CA5966E97AE6D57536F

Correction pour activer la mise à jour automatique de Receiver

Action requise pour continuer les mises à jour automatiques sur Receiver.
Un nouveau certificat de sécurité a récemment été publié pour améliorer encore la sécurité de Citrix Receiver. Cependant, ce certificat désactive la fonctionnalité de mise à jour automatique de Receiver. C'est important que toi téléchargez et installez l'outil de mise à jour automatique de Receiver récemment publié pour restaurer la fonctionnalité de mise à jour de Receiver.

Veuillez consulter la documentation du produit pour obtenir la liste complète des fonctionnalités.

Accès hautes performances aux applications et bureaux virtuels Windows, accès n'importe où depuis votre bureau, menu Démarrer, interface utilisateur Receiver ou accès Web avec Chrome, Internet Explorer ou Firefox.

Citrix Receiver peut être utilisé sur des PC, des tablettes et des clients légers joints à un domaine et non. Fournit une utilisation haute performance de Skype for Business virtualisé, des applications d'ingénierie du secteur d'activité et HDX 3D Pro, du multimédia et de l'accès aux applications locales.

Langues disponibles
Anglais, français, allemand, japonais, coréen, russe, chinois simplifié, espagnol et chinois traditionnel.

Scripts de déploiement de Citrix Receiver pour Windows

Ce fichier ZIP contient des exemples de scripts pour déployer et configurer Citrix Receiver. Il s'agit d'un téléchargement facultatif, fourni tel quel par Citrix pour servir d'exemple. Avant utilisation, les administrateurs informatiques doivent personnaliser les scripts en fonction de leur environnement. Les scripts de désinstallation et d'installation peuvent être utilisés comme indiqué dans le guide de mise à niveau de Citrix Receiver pour Windows (CTX135933).

Modèles Citrix ADMX/ADML pour l'éditeur de stratégie de groupe

Ce fichier ZIP contient des fichiers ADMX et ADML pour déployer et configurer Citrix Receiver à l'aide de l'éditeur d'objets de stratégie de groupe. Il s'agit d'un téléchargement facultatif, destiné aux administrateurs informatiques et non destiné aux utilisateurs finaux. Les modèles d'administration (fichiers ADMX et ADML) peuvent être utilisés comme indiqué dans le guide de mise à niveau de Citrix Receiver pour Windows (CTX135933).


8 nouvelles façons d'autonomiser les travailleurs de première ligne et de transformer leur façon de travailler avec Microsoft 365

Les entreprises à la pointe de la transformation numérique reconnaissent à quel point il est essentiel de fournir à tous leurs employés la technologie et les outils appropriés. C'est pourquoi, dans des secteurs comme la vente au détail, l'hôtellerie et la fabrication, un mouvement est en cours pour responsabiliser numériquement la main-d'œuvre de première ligne, les plus de 2 milliards de personnes dans le monde qui travaillent dans des rôles axés sur les services ou les tâches.

Avec Microsoft 365, le cloud de productivité mondial, nous sommes dans une position unique pour aider les entreprises de toutes tailles et de tous secteurs à fournir à leurs employés les outils et l'expertise dont ils ont besoin pour faire leur meilleur travail, sans sacrifier la sécurité de leur organisation ou de leurs clients ' Les données. Pour donner aux employés de première ligne les outils dont ils ont besoin, les entreprises doivent répondre à une expérience utilisateur unique, à la sécurité et à la conformité, ainsi qu'à la gestion informatique.

Microsoft 365 pour les travailleurs de première ligne

Microsoft 365 combine des applications de productivité intuitives de premier ordre avec des services cloud intelligents pour responsabiliser votre force de travail de première ligne.

Il est inspirant de voir comment les leaders de l'industrie, comme IKEA et Mattress Firm, améliorent l'engagement des employés et améliorent l'expérience client en mettant des outils comme Microsoft Teams entre les mains de leur main-d'œuvre de première ligne. IKEA connecte tout le monde dans l'organisation avec des fonctionnalités familières comme le chat et les appels vidéo et numérise les processus de première ligne tels que la gestion des équipes pour gagner du temps et de l'argent.

Cette vidéo a été réalisée par Microsoft, avec l'accord d'Ingka Group.

Mattress Firm permet aux travailleurs de première ligne d'accéder en temps réel aux informations, aux ressources et à l'expertise dont ils ont besoin pour ravir les clients et offrir une meilleure expérience d'achat.

Avant le salon de la National Retail Federation (NRF) de la semaine prochaine, nous sommes ravis de présenter de nouvelles fonctionnalités pour les travailleurs de première ligne à venir sur Microsoft 365. Voici un aperçu de ce qui arrive bientôt :

De nouveaux outils qui facilitent la communication et la gestion des tâches pour les travailleurs de première ligne

  1. Talkie-walkie dans les équipes—Cette nouvelle expérience push-to-talk permet une communication vocale claire, instantanée et sécurisée sur le cloud, transformant les smartphones et tablettes des employés ou de l'entreprise en un talkie-walkie. La fonctionnalité, intégrée nativement dans Teams, réduit le nombre d'appareils que les employés doivent transporter et les coûts informatiques. Contrairement aux appareils analogiques avec des réseaux non sécurisés, les clients n'ont plus à s'inquiéter de la diaphonie ou de l'écoute d'étrangers. Et comme le talkie-walkie fonctionne via le Wi-Fi ou les données cellulaires, il peut être utilisé dans tous les emplacements géographiques. La capacité sera disponible dans l'application mobile Teams et s'intégrera au nouveau Samsung Galaxy XCover Pro, un appareil conçu pour les travailleurs en première ligne de n'importe quelle industrie. Talkie Walkie sera disponible en avant-première privée dans Teams au cours du premier semestre de cette année.

Expérience intuitive push-to-talk pour connecter les membres de l'équipe à travers les départements et les emplacements.

  1. Ciblage, publication et reporting des tâchesAvec les tâches dans les équipes, les clients peuvent désormais conduire une exécution cohérente des opérations de magasin à grande échelle sur tous les sites d'une organisation. Les dirigeants d'entreprise et régionaux peuvent envoyer des listes de tâches ciblées aux emplacements pertinents, tels que des magasins de détail spécifiques, et suivre leur progression grâce à des rapports automatiques en temps réel. Les responsables disposent d'outils pour diriger facilement les activités au sein de leurs magasins, et les employés de première ligne disposent d'une simple liste de priorités disponible via leur appareil personnel ou fourni par l'entreprise leur indiquant exactement ce qu'il faut faire ensuite. Le ciblage, la publication et le reporting des tâches arriveront dans Teams au cours du premier semestre de cette année.

Le siège social de l'entreprise peut cibler, attribuer et suivre les tâches sur plusieurs sites. Les travailleurs de première ligne peuvent voir les tâches qui leur sont assignées et dans tout le magasin.

  1. Intégrations de gestion des effectifs—Les clients utilisant des systèmes de gestion de la main-d'œuvre tiers de premier plan, tels que Kronos et JDA, pour la planification, le temps et la présence peuvent désormais commencer à s'intégrer directement à Shifts via les API Shifts Graph et le SDK. Les scénarios pris en charge incluent la gestion des équipes, des horaires, des groupes d'horaires, des demandes d'échange, des demandes de congés et des demandes d'équipes ouvertes. Le connecteur JDA pour Shifts est open source et disponible sur GitHub. Le connecteur Kronos pour Shifts sera également disponible sur GitHub plus tard ce trimestre.

Fonctionnalités améliorées de gestion des identités et des accès qui permettent aux professionnels de l'informatique de maintenir plus facilement les travailleurs de première ligne productifs et sécurisés

  1. Connexion SMS—Avec la connexion SMS, les employés de première ligne peuvent se connecter à leur compte Azure Active Directory (Azure AD) à l'aide de codes SMS à usage unique, ce qui réduit le besoin de mémoriser les noms d'utilisateur et les mots de passe pour toutes leurs applications Microsoft 365 et personnalisées. Une fois inscrit, l'utilisateur est invité à saisir son numéro de téléphone, ce qui génère un SMS avec un mot de passe à usage unique. La connexion par SMS est une expérience d'authentification unique (SSO), permettant aux travailleurs de première ligne d'accéder de manière transparente à toutes les applications qu'ils sont autorisés à utiliser. Cette nouvelle méthode de connexion peut être activée pour certains groupes et configurée au niveau de l'utilisateur dans le portail Mon personnel, ce qui contribue à réduire la charge informatique.

Codes SMS à usage unique sur les appareils mobiles pour rationaliser l'expérience de connexion des travailleurs de première ligne.

  1. Déconnexion de l'appareil partagé— De nombreux employés de première ligne utilisent une seule tablette ou un seul appareil mobile qui est partagé entre les équipes. Cela peut poser des problèmes de sécurité uniques à l'organisation lorsque différents employés ayant accès à différents types de données utilisent le même appareil au cours d'une journée. Avec la déconnexion de l'appareil partagé, les travailleurs de première ligne pourront se déconnecter de toutes leurs applications Microsoft 365 et personnalisées et de leurs sessions de navigateur en un clic à la fin de leur quart de travail, empêchant ainsi leurs données ainsi que tout accès aux données des clients d'être accessibles. au prochain utilisateur de cet appareil.

En un clic, les travailleurs de première ligne peuvent se déconnecter d'un appareil Android partagé et se déconnecter de toutes les applications et sessions de navigateur pour empêcher le partage de données sensibles avec un autre utilisateur de l'appareil.

  1. Contrôles d'accès hors service pour l'application Teams—Les administrateurs informatiques peuvent désormais configurer Teams pour limiter l'accès des employés à l'application sur leur appareil personnel en dehors des heures de travail. Cette fonctionnalité permet de s'assurer que les employés ne travaillent pas involontairement lorsqu'ils ne sont pas en poste et aide les employeurs à se conformer à la réglementation du travail. Cette fonctionnalité commencera à être déployée auprès des clients ce trimestre.

Affichez un message et/ou désactivez l'accès à l'application Teams lorsque les travailleurs de première ligne sont en congé.

  1. Gestion déléguée des utilisateurs—Les responsables de première ligne peuvent approuver les réinitialisations de mot de passe et permettre aux employés d'utiliser leurs numéros de téléphone pour la connexion par SMS, le tout via un portail personnalisable unique activé par l'informatique pour les responsables de première ligne. La gestion déléguée des utilisateurs peut permettre aux responsables de première ligne d'accéder au portail My Staff, afin qu'ils puissent débloquer les problèmes liés au personnel, réduisant ainsi la charge de la gestion des identités sur l'informatique et gardant les employés connectés aux applications dont ils ont besoin au travail.

Grâce au portail My Staff, la gestion déléguée des utilisateurs permet à un responsable de première ligne de gérer les informations d'identification de son équipe et d'aider à la réinitialisation des mots de passe.

  1. Provisionnement entrant de SAP SuccessFactors vers Azure AD—Le service de provisionnement des utilisateurs d'Azure AD s'intègre désormais à SAP SuccessFactors, ce qui facilite plus que jamais l'intégration et la gestion des identités des travailleurs de première ligne à grande échelle, dans n'importe quelle application utilisant Azure AD. Cette fonctionnalité, en préversion publique, s'appuie sur la possibilité de provisionner des utilisateurs sur Azure AD à partir de Workday, un autre système populaire de gestion du capital humain (HCM), déjà généralement disponible. L'intégration à ces systèmes d'enregistrement aide le service informatique à faire évoluer l'intégration et la productivité des travailleurs de première ligne dès le premier jour.

Avec le service de provisionnement des utilisateurs d'Azure AD désormais intégré à SAP SuccessFactors, ainsi qu'à Workday, il est plus facile que jamais d'intégrer les identités des utilisateurs Firstline Workers à grande échelle. Montré ici, vous pouvez démarrer le cycle d'approvisionnement et utiliser la barre de progression et les journaux d'approvisionnement pour suivre le processus d'approvisionnement.

Toutes ces capacités devraient être déployées au cours du premier semestre de cette année, sauf indication contraire.

Donner aux travailleurs de première ligne les moyens d'acquérir un avantage concurrentiel

Une nouvelle recherche en partenariat avec Harvard Business Review Analytic Services met en évidence le potentiel inexploité des travailleurs de première ligne dans le commerce de détail.

Regarder vers l'avant

Ce n'est que la prochaine étape de notre parcours pour donner à chaque personne et à chaque organisation de la planète les moyens d'en faire plus. Nous visons à créer des outils et des expériences pour le lieu de travail moderne et pour les travailleurs à tous les niveaux de l'organisation. Nous continuerons à développer et à mettre sur le marché des capacités et des expériences spécialement conçues pour les travailleurs de première ligne en partenariat avec nos clients et les leaders de l'industrie. Et nous continuerons à innover et à créer des fonctionnalités qui simplifient le travail, rassemblent les gens et aident les organisations, grandes et petites, à en faire plus. Venez nous voir la semaine prochaine au NRF 2020 au stand #4501.


ArcObjects .NET - Comment fermer/libérer FeatureClass, Workspace, Factory - Systèmes d'information géographique

  • Allemand
  • Anglais
  • Espagnol
  • English
  • Italiano
  • 日本語
  • 한국어
  • Portugais
  • сский
  • 简体 中文
  • tchèque
  • polonais

Innovation et gestion de programme collaborative et synchronisée pour les nouveaux programmes

Intégration de technologies de systèmes mécaniques, logiciels et électroniques pour les systèmes de véhicules

Produits de consommation et vente au détail

Innovation de produit grâce à une gestion efficace des formulations intégrées, des emballages et des processus de fabrication

Le développement de nouveaux produits exploite les données pour améliorer la qualité et la rentabilité et réduire les délais de mise sur le marché et les coûts

Collaboration de la chaîne d'approvisionnement dans la conception, la construction, la maintenance et la mise hors service des actifs critiques

Machinerie industrielle et équipement lourd

Intégration de la planification des processus de fabrication avec la conception et l'ingénierie pour la complexité des machines d'aujourd'hui

Visibilité, conformité et responsabilité pour les secteurs de l'assurance et de la finance

L'innovation dans la construction navale pour réduire durablement le coût de développement des futures flottes

Siemens PLM Software, un leader des logiciels de médias et de télécommunications, fournit des solutions numériques pour une technologie de pointe prenant en charge des produits complexes dans un marché en évolution rapide.

Dispositifs médicaux et produits pharmaceutiques

« Innovation produit personnalisée » grâce à la numérisation pour répondre aux demandes du marché et réduire les coûts

Mise sur le marché plus rapide, moins d'erreurs pour le développement de logiciels

Supprimez les barrières et grandissez tout en maintenant vos résultats. Nous démocratisons les jumeaux numériques les plus robustes pour vos petites et moyennes entreprises.


484 réflexions sur &ldquoWorkspace Environment Management (WEM) 2106&rdquo

J'ai un problème avec le nettoyage des profils wem. Il semble que les profils aient des chemins trop longs et que l'outil de nettoyage échoue avec “erreur lors de l'analyse des profils !”. Si je scanne un seul profil et supprime les fichiers avec les chemins les plus longs, tout fonctionne bien. Existe-t-il une solution de contournement pour cela? Nous utilisons 1912 ltsr cu2.

Sakari, je vais intervenir ici parce que j'ai souvent rencontré cela. Google Chrome est connu pour ces arborescences de sous-dossiers très profondes pour ses données (avec de longues chaînes de caractères aléatoires pour un seul nom de dossier). Je pense que la source du problème est le mappage du lecteur et le contexte de l'application. Si le profil de l'utilisateur se trouve sur un lecteur réseau tel que y :, mappé sur servernamesomethingUPM_Profiles lorsqu'une autre application (comme WEM) essaie d'accéder directement à ces dossiers par le chemin UNC, la longueur est allongée de 40 ou plus personnages. Je ne sais pas comment le résoudre, mais j'ai pensé qu'il serait utile de savoir comment ces chemins (qui sont trop longs pour exister) ont été créés.

Nous avons mis à niveau vers WEM 2012 et le dossier suivant
“C:Program Files (x86)NorskaleNorskale Infrastructure ServicesDBSync” n'existe plus. Avez-vous une idée si c'est un comportement normal ?

Je suppose qu'ils ont supprimé ce dossier lorsqu'ils ont supprimé l'ancienne technologie de synchronisation du cache de l'agent.

Hé Carl, avez-vous vu des problèmes où vous désactivez l'écran de démarrage WEM mais cela ne fonctionne pas, il affiche toujours l'écran de démarrage lors de la connexion ?


Paramètres requis

Installations

Utilisez ce paramètre pour spécifier un ou plusieurs emplacements qui servent d'installations. Ce service identifie la ou les meilleures installations pour desservir les points de demande.

  • url — Spécifiez une requête de requête REST à n'importe quelle entité, carte ou service de géotraitement ArcGIS Server qui renvoie un jeu d'entités JSON. Cette propriété est facultative. Cependant, les fonctionnalités ou l'url doivent être spécifiés.
  • features — Spécifiez un tableau de fonctionnalités. Cette propriété est facultative. Cependant, la propriété features ou url doit être spécifiée.

    géométrie —Spécifiez la géométrie du point d'entrée contenant les propriétés x et y ainsi qu'une propriété spatialReference. Si la propriété spatialReference est définie pour l'ensemble du JSON, il n'est pas nécessaire de définir cette propriété pour chaque géométrie. Cela réduit la taille du JSON d'entrée si l'entrée a beaucoup de fonctionnalités et améliore les performances. Cette propriété n'est pas requise si les coordonnées se trouvent dans la même référence spatiale que votre jeu de données réseau. Si les coordonnées se trouvent dans une référence spatiale différente, vous devez spécifier l'ID connu de la référence spatiale (WKID). Voir le système de coordonnées géographiques et le système de coordonnées projetées pour rechercher les valeurs WKID.

En tant que meilleure pratique, il est recommandé de spécifier explicitement la spatialReference , et de la spécifier pour l'ensemble du JSON au lieu de chaque géométrie individuelle.

Attributs pour les installations

Lors de la définition des installations, vous pouvez définir des propriétés pour chacune, telles que son nom ou son type, à l'aide des attributs suivants :

Le nom de l'établissement. Le nom est inclus dans le nom des lignes d'allocation de sortie si l'installation fait partie de la solution.

  • 0 (candidat) : une installation qui peut faire partie de la solution.
  • 1 (Obligatoire) : une installation qui doit faire partie de la solution.
  • 2 (concurrent) : une installation concurrente qui supprime potentiellement la demande de vos installations. Les installations des concurrents sont spécifiques aux types de problèmes de maximisation de la part de marché et de la part de marché cible, elles sont ignorées dans les autres types de problèmes.

La pondération relative de l'installation, qui est utilisée pour évaluer l'attractivité, la désirabilité ou le biais d'une installation par rapport à une autre.

Par exemple, une valeur de 2,0 peut capturer la préférence des clients qui préfèrent, dans un rapport de 2 à 1, faire leurs achats dans un établissement plutôt que dans un autre. Les facteurs susceptibles d'affecter le poids des installations comprennent la superficie en pieds carrés, le quartier et l'âge du bâtiment. Les valeurs de pondération autres que un ne sont honorées que par les types de problèmes Maximiser la part de marché et cibler la part de marché, elles sont ignorées dans les autres types de problème.

Valeur d'impédance à laquelle arrêter la recherche de points de demande d'une ressource donnée. Le point de demande ne peut pas être alloué à une ressource qui est au-delà de la valeur indiquée ici.

Cet attribut vous permet de spécifier une valeur de coupure différente pour chaque point de demande. Par exemple, vous constaterez peut-être que les habitants des zones rurales sont prêts à parcourir jusqu'à 10 miles pour atteindre une installation, tandis que les citadins ne sont prêts à parcourir que jusqu'à 2 miles. Vous pouvez modéliser ce comportement en définissant la valeur de coupure pour tous les points de demande qui se trouvent dans les zones rurales sur 10 et en définissant la valeur de coupure des points de demande dans les zones urbaines sur 2.

Le champ Capacité est spécifique au type de problème de couverture maximale. Les autres types de problème ignorent ce champ.

La capacité spécifie la quantité de demande pondérée que l'installation est capable de fournir. La demande excédentaire ne sera pas allouée à une installation même si cette demande se situe dans la limite de mesure par défaut de l'installation.

Toute valeur affectée au champ Capacité remplace le paramètre Capacité par défaut ( Default_Capacity en Python) pour l'installation donnée.

Spécifiez la direction dans laquelle un véhicule peut arriver et partir de l'installation.

L'un des nombres entiers répertoriés dans la colonne Valeur codée du tableau suivant doit être spécifié comme valeur de cet attribut. Les valeurs de la colonne Paramètre sont les noms descriptifs des valeurs d'attribut CurbApproach que vous avez peut-être vues lors de l'utilisation du logiciel d'extension ArcGIS Network Analyst.

Le véhicule peut s'approcher et quitter l'installation dans les deux sens, donc un demi-tour est autorisé à l'installation. Ce réglage peut être choisi s'il est possible et souhaitable que votre véhicule fasse demi-tour dans l'installation. Cette décision peut dépendre de la largeur de la route et de la quantité de trafic ou si l'installation dispose d'un parking où les véhicules peuvent s'arrêter et faire demi-tour.

Toutes les combinaisons d'arrivée et de départ sont autorisées avec l'approche de trottoir de chaque côté du véhicule.

Lorsque le véhicule s'approche et quitte l'installation, l'installation doit se trouver sur le côté droit du véhicule. Un demi-tour est interdit. Ceci est généralement utilisé pour les véhicules tels que les bus qui doivent arriver avec l'arrêt de bus sur le côté droit.

La combinaison d'arrivée et de départ autorisée pour l'approche du trottoir du côté droit du véhicule est affichée.

Lorsque le véhicule s'approche et quitte l'installation, l'installation doit être sur le côté gauche du véhicule. Un demi-tour est interdit. Ceci est généralement utilisé pour les véhicules tels que les bus qui doivent arriver avec l'arrêt de bus sur le côté gauche.

La combinaison d'arrivée et de départ autorisée pour l'approche du trottoir du côté gauche du véhicule est affichée.

Lorsque le véhicule s'approche de l'installation, l'installation peut être de chaque côté du véhicule cependant, lorsqu'il part, le véhicule doit continuer dans la même direction dans laquelle il est arrivé. Un demi-tour est interdit.

Les combinaisons d'arrivée et de départ autorisées pour l'approche en bordure sans demi-tour sont affichées.

L'attribut CurbApproach est conçu pour fonctionner avec les deux types de normes de conduite nationales : circulation à droite (États-Unis) et circulation à gauche (Royaume-Uni). Tout d'abord, considérons un incident sur le côté gauche d'un véhicule. Il est toujours du côté gauche, que le véhicule se déplace sur la moitié gauche ou droite de la route. Ce qui peut changer avec les normes de conduite nationales, c'est votre décision d'aborder un incident dans l'une des deux directions, c'est-à-dire qu'il se retrouve du côté droit ou gauche du véhicule. Par exemple, si vous souhaitez arriver à un incident et ne pas avoir de voie de circulation entre le véhicule et l'incident, choisissez 1 (Côté droit du véhicule) aux États-Unis et 2 (Côté gauche du véhicule) au Royaume-Uni.

Avec la circulation à droite, l'approche du trottoir qui laisse le véhicule le plus proche de l'installation est le côté droit du véhicule. Avec une circulation à gauche, l'approche du trottoir qui laisse le véhicule le plus proche de l'installation est le côté gauche du véhicule.

La direction dans laquelle un point se déplace. Les unités sont des degrés et sont mesurées dans le sens des aiguilles d'une montre à partir du nord géographique. Ce champ est utilisé en conjonction avec le champ BearingTol.

Les données de relèvement sont généralement envoyées automatiquement à partir d'un appareil mobile équipé d'un récepteur GPS. Essayez d'inclure des données de relèvement si vous chargez un emplacement d'entrée qui se déplace, comme un piéton ou un véhicule.

L'utilisation de ce champ a tendance à empêcher l'ajout d'emplacements aux mauvais bords, ce qui peut se produire lorsqu'un véhicule se trouve à proximité d'une intersection ou d'un viaduc, par exemple. Le relèvement aide également l'outil à déterminer de quel côté de la rue se trouve le point.

La valeur de tolérance de relèvement crée une plage de valeurs de relèvement acceptables lors de la localisation de points mobiles sur une arête à l'aide du champ Relèvement. Si la valeur du champ Relèvement se situe dans la plage des valeurs acceptables générées à partir de la tolérance de relèvement sur une arête, le point peut y être ajouté en tant qu'emplacement de réseau, sinon, le point le plus proche sur l'arête la plus proche est évalué.

Les unités sont en degrés et la valeur par défaut est 30. Les valeurs doivent être supérieures à 0 et inférieures à 180. Une valeur de 30 signifie que lorsque Network Analyst tente d'ajouter un emplacement de réseau sur une arête, une plage de valeurs de relèvement acceptable est généré 15 degrés de chaque côté du bord (gauche et droite) et dans les deux directions numérisées du bord.

Ce champ n'est utilisé dans le processus de résolution que si les champs Bearing et BearingTol ont également des valeurs. Cependant, la saisie d'une valeur de champ NavLatency est facultative, même lorsque des valeurs sont présentes dans Bearing et BearingTol . NavLatency indique le coût attendu entre le moment où les informations GPS sont envoyées d'un véhicule en mouvement à un serveur et le moment où l'itinéraire traité est reçu par l'appareil de navigation du véhicule.

Les unités de NavLatency sont les mêmes que les unités de l'attribut d'impédance.

Exemples de syntaxe pour les installations

Syntaxe pour spécifier les installations à l'aide d'une structure JSON pour les fonctionnalités

Syntaxe pour spécifier des installations à l'aide d'une URL renvoyant une réponse JSON

Exemples d'installations

Exemple 1 : Spécification d'installations dans la même référence spatiale que votre jeu de données réseau à l'aide d'une structure JSON. L'exemple montre également comment spécifier certains attributs pour les incidents.

Exemple 2 : Spécification d'installations dans la référence spatiale Web Mercator à l'aide d'une structure JSON

Exemple 3 : Spécification d'installations à l'aide d'une URL

L'URL effectue une requête pour quelques entités à partir d'un service de carte. Une URL interrogeant les fonctionnalités d'un service d'entités peut également être spécifiée.

Points_demande

Utilisez ce paramètre pour spécifier un ou plusieurs points de demande. Le service identifie les meilleures installations basées en grande partie sur la façon dont les installations desservent les points de demande spécifiés.

  • url — Spécifiez une requête de requête REST à n'importe quelle entité, carte ou service de géotraitement ArcGIS Server qui renvoie un jeu d'entités JSON. Cette propriété est facultative. Cependant, les fonctionnalités ou l'url doivent être spécifiés.
  • features — Spécifiez un tableau de fonctionnalités. Cette propriété est facultative. Cependant, la propriété features ou url doit être spécifiée.

    géométrie —Spécifiez la géométrie du point d'entrée contenant les propriétés x et y ainsi qu'une propriété spatialReference. Si la propriété spatialReference est définie pour l'ensemble du JSON, il n'est pas nécessaire de définir cette propriété pour chaque géométrie. Cela réduit la taille du JSON d'entrée si l'entrée a beaucoup de fonctionnalités et améliore les performances. Cette propriété n'est pas requise si les coordonnées se trouvent dans la même référence spatiale que votre jeu de données réseau. Si les coordonnées se trouvent dans une référence spatiale différente, vous devez spécifier l'ID connu de la référence spatiale (WKID). Voir le système de coordonnées géographiques et le système de coordonnées projetées pour rechercher les valeurs WKID.

En tant que meilleure pratique, il est recommandé de spécifier explicitement la spatialReference , et de la spécifier pour l'ensemble du JSON au lieu de chaque géométrie individuelle.

Attributs pour demand_points

Lorsque vous spécifiez les points de demande, vous pouvez définir des propriétés pour chacun, telles que son nom ou son poids, à l'aide des attributs suivants :

Le nom du point de demande. Le nom est inclus dans le nom de la ou des lignes d'allocation de sortie si le point de demande fait partie de la solution.

Nom du groupe auquel appartient le point de demande. Ce champ est ignoré pour les types de problèmes Maximiser la couverture capacitaire, Part de marché cible et Maximiser la part de marché.

Si les points de demande partagent un nom de groupe, le solveur affecte tous les membres du groupe à la même ressource. (Si des contraintes, telles qu'une distance de coupure, empêchent l'un des points de demande du groupe d'atteindre la même ressource, aucun des points de demande n'est alloué.)

La pondération relative du point de demande. Une valeur de 2,0 signifie que le point de demande est deux fois plus important qu'un point avec un poids de 1,0. Si les points de demande représentent des ménages, par exemple, le poids peut indiquer le nombre de personnes dans chaque ménage.

Valeur d'impédance à laquelle arrêter la recherche de points de demande d'une ressource donnée. Le point de demande ne peut pas être alloué à une ressource qui est au-delà de la valeur indiquée ici.

Cet attribut vous permet de spécifier une valeur limite pour chaque point de demande. Par exemple, vous constaterez peut-être que les habitants des zones rurales sont prêts à parcourir jusqu'à 10 miles pour atteindre une installation, tandis que ceux des zones urbaines ne sont prêts à parcourir que jusqu'à 2 miles. Vous pouvez modéliser ce comportement en définissant la valeur de coupure pour tous les points de demande qui se trouvent dans les zones rurales sur 10 et en définissant la valeur de coupure des points de demande dans les zones urbaines sur 2.

Les unités de cette valeur d'attribut sont spécifiées par le paramètre measure_units.

Une valeur pour cet attribut remplace la valeur par défaut définie pour l'analyse à l'aide du paramètre default_measurement_cutoff.La valeur par défaut est Null , ce qui entraîne l'utilisation de la valeur par défaut définie par le paramètre default_measurement_cutoff pour tous les points de demande.

Remplacez la valeur par défaut définie pour l'analyse par le paramètre measure_transformation_model.

Remplacez la valeur par défaut définie pour l'analyse par le paramètre measure_transformation_model.

Spécifiez la direction dans laquelle un véhicule peut arriver ou partir du point de demande. L'un des nombres entiers répertoriés dans la colonne Valeur codée du tableau suivant doit être spécifié comme valeur de cet attribut. Les valeurs de la colonne Paramètre sont les noms descriptifs des valeurs d'attribut CurbApproach que vous avez peut-être vues lors de l'utilisation du logiciel d'extension ArcGIS Network Analyst.

Le véhicule peut approcher et quitter le point de demande dans les deux sens.

Toutes les combinaisons d'arrivée et de départ sont autorisées avec l'approche de trottoir de chaque côté du véhicule.

Lorsque le véhicule s'approche ou quitte le point de demande, le point de demande doit se trouver sur le côté droit du véhicule. Ceci est généralement utilisé pour les véhicules tels que les bus qui doivent arriver avec l'arrêt de bus sur le côté droit.

La combinaison d'arrivée et de départ autorisée pour l'approche du trottoir du côté droit du véhicule est affichée.

Lorsque le véhicule s'approche ou quitte le point de demande, le point de demande doit se trouver sur le côté gauche du véhicule. Ceci est généralement utilisé pour les véhicules tels que les bus qui doivent arriver avec l'arrêt de bus sur le côté gauche.

La combinaison d'arrivée et de départ autorisée pour l'approche du trottoir du côté gauche du véhicule est affichée.

Lorsque le véhicule s'approche du point de demande, le point de demande peut être de chaque côté du véhicule cependant, lorsqu'il part, le véhicule doit continuer dans la même direction dans laquelle il est arrivé. Un demi-tour est interdit.

Les combinaisons d'arrivée et de départ autorisées pour l'approche en bordure sans demi-tour sont affichées.

L'attribut CurbApproach est conçu pour fonctionner avec les deux types de normes de conduite nationales : circulation à droite (États-Unis) et circulation à gauche (Royaume-Uni). Tout d'abord, considérons un point de demande sur le côté gauche d'un véhicule. Il est toujours du côté gauche, que le véhicule se déplace sur la moitié gauche ou droite de la route. Ce qui peut changer avec les normes de conduite nationales, c'est votre décision d'approcher un point de demande dans l'une des deux directions, c'est-à-dire qu'il se retrouve du côté droit ou gauche du véhicule. Par exemple, si vous souhaitez arriver à un point de demande et ne pas avoir de voie de circulation entre le véhicule et le point de demande, choisissez 1 (Côté droit du véhicule) aux États-Unis et 2 (Côté gauche du véhicule) aux États-Unis. Royaume.

Avec la circulation à droite, l'approche du trottoir qui laisse le véhicule le plus proche du point de demande est le côté droit du véhicule. Avec la circulation à gauche, l'approche du trottoir qui laisse le véhicule le plus proche du point de demande est le côté gauche du véhicule.

La direction dans laquelle un point se déplace. Les unités sont des degrés et sont mesurées dans le sens des aiguilles d'une montre à partir du nord géographique. Ce champ est utilisé en conjonction avec le champ BearingTol.

Les données de relèvement sont généralement envoyées automatiquement à partir d'un appareil mobile équipé d'un récepteur GPS. Essayez d'inclure des données de relèvement si vous chargez un emplacement d'entrée qui se déplace, comme un piéton ou un véhicule.

L'utilisation de ce champ a tendance à empêcher l'ajout d'emplacements aux mauvais bords, ce qui peut se produire lorsqu'un véhicule se trouve à proximité d'une intersection ou d'un viaduc, par exemple. Le relèvement aide également l'outil à déterminer de quel côté de la rue se trouve le point.

La valeur de tolérance de relèvement crée une plage de valeurs de relèvement acceptables lors de la localisation de points mobiles sur une arête à l'aide du champ Relèvement. Si la valeur du champ Relèvement se situe dans la plage des valeurs acceptables générées à partir de la tolérance de relèvement sur une arête, le point peut y être ajouté en tant qu'emplacement de réseau, sinon, le point le plus proche sur l'arête la plus proche est évalué.

Les unités sont en degrés et la valeur par défaut est 30. Les valeurs doivent être supérieures à 0 et inférieures à 180. Une valeur de 30 signifie que lorsque Network Analyst tente d'ajouter un emplacement de réseau sur une arête, une plage de valeurs de relèvement acceptable est généré 15 degrés de chaque côté du bord (gauche et droite) et dans les deux directions numérisées du bord.

Ce champ n'est utilisé dans le processus de résolution que si les champs Bearing et BearingTol ont également des valeurs. Cependant, la saisie d'une valeur de champ NavLatency est facultative, même lorsque des valeurs sont présentes dans Bearing et BearingTol . NavLatency indique le coût attendu entre le moment où les informations GPS sont envoyées d'un véhicule en mouvement à un serveur et le moment où l'itinéraire traité est reçu par l'appareil de navigation du véhicule.

Les unités de NavLatency sont les mêmes que les unités de l'attribut d'impédance.

Exemples de syntaxe pour demand_points

Syntaxe pour spécifier des points de demande à l'aide d'une structure JSON pour les fonctionnalités

Syntaxe pour spécifier des points de demande à l'aide d'une URL renvoyant une réponse JSON

Exemples de demand_points

Exemple 1 : Spécification de points de demande dans la référence spatiale du jeu de données réseau à l'aide d'une structure JSON. L'exemple montre également comment spécifier certains attributs pour les points de demande.

Exemple 2 : Spécification de points de demande dans la référence spatiale Web Mercator à l'aide d'une structure JSON

Exemple 3 : Spécification de points de demande à l'aide d'une URL

L'URL effectue une requête pour quelques entités à partir d'un service de carte. Une URL interrogeant les fonctionnalités d'un service d'entités peut également être spécifiée.

Jeton

Utilisez ce paramètre pour spécifier un jeton qui fournit l'identité d'un utilisateur disposant des autorisations pour accéder au service. La page des services d'accès fournit plus d'informations sur la manière dont un tel jeton d'accès peut être obtenu.

Exemple (remplacez <yourToken> par un jeton valide) :

Utilisez ce paramètre pour spécifier le format de réponse. Le paramètre peut avoir html , json ou pjson comme arguments, par exemple, f=json . La valeur pjson est utilisée pour imprimer la réponse JSON dans un joli format.


Résoudre les problèmes d'installations et de désinstallations bloquées de .NET Framework

Lorsque vous exécutez le programme d'installation Web ou hors ligne pour le .NET Framework 4.5 ou les versions ultérieures, vous pouvez rencontrer un problème qui empêche ou bloque l'installation du .NET Framework. Le tableau suivant répertorie les problèmes de blocage possibles et fournit des liens vers des informations de dépannage.

Sous Windows 8 et versions ultérieures, .NET Framework est un composant du système d'exploitation et ne peut pas être désinstallé indépendamment. Les mises à jour du .NET Framework apparaissent dans le Mises à jour installées onglet du Panneau de configuration Programmes et fonctionnalités application. Pour les systèmes d'exploitation sur lesquels le .NET Framework n'est pas préinstallé, le .NET Framework apparaît dans le Désinstaller ou modifier un programme onglet (ou le Ajouter/Supprimer des programmes onglet) de la Programme et fonctionnalités application dans le Panneau de configuration. Pour plus d'informations sur les versions de Windows sur lesquelles .NET Framework est préinstallé, consultez Configuration requise.

Étant donné que les versions 4.x du .NET Framework sont des mises à jour sur place, vous ne pouvez pas installer une version antérieure du .NET Framework 4.x sur un système sur lequel une version ultérieure est déjà installée. Par exemple, sur un système avec Windows 10 Fall Creators Update, vous ne pouvez pas installer .NET Framework 4.6.2, car .NET Framework 4.7.1 est préinstallé avec le système d'exploitation.

Vous pouvez déterminer quelles versions du .NET Framework sont installées sur un système. Consultez Comment : déterminer quelles versions de .NET Framework sont installées pour plus d'informations.

Dans ce tableau, 4.5.x fait référence au .NET Framework 4.5 et à ses versions intermédiaires, 4.5.1 et 4.5.2, 4.6.x fait référence au .NET Framework 4.6 et à ses versions intermédiaires, 4.6.1 et 4.6.2. , 4.7.x fait référence au .NET Framework 4.7 et à ses versions intermédiaires, 4.7.1 et 4.7.2, et 4.8 fait référence à .NET Framework 4.8.

Problèmes de compatibilité des programmes

L'installation de .NET Framework 4.5 ou de ses versions intermédiaires échoue avec un code d'erreur 1603 ou des blocs lorsqu'il s'exécute en mode de compatibilité des programmes Windows. le Assistante Compatibilité Programme indique que le .NET Framework n'a peut-être pas été installé correctement et vous invite à le réinstaller en utilisant le paramètre recommandé (mode de compatibilité des programmes). Le mode Compatibilité des programmes peut également avoir été défini par l'Assistant Compatibilité des programmes lors de tentatives antérieures ayant échoué ou annulées pour exécuter le programme d'installation du .NET Framework.

Le programme d'installation de .NET Framework ne peut pas s'exécuter en mode Compatibilité des programmes. Pour résoudre ce problème de blocage, vous devez utiliser l'Éditeur du Registre pour vous assurer que le paramètre de mode de compatibilité n'est pas activé à l'échelle du système :

Choisir la Démarrer bouton, puis choisissez Cours.

Dans le Cours boîte de dialogue, tapez "regedit", puis choisissez d'accord.

Dans l'Éditeur du Registre, accédez aux sous-clés suivantes :

HKEY_CURRENT_USERSOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsCompatibility AssistantPersisted

Dans la colonne Nom, recherchez les noms de téléchargement .NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 ou 4.7.2, selon la version que vous utilisez. l'installation et supprimez ces entrées. Pour les noms de téléchargement, consultez l'article Installer le .NET Framework pour les développeurs.

Réexécutez le programme d'installation de .NET Framework pour la version 4.5, 4.5.1, 4.5.2 ou 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 ou 4.7.2.


Voir la vidéo: ArcmapSpy. AddIn for ArcMap