Suite

Relâcher les curseurs à l'aide d'ArcObjects ?

Relâcher les curseurs à l'aide d'ArcObjects ?


Je travaille avec ArcObjects, en particulier l'interface ICursor. Je crée un curseur et parcourt le jeu de résultats d'une requête. Mon problème/préoccupation est de savoir comment fermer, supprimer ou relâcher le curseur une fois que j'ai terminé de parcourir le jeu de résultats de la requête. La requête est transmise à un espace de travail Sql (via l'interface ISqlWorkspace). Le code est le suivant

ISqlWorkspace pSQL_WS = myWorkspace as ISqlWorkspace ; ICursor pCursor = pSQL_WS.OpenQueryCursor(strQuery); chaîne CurseurRésultats = ""; IRow pRow; while ((pRow = pCursor.NextRow()) != null) { int fc = pRow.Fields.FieldCount; for (int x = 0; x < fc; x++) { cursorResults += pRow.get_Value(x).ToString() + " "; } cursorResults += Environment.NewLine; } _textElement.Text = Convert.ToString(cursorResults);

Je prends en fait les résultats de la requête et les place dans un élément de texte. Je pense qu'après la dernière ligne, je voudrais fermer/supprimer/relâcher mon curseur, mais je ne sais tout simplement pas comment procéder.


Pour libérer un curseur, vous devez utiliser ReleaseComObject, consultez cet article de l'aide Esri (9.2) qui est toujours valide.

Modifié dans votre code :

ISqlWorkspace pSQL_WS = myWorkspace as ISqlWorkspace ; ICursor pCursor = pSQL_WS.OpenQueryCursor(strQuery); chaîne CurseurRésultats = ""; IRow pRow; while ((pRow = pCursor.NextRow()) != null) { int fc = pRow.Fields.FieldCount; for (int x = 0; x < fc; x++) { cursorResults += pRow.get_Value(x).ToString() + " "; } cursorResults += Environment.NewLine; } _textElement.Text = Convert.ToString(cursorResults); //libérer les verrous de ligne et de curseur System.Runtime.InteropServices.Marshal.ReleaseComObject(pRow); System.Runtime.InteropServices.Marshal.ReleaseComObject(pCursor);

La libération de ces verrous est importante, sinon l'espace de travail/la classe d'entités est verrouillé pour la durée de vie de l'outil (et si dans ArcCatalog ou ArcMap persiste jusqu'à la fermeture de l'application) et empêchera de supprimer/renommer/ajouter des champs…

Pour tester si une classe d'entités est déjà verrouillée, utilisez ISchemaLock.GetCurrentSchemaLocks qui doit être testé avant d'ajouter des champs ou de tenter de renommer/supprimer la classe d'entités.


Réponse lente lors des requêtes spatiales.

J'utilise Visual Studio 2010 Professional - Version 10.0.40219.1 SP1Rel. Microsoft .NET Framework - Version 4.5.50938 SP1Rel. ArcGIS 10.1 SP1 for Desktop - Build 3143.

Je fais une requête spatiale pour récupérer tous les points d'adresse dans une limite de code postal, donc tous les points dans un polygone.

Si la couche de points et la couche de polygones sont chargées dans la session ArcMap et que le résultat final est de 15 000 points dans le polygone, cela peut durer 10 à 15 minutes, si je le fais sur le serveur, il manque de mémoire.

Je crois que le problème réside dans la façon dont Visual Studio est configuré, je ne l'ai pas configuré, il a juste été installé sur ma machine. En cherchant une résolution que j'ai trouvée dans les paramètres avancés du compilateur pour changer le processeur cible, du paramètre AnyCPU sur lequel il a été défini, en x86. Après cela, il fonctionnait sur le serveur (très lent) et manquait parfois de mémoire, pas génial, mais une amélioration.

Il semble également que je boucle les codes postaux, cela devient de plus en plus lent. Si je ferme et redémarre la session, la vitesse (ce qu'il y en a) reprend puis commence à ralentir.

J'ai toujours fait de petites requêtes spatiales, un point ou des points dans un quartier, mais pas cette grande requête. Oui, je relâche le curseur après chaque requête spatiale.

Je vais poster le code que j'utilise, merci d'avoir regardé ça.

Dans le code, je trouve tous les points dans la limite du code postal et je vérifie que le code postal sur le point correspond à la limite du code postal dans lequel il se trouve.


Relâcher les curseurs à l'aide d'ArcObjects ? - Systèmes d'information géographique

Classe COM 'UniqueValueRenderer'. Généré le 19/03/2015 à 13:20:41 à partir de 'C:ArcGISCOMesriCarto.olb'

Description ' Un moteur de rendu de valeurs uniques où des symboles sont attribués aux entités en fonction de valeurs d'attribut uniques. ' Options du générateur : PromptForTypeLibraries = False ClashPrefix = esri_ LowerCaseMemberNames = True IDispatchOnly = False RetryOnReject = False AwtForOcxs = True ArraysAsObjects = False DontRenameSameMethods = False ReuseJ

Résumé du champ
statique longue SerialVersionUID
Champs hérités de l'interface com.esri.arcgis.carto.IUniqueValueRenderer
IID, IIDc3346d2a_b2bc_11d1_8817_080009ec732a, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.IUniqueValueRenderer2
IID, IID78b2e6fc_a027_4b63_a52d_3ad0ba2f2e81, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.IFeatureRendererUpdate
IID, IID735c4d99_e28d_4ad4_b5b9_a12c1d8319fc, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ILevelRenderer
IID, IIDdc3d8097_c1ed_11d2_9f21_00c04f6bc709, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IPersistStream
IID, IID00000109_0000_0000_c000_000000000046, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IPersist
IID0000010c_0000_0000_c000_000000000046
Champs hérités de l'interface com.esri.arcgis.carto.IRendererClasses
IID, IID3f25cc56_cc66_4930_a5fd_bc981601cea6, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.IRotationRenderer
IID, IID2f2047a6_42bd_11d2_aafd_00c04fa334b3, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.IRotationRenderer2
IID, IIDd85e5b0c_68b3_48c8_b8d2_087806273b47, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ISizeRenderer
IID, IID5ba3418a_4ba5_431a_b879_f2539c7be5ff, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ITransparencyRenderer
IID, IIDfb20665d_db1c_11d2_9f2e_00c04f6bc709, xxDummy
Champs hérités de l'interface com.esri.arcgis.display.IDisplayAdmin
IID, IID12e361f0_1907_11d3_80c7_0080c79f0371, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ILookupSymbol
IID, IID736a377d_a1eb_4ce4_84b9_90f9588374c2, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IXMLSerialize
IID, IIDc8545045_6615_48e3_af27_52a0e5fc35e2, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IXMLVersionSupport
IID, IID72ca65b9_13de_48b7_8443_717b69b72a99, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.IExportSupport
IID, IIDf6448010_3cc8_435e_b042_540e9a328f3b, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ILookupLegendClass
IID, IIDbdb4bf86_8691_4f1c_b009_42e39035f40e, xxDummy
Résumé du constructeur
UniqueValueRenderer ()
Construit un UniqueValueRenderer à l'aide d'ArcGIS Engine.
UniqueValueRenderer (java.lang.Object obj)
Obsolète. À partir d'ArcGIS 9.2, remplacé par des transtypages Java normaux.
UniqueValueRenderer theUniqueValueRenderer = (UniqueValueRenderer) obj
Résumé de la méthode
annuler addReferenceValue (valeur java.lang.String, java.lang.String refValue)
Ajoute une valeur au rendu à regrouper avec refValue, qui a déjà été ajoutée au rendu.
annuler addValue (valeur java.lang.String, en-tête java.lang.String, symbole ISymbol)
Ajoute une valeur et le symbole correspondant à la liste.
booléen canRender (IFeatureClass featClass, IDisplay display)
Indique si la classe d'entités spécifiée peut être rendue sur l'affichage donné.
annuler désérialiser (données IXMLSerializeData)
Désérialise un objet à partir de XML.
annuler dessiner (curseur IFeatureCursor, int drawPhase, affichage IDisplay, ITrackCancel trackCancel)
Dessine des entités à partir du curseur spécifié sur l'affichage donné.
booléen est égal à (java.lang.Object o)
Comparez cet objet avec un autre
java.lang.String esri_getClass (index int)
Nom du cours.
entier getClassCount ()
Nombre de cours.
annuler getClassID (GUID[] pClassID)
getClassID
java.lang.String statique getClsid ()
getClsid.
IColorRamp getColorRamp ()
Objet de rampe de couleur.
java.lang.String getColorScheme ()
Schéma de couleurs (propriété de l'interface utilisateur uniquement).
java.lang.String getDefaultLabel ()
Étiquette utilisée pour les valeurs non spécifiées.
Isymbole getDefaultSymbol ()
Symbole utilisé pour dessiner des valeurs non spécifiées (peut être NULL).
java.lang.String getDescription (valeur java.lang.String)
Description de l'étiquette spécifiée.
java.lang.String getField (index int)
Champ à l'index spécifié qui est utilisé pour catégoriser les entités.
entier getFieldCount ()
Nombre de champs utilisés par le moteur de rendu (0-3).
java.lang.String getFieldDelimiter ()
Délimiteur utilisé pour séparer les valeurs des champs.
java.lang.String getHeading (valeur java.lang.String)
En-tête qui contient la valeur spécifiée.
com.esri.arcgis.interop.Dispatch getJintegraDispatch ()
Obsolète. Usage interne uniquement.
java.lang.String getLabel (valeur java.lang.String)
Libellé de la valeur spécifiée.
ILegendGroup getLegendGroup (index int)
Groupe de légende à l'index spécifié.
entier getLegendGroupCount ()
Nombre de groupes de légende contenus par l'objet.
IlegendItem getLegendItem ()
Optionnel.
java.lang.Object getLevelArray ()
Tableau qui contient tous les niveaux utilisés par les symboles (les symboles sans niveau obtiennent un niveau de 0).
java.lang.String getLookupStyleset ()
Style utilisé pour la correspondance (propriété de l'interface utilisateur uniquement).
java.lang.String getMinNamespaceSupported ()
L'espace de noms minimum vers lequel la classe peut sérialiser (par exemple l'espace de noms 90).
java.lang.String getReferenceValue (valeur java.lang.String)
Valeur de référence pour la valeur spécifiée.
java.lang.String getRotationField ()
Champ de rotation.
entier getRotationType ()
Type de rotation.
annuler getSizeMax (_ULARGE_INTEGER[] pcbSize)
obtenirTailleMax
java.lang.String getSizeRendererExpression ()
Obtient l'expression de taille.
entier getSizeRendererFlags ()
Obtient des indicateurs de dimensionnement composés d'enum esriSizeRendererFlags.
annuler getSizeRendererRandomRange (double[] pMinSize, double[] pMaxSize)
Obtient une plage de tailles pour un dimensionnement aléatoire.
Isymbole getSymbol (valeur java.lang.String)
Symbole associé à la valeur spécifiée.
Isymbole getSymbolByFeature (fonctionnalité IFeature)
Symbole utilisé pour dessiner l'entité spécifiée.
annuler getSymbolRotation3DExpressions (java.lang.String[] pExpressionX, java.lang.String[] pExpressionY, java.lang.String[] pExpressionZ)
Obtient des expressions pour la rotation autour de chaque axe.
entier getSymbolRotation3DFlags ()
Obtient des indicateurs de rotation composés d'enum esriSymbolRotation3DFlags.
annuler getSymbolRotation3DFlags2 (int[] pFlagX, int[] pFlagY, int[] pFlagZ)
Obtient un indicateur pour chaque axe.
annuler getSymbolRotation3DRandomRanges (double[] pMinRotationX, double[] pMinRotationY, double[] pMinRotationZ, double[] pMaxRotationX, double[] pMaxRotationY, double[] pMaxRotationZ)
Obtient la plage de rotation pour chaque axe (pour une rotation aléatoire).
entier getSymbolRotation3DRotationTypeZ ()
Obtient le type de rotation (géographique ou arithmétique) autour de l'axe Z (arithmétique codée en dur sur les autres axes).
java.lang.String getTransparencyField ()
Champ de transparence.
java.lang.String getValue (index int)
Valeur à l'index spécifié.
entier getValueCount ()
Nombre de valeurs uniques utilisées pour catégoriser les données.
java.lang.String getWhereClause (index int, table ITable)
OùClause.
entier hashCode ()
le hashcode de cet objet
annuler est sale ()
est sale
booléen isFlipSymboles ()
Indique si les symboles sont inversés.
booléen isRenderPhase (int drawPhase)
Indique si le moteur de rendu utilise la phase de dessin spécifiée.
booléen isReverseUniqueValuesSorting ()
Indique si les valeurs uniques sont inversées.
booléen isSymbolsAreGraduated ()
Indique si les symboles sont gradués.
booléen isUseDefaultSymbol ()
Indique si DefaultSymbol est utilisé pour dessiner des valeurs non spécifiées.
booléen isUsesFilter ()
Indique si l'objet courant est dessiné à l'aide d'un filtre.
annuler charge (IStream pstm)
charge
entier lookupLegendClass (fonctionnalité IFeature, int[] legendGroupIdx)
Renvoie le groupe de légende et les index de classe de légende pour l'entité en entrée.
Isymbole lookupSymbol (booléen firstPass, fonctionnalité IFeature)
Renvoie une référence au symbole du moteur de rendu pour l'entité en entrée.
annuler prepareFilter (IFeatureClass fc, IQueryFilter queryFilter)
Prépare le filtre de requête pour le processus de rendu.
annuler readExternal (java.io.ObjectInput dans)
annuler Libération ()
Libérez un UniqueValueRenderer.
annuler removeAllValues ​​()
Supprime toutes les valeurs du moteur de rendu.
annuler removeValue (valeur java.lang.String)
Supprime une valeur du moteur de rendu.
annuler resetLookupSymbol (symbole ISymbole)
Réinitialise les options temporaires sur le symbole (par ex.
annuler enregistrer (IStream pstm, int fClearDirty)
sauvegarder
annuler sérialiser (données IXMLSerializeData)
Sérialise un objet en XML.
annuler setColorRampByRef (IColorRamp ppColorRamp)
Objet de rampe de couleur.
annuler setColorScheme (java.lang.String name)
Schéma de couleurs (propriété de l'interface utilisateur uniquement).
annuler setCurrentDrawLevel (int rhs1)
Le niveau de dessin actuel (défini sur -1 pour dessiner tous les niveaux).
annuler setDefaultLabel (étiquette java.lang.String)
Étiquette utilisée pour les valeurs non spécifiées.
annuler setDefaultSymbol (symbole ISymbole)
Symbole utilisé pour dessiner des valeurs non spécifiées (peut être NULL).
annuler setDescription (valeur java.lang.String, texte java.lang.String)
Description de l'étiquette spécifiée.
annuler setExclusionSetByRef (IFeatureIDSet rhs1)
Une référence d'objet à un jeu d'exclusions de dessin temporaire.
annuler setExportInfoByRef (IFeatureExportInfoGenerator rhs1)
L'ojet d'aide pour générer les informations d'exportation.
annuler setField (index int, champ java.lang.String)
Champ à l'index spécifié qui est utilisé pour catégoriser les entités.
annuler setFieldCount (int fieldCount)
Nombre de champs utilisés par le moteur de rendu (0-3).
annuler setFieldDelimiter (délimiteur java.lang.String)
Délimiteur utilisé pour séparer les valeurs des champs.
annuler setFieldType (index int, booléen rhs2)
Indique si le champ à l'index spécifié est une chaîne.
annuler setFlipSymbols (booléen croissant)
Indique si les symboles sont inversés.
annuler setHeading (valeur java.lang.String, en-tête java.lang.String)
En-tête qui contient la valeur spécifiée.
annuler setLabel (valeur java.lang.String, étiquette java.lang.String)
Libellé de la valeur spécifiée.
annuler setLookupStyleset (java.lang.String name)
Style utilisé pour la correspondance (propriété de l'interface utilisateur uniquement).
annuler setReverseUniqueValuesSorting (booléen croissant)
Indique si les valeurs uniques sont inversées.
annuler setRotationField (java.lang.String fieldName)
Champ de rotation.
annuler setRotationType (type int)
Type de rotation.
annuler setSizeRendererExpression (java.lang.String pExpression)
Obtient l'expression de taille.
annuler setSizeRendererFlags (int pFlags)
Obtient des indicateurs de dimensionnement composés d'enum esriSizeRendererFlags.
annuler setSizeRendererRandomRange (double minSize, double maxSize)
Définit la plage de tailles pour un dimensionnement aléatoire.
annuler setSymbol (valeur java.lang.String, symbole ISymbol)
Symbole associé à la valeur spécifiée.
annuler setSymbolRotation3DExpressions (java.lang.String expressionX, java.lang.String expressionY, java.lang.String expressionZ)
Définit des expressions pour la rotation autour de chaque axe.
annuler setSymbolRotation3DFlags (int pFlags)
Obtient des indicateurs de rotation composés d'enum esriSymbolRotation3DFlags.
annuler setSymbolRotation3DFlags2 (int flagX, int flagY, int flagZ)
Définit un indicateur pour chaque axe.
annuler setSymbolRotation3DRandomRanges (double minRotationX, double minRotationY, double minRotationZ, double maxRotationX, double maxRotationY, double maxRotationZ)
Définit la plage de rotation pour chaque axe (pour une rotation aléatoire).
annuler setSymbolRotation3DRotationTypeZ (int pType)
Obtient le type de rotation (géographique ou arithmétique) autour de l'axe Z (arithmétique codée en dur sur d'autres axes).
annuler setSymbolsAreGraduated (symboles booléensAreGraduated)
Indique si les symboles sont gradués.
annuler setTransparencyField (java.lang.String fieldName)
Champ de transparence.
annuler setUseDefaultSymbol (indicateur booléen)
Indique si DefaultSymbol est utilisé pour dessiner des valeurs non spécifiées.
annuler setValue (index int, valeur java.lang.String)
Valeur à l'index spécifié.
annuler mise à jour (IFeatureLayer pFeatureLayer)
mettre à jour
annuler writeExternal (sortie java.io.ObjectOutput)
Méthodes héritées de la classe java.lang.Object
cloner, finaliser, getClass, notify, notifyAll, toString, wait, wait, wait

SerialVersionUID

UniqueValueRenderer

Lance : java.io.IOException - s'il y a des problèmes d'interopérabilité java.net.UnknownHostException - s'il y a des problèmes d'interopérabilité

UniqueValueRenderer

Construisez un UniqueValueRenderer à l'aide d'une référence à un tel objet renvoyé par ArcGIS Engine ou Server. C'est sémantiquement équivalent au transtypage de obj en UniqueValueRenderer .

Paramètres : obj - un objet renvoyé par ArcGIS Engine ou Server Throws : java.io.IOException - s'il y a des problèmes d'interopérabilité

Détails de la méthode

GetClsid

Équivaut à

Overrides : est égal à la classe java.lang.Object

Code de hachage

Overrides : hashCode dans la classe java.lang.Object

GetJintegraDispatch

Spécifié par : getJintegraDispatch dans l'interface com.esri.arcgis.interop.RemoteObjRef

Libération

Spécifié par : version dans l'interface com.esri.arcgis.interop.RemoteObjRef

GetField

Spécifié par : getField dans l'interface ILookupLegendClass Spécifié par : getField dans l'interface IUniqueValueRenderer Paramètres : index - L'index (in) Renvoie : Le champ Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetField

Spécifié par : setField dans l'interface IUniqueValueRenderer Paramètres : index - Le champ index (in) - Le champ (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetFieldType

Spécifié par : setFieldType dans l'interface IUniqueValueRenderer Paramètres : index - L'index (in) rhs2 - Le rhs2 (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetFieldDelimiter

Spécifié par : getFieldDelimiter dans l'interface IUniqueValueRenderer Renvoie : Le délimiteur Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetFieldDelimiter

Spécifié par : setFieldDelimiter dans l'interface IUniqueValueRenderer Paramètres : delimiter - Le délimiteur (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité.AutomationException - Si le composant ArcObject lève une exception.

GetFieldCount

Spécifié par : getFieldCount dans l'interface ILookupLegendClass Spécifié par : getFieldCount dans l'interface IUniqueValueRenderer Renvoie : Le fieldCount Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetFieldCount

Spécifié par : setFieldCount dans l'interface IUniqueValueRenderer Paramètres : fieldCount - Le fieldCount (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetDefaultSymbol

Spécifié par : getDefaultSymbol dans l'interface IUniqueValueRenderer Renvoie : Une référence à un com.esri.arcgis.display.ISymbol Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetDefaultSymbole

Spécifié par : setDefaultSymbol dans l'interface IUniqueValueRenderer Paramètres : symbol - Une référence à un com.esri.arcgis.display.ISymbol (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetDefaultLabel

Spécifié par : getDefaultLabel dans l'interface IUniqueValueRenderer Renvoie : L'étiquette Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetDefaultLabel

Spécifié par : setDefaultLabel dans l'interface IUniqueValueRenderer Paramètres : label - Le label (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

IsUseDefaultSymbole

Spécifié par : isUseDefaultSymbol dans l'interface IUniqueValueRenderer Renvoie : Le drapeau lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetUseDefaultSymbole

Spécifié par : setUseDefaultSymbol dans l'interface IUniqueValueRenderer Paramètres : flag - Le flag (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetValueCount

Spécifié par : getValueCount dans l'interface IUniqueValueRenderer Renvoie : Le valueCount Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

ObtenirValeur

Spécifié par : getValue dans l'interface IUniqueValueRenderer Paramètres : index - L'index (in) Renvoie : La valeur Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetValue

Spécifié par : setValue dans l'interface IUniqueValueRenderer Paramètres : index - La valeur d'index (in) - La valeur (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetReferenceValue

Spécifié par : getReferenceValue dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) Renvoie : La refValue Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

AddReferenceValue

Spécifié par : addReferenceValue dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) refValue - La refValue (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetSymbole

Spécifié par : getSymbol dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) Renvoie : Une référence à un com.esri.arcgis.display.ISymbol Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetSymbole

Spécifié par : setSymbol dans l'interface IUniqueValueRenderer Paramètres : value - Le symbole de la valeur (in) - Une référence à un com.esri.arcgis.display.ISymbol (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetLabel

Spécifié par : getLabel dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) Renvoie : L'étiquette Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetLabel

Spécifié par : setLabel dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) label - L'étiquette (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

ObtenirDescription

Spécifié par : getDescription dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) Renvoie : Le texte Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetDescription

Spécifié par : setDescription dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) text - Le texte (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetHeading

Spécifié par : getHeading dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) Renvoie : L'en-tête Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetHeading

Spécifié par : setHeading dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) en-tête - L'en-tête (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

Ajouter de la valeur

Spécifié par : addValue dans l'interface IUniqueValueRenderer Paramètres : value - Le titre de la valeur (in) - Le symbole du titre (in) - Une référence à un com.esri.arcgis.display.ISymbol (in) Lance : java.io.IOException - Si il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SupprimerValeur

Spécifié par : removeValue dans l'interface IUniqueValueRenderer Paramètres : value - La valeur (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

RemoveAllValues

Spécifié par : removeAllValues ​​dans l'interface IUniqueValueRenderer Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetColorScheme

Spécifié par : getColorScheme dans l'interface IUniqueValueRenderer Renvoie : Le nom Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetColorScheme

Spécifié par : setColorScheme dans l'interface IUniqueValueRenderer Paramètres : nom - Le nom (dans) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetLookupStyleset

Spécifié par : getLookupStyleset dans l'interface IUniqueValueRenderer Renvoie : Le nom Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetLookupStyleset

Spécifié par : setLookupStyleset dans l'interface IUniqueValueRenderer Paramètres : nom - Le nom (dans) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetColorRamp

Spécifié par : getColorRamp dans l'interface IUniqueValueRenderer2 Renvoie : Une référence à un com.esri.arcgis.display.IColorRamp Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetColorRampByRef

Spécifié par : setColorRampByRef dans l'interface IUniqueValueRenderer2 Paramètres : ppColorRamp - Une référence à un com.esri.arcgis.display.IColorRamp (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

IsReverseUniqueValuesTri

Spécifié par : isReverseUniqueValuesSorting dans l'interface IUniqueValueRenderer2 Renvoie : Les lancers ascendants : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetReverseUniqueValuesSorting

Spécifié par : setReverseUniqueValuesSorting dans l'interface IUniqueValueRenderer2 Paramètres : ascending - L'ascendant (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

IsFlipSymboles

Spécifié par : isFlipSymbols dans l'interface IUniqueValueRenderer2 Renvoie : Les lancers ascendants : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetFlipSymboles

Spécifié par : setFlipSymbols dans l'interface IUniqueValueRenderer2 Paramètres : ascending - L'ascendant (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

PeutRender

Remarques

Si le moteur de rendu n'est pas applicable à une couche d'entités, il peut renvoyer False en réponse à une méthode CanRender. Par exemple, le rendu à densité de points ne s'applique qu'aux couches d'entités surfaciques et renvoie False en réponse à d'autres couches d'entités.

La disponibilité des produits

Plateformes prises en charge

Spécifié par : canRender dans l'interface IFeatureRenderer Paramètres : featClass - Une référence à un affichage com.esri.arcgis.geodatabase.IFeatureClass (in) - Une référence à un com.esri.arcgis.display.IDisplay (in) Renvoie : Le résultat Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

PréparerFiltre

Remarques

Cette méthode est appelée avant la méthode Draw et donne au moteur de rendu la possibilité d'ajuster le filtre de requête pour incorporer des contraintes supplémentaires. Par exemple, si un champ particulier est requis pour le moteur de rendu, il ajoutera ce champ au filtre pour s'assurer qu'il est accessible pendant la méthode Draw.

La disponibilité des produits

Plateformes prises en charge

Spécifié par : prepareFilter dans l'interface IFeatureRenderer Paramètres : fc - Une référence à un com.esri.arcgis.geodatabase.IFeatureClass (in) queryFilter - Une référence à un com.esri.arcgis.geodatabase.IQueryFilter (in) Lance : java.io .IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

Remarques

Cette méthode est généralement appelée par le framework pour rendre les fonctionnalités sur un affichage. Cela pourrait être en réponse à une actualisation de la carte. Cette méthode parcourt généralement toutes les entités et affiche chaque entité avec un symbole approprié.

Une entité individuelle est généralement dessinée en appelant la méthode Draw sur l'IFeatureDraw de l'entité avec le symbole créé par le moteur de rendu. Cependant, lors de l'écriture d'un moteur de rendu de caractéristiques personnalisé, vous pouvez dessiner tout ce que vous voulez en utilisant un certain nombre de méthodes différentes. Pour en savoir plus, consultez la section sur l'écriture d'un moteur de rendu d'entités personnalisé dans Extension d'ArcObjects.

Pour permettre l'annulation d'un rendu complexe à mi-chemin d'un dessin, le moteur de rendu vérifie généralement l'objet TrackCancel après chaque fonctionnalité ou ensemble de fonctionnalités. Si une action d'annulation s'est produite, le moteur de rendu se fermera.

Il y a trois phases de dessin : sélection, annotation et géographie, et cette méthode peut être appelée par le framework jusqu'à trois fois. A l'exception de la phase de sélection, cette méthode ne sera appelée pour une phase de dessin particulière que si l'appel par le framework à RenderPhase retourne vrai pour cette phase.

Les moteurs de rendu d'entités dessinent généralement uniquement des entités pendant la phase géographique, bien que dans certains cas, les entités soient dessinées lors de la phase d'annotation. Prenons par exemple un cas où des symboles proportionnels sont dessinés pour des entités surfaciques. Le ProportionalSymbolRenderer dessine le symbole de remplissage d'arrière-plan pendant la phase de géographie et le symbole de marqueur de taille proportionnelle pendant la phase d'annotation.

La disponibilité des produits

Plateformes prises en charge

Spécifié par : draw in interface IFeatureRenderer Paramètres : curseur - Une référence à un com.esri.arcgis.geodatabase.IFeatureCursor (in) drawPhase - Un com.esri.arcgis.system.esriDrawPhase constant (in) display - Une référence à un com .esri.arcgis.display.IDisplay (in) trackCancel - Une référence à un com.esri.arcgis.system.ITrackCancel (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetSymbolByFeature

La disponibilité des produits

Spécifié par : getSymbolByFeature dans l'interface IFeatureRenderer Paramètres : feature - Une référence à un com.esri.arcgis.geodatabase.IFeature (in) Renvoie : Une référence à un com.esri.arcgis.display.ISymbol Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

IsRenderPhase

La disponibilité des produits

Spécifié par : isRenderPhase dans l'interface IFeatureRenderer Paramètres : drawPhase - Une constante com.esri.arcgis.system.esriDrawPhase (in) Renvoie : Le résultat Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetExclusionSetByRef

La description

La liste des ID de fonction à exclure du dessin.

Remarques

Certains moteurs de rendu d'entités prennent en charge IDataExclusion, ce qui vous permet de créer une clause where pour exclure des entités.

L'exclusion empêche le dessin des entités. Pour empêcher les entités de s'afficher et d'apparaître dans les tables et dans les résultats de requête, définissez une requête de définition de couche à l'aide de IFeatureLayerDefinition.

La disponibilité des produits

Plateformes prises en charge

Spécifié par : setExclusionSetByRef dans l'interface IFeatureRenderer Paramètres : rhs1 - Une référence à un com.esri.arcgis.carto.IFeatureIDSet (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

Mettre à jour

Spécifié par : mise à jour dans l'interface IFeatureRendererUpdate Paramètres : pFeatureLayer - Une référence à un com.esri.arcgis.carto.IFeatureLayer (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

SetCurrentDrawLevel

Spécifié par : setCurrentDrawLevel dans l'interface ILevelRenderer Paramètres : rhs1 - Le rhs1 (in) Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetLevelArray

Spécifié par : getLevelArray dans l'interface ILevelRenderer Renvoie : Une variante Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetLegendGroupCount

Remarques

Le nombre de groupes de légende est déterminé par l'implémentation du moteur de rendu, par conséquent cette propriété est en lecture seule. Par exemple, SimpleRenderer a un groupe, tandis qu'un BiUniqueValueRenderer a un nombre quelconque de groupes.

La disponibilité des produits

Plateformes prises en charge

Spécifié par : getLegendGroupCount dans l'interface ILegendInfo Renvoie : Le nombre Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetLegendGroup

La disponibilité des produits

Spécifié par : getLegendGroup dans l'interface ILegendInfo Paramètres : index - L'index (in) Renvoie : Une référence à un com.esri.arcgis.carto.ILegendGroup Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

GetLégendeItem

Remarques

Les informations de la légende de la couche ou du moteur de rendu sont également formatées pour être affichées dans les légendes ArcMap. Un moteur de rendu peut remplacer cette mise en forme en renvoyant un LegendItem pour cette propriété. Les moteurs de rendu ESRI ne renvoient généralement rien pour cette propriété. Avec cette configuration, la mise en forme de la légende devient un choix de l'utilisateur ou du développeur sur l'objet de légende.

La disponibilité des produits

Plateformes prises en charge

Spécifié par : getLegendItem dans l'interface ILegendInfo Renvoie : Une référence à un com.esri.arcgis.carto.ILegendItem Lance : java.io.IOException - S'il y a des problèmes d'interopérabilité. AutomationException - Si le composant ArcObject lève une exception.

IsSymbolsSontDiplômé

La description

Indique si les symboles utilisés pour la légende d'un calque ou d'un moteur de rendu varient en fonction de la taille.

Remarques

Par exemple, le moteur de rendu des symboles proportionnels renvoie True pour cette propriété.

Vous pouvez utiliser cette propriété pour faire la distinction entre une couche symbolisée par une couleur graduée ou une symbologie de couche de type symbole gradué. Ces deux symbolisations utilisent un ClassBreaksRenderer, mais seule une symbolisation de symbole gradué renverra True pour cette propriété.


Relâcher les curseurs à l'aide d'ArcObjects ? - Systèmes d'information géographique

Classe COM 'Raster'. Généré le 19/03/2015 à 13:20:42 à partir de 'C:ArcGISCOMesriDataSourcesRaster.olb'

Description ' Une représentation en mémoire d'un raster dynamique qui peut effectuer un rééchantillonnage et une reprojection. ' Options du générateur : PromptForTypeLibraries = False ClashPrefix = esri_ LowerCaseMemberNames = True IDispatchOnly = False RetryOnReject = False AwtForOcxs = True ArraysAsObjects = False DontRenameSameMethods = False ReuseJ

Résumé du champ
Champs hérités de l'interface com.esri.arcgis.geodatabase.IRaster
IID, IIDaeec7d31_1533_11d2_8d25_0000f8780535, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRaster2
IID, IID0d668d08_92c1_4999_9a77_490790821969, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRasterEdit
IID, IID32656121_4df9_45f3_bdd1_507d481e9b49, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRasterProps
IID, IID4b7b1bd0_a705_11d2_8e30_00a0249480f0, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRasterBandCollection
IID, IID7aca3d10_0629_11d2_8d24_0000f8780535, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRasterDefaultProps
IID, IIDe3afbee0_2dad_11d3_a3f6_0004ac1b1d86, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRasterAnalysisProps
IID, IID31e5ff30_2dad_11d3_a3f6_0004ac1b1d86, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.ISupportErrorInfo
IID, IIDdf0b3d60_548f_101b_8e65_08002b2bd119, xxDummy
Champs hérités de l'interface com.esri.arcgis.geodatabase.ISaveAs2
IID, IIDba3968e7_a18b_416d_8140_e4a06068cf1b, xxDummy
Champs hérités de l'interface com.esri.arcgis.geodatabase.ISaveAs
IIDc7a92e97_597e_4a69_a872_29cb60b5e0db
Champs hérités de l'interface com.esri.arcgis.system.IClone
IID, IID9bff8aeb_e415_11d0_943c_080009eebecb, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IPixelOperation
IID, IID467f7216_8ac1_4aac_98bb_e656c135567a, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRawBlocks
IID, IIDf20ff8ff_643a_4669_a465_e14a5095e7dd, xxDummy
Champs hérités de l'interface com.esri.arcgis.datasourcesraster.IRasterResamplingControl
IID, IIDdfef659c_012d_41ae_965d_5e1ec4841add, xxDummy
Résumé du constructeur
Raster ()
Construit un raster à l'aide d'ArcGIS Engine.
Raster (java.lang.Object obj)
Obsolète. À partir d'ArcGIS 9.2, remplacé par des transtypages Java normaux.
Raster theRaster = (Raster) obj
Résumé de la méthode
annuler add (élément IRasterBand, index int)
Ajoute un RasterBand à la collection de bandes.
annuler appendBand (élément IRasterBand)
Ajoute un RasterBand à la collection de bandes.
annuler appendBands (bandes IRasterBandCollection)
Ajoute une collection de RasterBands à la collection de bandes.
annuler attribuer (IClone src)
Attribue les propriétés de src au récepteur.
booléen peut éditer ()
Vérifie si ce raster peut être modifié.
booléen canSaveAs (format java.lang.String)
Vérifie s'il peut être enregistré en tant que nouvel ensemble de données persistant d'un format donné.
annuler dégager ()
Supprime tous les éléments de la collection.
IRasterCurseur createCursor ()
Alloue un curseur raster pour une analyse raster rapide.
IRasterCurseur createCursorEx (IPnt pBlockSize)
Crée un curseur avec une taille de bloc de pixels ou une taille de bloc native donnée.
IPixelBlock createPixelBlock ()
Créez un bloc de pixels compatible.
IPixelBlock createPixelBlock (taille IPnt)
Alloue un PixelBlock de la taille demandée.
booléen est égal à (java.lang.Object o)
Comparez cet objet avec un autre
annuler effacer (IPnt pTlc, IPixelBlock pPixelBlock)
Efface un PixelBlock à partir d'un coin supérieur gauche donné.
ICloner esri_clone ()
Clone le récepteur et attribue le résultat à *clone.
annuler affleurer ()
Vide les données mises en mémoire tampon.
IEnveloppe getAnalysisExtent ()
L'étendue de l'analyse du raster.
ITable getAttributeTable ()
La table attributaire des valeurs raster.
IRasterBand getBandByName (java.lang.String name)
Un RasterBand a donné son nom.
entier getBandIndex (java.lang.String name)
L'index d'un RasterBand donné son nom.
IEnumRasterBand getBands ()
Toutes les bandes de la collection en tant qu'interface vers l'objet énumérateur RasterBands.
java.lang.String statique getClsid ()
getClsid.
IRasterColormap getColormap ()
La palette de couleurs.
entier getCount ()
Le nombre de bandes dans la collection.
IEnveloppe getDefaultIntersectExtent ()
L'étendue d'intersection par défaut.
double getDefaultPixelHeight ()
La taille de pixel par défaut dans Y.
double getDefaultPixelWidth ()
La taille de pixel par défaut dans X.
ISpatialReference getDefaultSpatialReference ()
La référence spatiale par défaut.
IEnveloppe getDefaultUnionExtent ()
L'étendue de l'union par défaut.
IEnveloppe getExtent ()
L'étendue du raster.
IGeodataXform getGeodataXform ()
La transformation des géodonnées.
IGeoTransformationOperationSet getGeoTransformations ()
L'ensemble des transformations géographiques à appliquer.
entier obtenirHauteur ()
Hauteur en pixels.
com.esri.arcgis.interop.Dispatch getJintegraDispatch ()
Obsolète. Usage interne uniquement.
java.lang.Object getNoDataValue ()
Valeur de données utilisée pour indiquer des données invalides ou exclues.
IPPixelFiltre getPixelFilter ()
Le filtre de pixels pour filtrer les valeurs de pixels.
double getPixelHeight ()
La hauteur de pixel en résolution au sol.
entier getTypePixel ()
Type de données des pixels.
java.lang.Object getPixelValue (int iBand, int iColumn, int iRow)
Obtient la valeur de pixel pour une bande donnée à une colonne et une ligne données.
double getPixelWidth ()
La largeur de pixel en résolution au sol.
IRasterDataset getRasterDataset ()
Le jeu de données raster parent.
IRasterInfo getRasterInfo ()
Les informations raster.
IRasterXformer getRasterXformer ()
Le transformateur de trame.
entier getResampleMethod ()
Méthode d'interpolation utilisée lors de la lecture des pixels.
entier getResamplingHint ()
L'indice de rééchantillonnage raster.
ISpatialReference getSpatialReference ()
SpatialReference du Raster.
entier obtenirLargeur ()
Largeur en pixels.
entier hashCode ()
le hashcode de cet objet
annuler interfaceSupportsErrorInfo (GUID riid)
interfaceSupportsErrorInfo
booléen isEqual (IClone autre)
Indique si le récepteur et les autres ont les mêmes propriétés.
booléen isIdentical (IClone other)
Indique si le récepteur et les autres sont le même objet.
booléen estEntier ()
Indique si les données sont des entiers.
IRasterBand élément (int bandIndex)
Renvoie un RasterBand en fonction de son index.
annuler makePermanent ()
Transforme un raster temporaire en jeu de données raster permanent.
annuler mapToPixel (double x, double y, int[] pColumn, int[] pRow)
Convertit un emplacement (x, y) dans l'espace de la carte en espace de pixels.
IPnt moyenneTailleCellule ()
Renvoie la taille de cellule approximative du raster.
annuler pixelToMap (int iColumn, int iRow, double[] pX, double[] pY)
Convertit un emplacement (colonne, ligne) dans l'espace de pixels en espace de carte.
annuler lire (IPnt tlc, bloc IPixelBlock)
Lisez un bloc de pixels en partant du coin supérieur gauche.
annuler readBlock (int tx, int ty, int level, IPixelBlock pPixelBlock)
Lit un bloc de pixels brut.
annuler rafraîchir ()
Actualise le RasterDataset associé.
annuler Libération ()
Libérez un raster.
annuler supprimer (index int)
Supprime un élément de la collection.
annuler resetToDefault ()
Réinitialise le raster à l'état par défaut
IDataset saveAs (java.lang.String new_name, IWorkspace workp, format java.lang.String)
Crée un nouveau RasterDataset persistant avec les canaux de la collection.
IRasterDataset saveAsRasterDataset (nom java.lang.String, espace de travail IWorkspace, format java.lang.String, IRasterStorageDef storageDef)
Crée un nouveau jeu de données raster persistant d'un format donné et d'une définition de stockage spécifiée.
annuler setAnalysisExtentByRef (IEnvelope ppExtent)
L'étendue de l'analyse du raster.
annuler setAttributeTableByRef (ITable ppVAT)
La table attributaire des valeurs raster.
annuler setColormapByRef (IRasterColormap ppColormap)
La palette de couleurs.
annuler setExtent (IEnvelope ppExtent)
L'étendue du raster.
annuler setGeodataXform (IGeodataXform ppXform)
La transformation des géodonnées.
annuler setGeoTransformationsByRef (IGeoTransformationOperationSet ppGeoXforms)
L'ensemble des transformations géographiques à appliquer.
annuler setHeight (int pVal)
Hauteur en pixels.
annuler setNoDataValue (java.lang.Object pVal)
Valeur de données utilisée pour indiquer des données invalides ou exclues.
annuler setPixelFilterByRef (IPixelFilter ppFilter)
Le filtre de pixels pour filtrer les valeurs de pixels.
annuler setPixelHeight (double hauteur)
La hauteur de pixel en résolution au sol.
annuler setPixelType (int pVal)
Type de données des pixels.
annuler setPixelWidth (double largeur)
La largeur de pixel en résolution au sol.
annuler setResampleMethod (valeur int)
Méthode d'interpolation utilisée lors de la lecture des pixels.
annuler setResamplingHint (int pHint)
L'indice de rééchantillonnage raster.
annuler setSpatialReference (ISpatialReference ppSpref)
SpatialReference du Raster.
annuler setWidth (int pVal)
Largeur en pixels.
double toMapX (int iColumn)
Mappe une colonne de pixels à la coordonnée x dans l'espace de la carte.
double toMapY (int iRow)
Mappe une ligne de pixels à la coordonnée y dans l'espace de la carte.
entier toPixelColumn (double x)
Mappe une coordonnée x dans l'espace cartographique à la colonne de pixels.
entier toPixelRow (double y)
Mappe une coordonnée y dans l'espace cartographique à la ligne de pixels.
annuler écrire (IPnt pTlc, IPixelBlock pPixelBlock)
Écrit un PixelBlock à partir d'un coin supérieur gauche donné.
annuler writeBlock (int tx, int ty, int level, IPixelBlock pPixelBlock)
Écrit un bloc de pixels brut.
Méthodes héritées de la classe java.lang.Object
cloner, finaliser, getClass, notify, notifyAll, toString, wait, wait, wait

Raster

Lance : java.io.IOException - s'il y a des problèmes d'interopérabilité java.net.UnknownHostException - s'il y a des problèmes d'interopérabilité

Raster

Construisez un raster à l'aide d'une référence à un tel objet renvoyé par ArcGIS Engine ou Server. C'est sémantiquement équivalent à la conversion de obj en Raster .


Ingénierie des Systèmes d'Information Géographique

3 – Ouvrez Visual Studio (par exemple 2012) et créez un nouveau projet :

4 – Dans l'onglet “Autres langues”, sélectionnez l'option Python car nous utilisons l'interpréteur CPython et définissez les propriétés ci-dessous (modifiez la solution et le nom du projet en conséquence) et cliquez sur ok pour confirmer.

5 – Visual Studio créera la solution et le projet, y compris le fichier PythonExample.py.

6 – Dans la fenêtre Explorateur de solutions, cliquez avec le bouton droit sur le projet PythonExample et créez un nouveau dossier.


Relâcher les curseurs à l'aide d'ArcObjects ? - Systèmes d'information géographique

Classe COM 'SimpleRenderer'. Généré le 19/03/2015 à 13:20:41 à partir de 'C:ArcGISCOMesriCarto.olb'

Description ' Un moteur de rendu simple où le même symbole est dessiné pour chaque entité. ' Options du générateur : PromptForTypeLibraries = False ClashPrefix = esri_ LowerCaseMemberNames = True IDispatchOnly = False RetryOnReject = False AwtForOcxs = True ArraysAsObjects = False DontRenameSameMethods = False ReuseJ

Résumé du champ
statique longue SerialVersionUID
Champs hérités de l'interface com.esri.arcgis.carto.ISimpleRenderer
IID, IIDf3435800_5779_11d0_98bf_00805f7ced21, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ILevelRenderer
IID, IIDdc3d8097_c1ed_11d2_9f21_00c04f6bc709, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IPropertySupport
IID, IID8a11ad55_2f4f_11d3_9fa0_00c04f6bc6a5, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IPersistStream
IID, IID00000109_0000_0000_c000_000000000046, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IPersist
IID0000010c_0000_0000_c000_000000000046
Champs hérités de l'interface com.esri.arcgis.carto.IRotationRenderer
IID, IID2f2047a6_42bd_11d2_aafd_00c04fa334b3, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.IRotationRenderer2
IID, IIDd85e5b0c_68b3_48c8_b8d2_087806273b47, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ISizeRenderer
IID, IID5ba3418a_4ba5_431a_b879_f2539c7be5ff, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ITransparencyRenderer
IID, IIDfb20665d_db1c_11d2_9f2e_00c04f6bc709, xxDummy
Champs hérités de l'interface com.esri.arcgis.display.IDisplayAdmin
IID, IID12e361f0_1907_11d3_80c7_0080c79f0371, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.ILookupSymbol
IID, IID736a377d_a1eb_4ce4_84b9_90f9588374c2, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IXMLSerialize
IID, IIDc8545045_6615_48e3_af27_52a0e5fc35e2, xxDummy
Champs hérités de l'interface com.esri.arcgis.system.IXMLVersionSupport
IID, IID72ca65b9_13de_48b7_8443_717b69b72a99, xxDummy
Champs hérités de l'interface com.esri.arcgis.carto.IExportSupport
IID, IIDf6448010_3cc8_435e_b042_540e9a328f3b, xxDummy
Résumé du constructeur
SimpleRenderer ()
Construit un SimpleRenderer à l'aide d'ArcGIS Engine.
SimpleRenderer (java.lang.Object obj)
Obsolète. À partir d'ArcGIS 9.2, remplacé par des transtypages Java normaux.
SimpleRenderer theSimpleRenderer = (SimpleRenderer) obj
Résumé de la méthode
booléen s'applique (java.lang.Object punk)
Indique si le récepteur peut appliquer l'objet donné à un moment donné.
java.lang.Object appliquer (java.lang.Object newObject)
Applique la propriété donnée au récepteur et renvoie l'ancien objet.
booléen canApply (java.lang.Object pUnk)
Indique si le récepteur peut appliquer l'objet donné à ce moment particulier.
booléen canRender (IFeatureClass featClass, IDisplay display)
Indique si la classe d'entités spécifiée peut être rendue sur l'affichage donné.
annuler désérialiser (données IXMLSerializeData)
Désérialise un objet à partir de XML.
annuler dessiner (curseur IFeatureCursor, int drawPhase, affichage IDisplay, ITrackCancel trackCancel)
Dessine des entités à partir du curseur spécifié sur l'affichage donné.
booléen est égal à (java.lang.Object o)
Comparez cet objet avec un autre
annuler getClassID (GUID[] pClassID)
getClassID
java.lang.String statique getClsid ()
getClsid.
java.lang.Object getCurrent (java.lang.Object punk)
L'objet actuellement utilisé.
java.lang.String obtenirDescription ()
Description du moteur de rendu.
com.esri.arcgis.interop.Dispatch getJintegraDispatch ()
Obsolète. Usage interne uniquement.
java.lang.String getLabel ()
Étiquette de rendu.
ILegendGroup getLegendGroup (index int)
Groupe de légende à l'index spécifié.
entier getLegendGroupCount ()
Nombre de groupes de légende contenus par l'objet.
IlegendItem getLegendItem ()
Optionnel.
java.lang.Object getLevelArray ()
Tableau qui contient tous les niveaux utilisés par les symboles (les symboles sans niveau obtiennent un niveau de 0).
java.lang.String getMinNamespaceSupported ()
L'espace de noms minimum vers lequel la classe peut sérialiser (par exemple l'espace de noms 90).
java.lang.String getRotationField ()
Champ de rotation.
entier getRotationType ()
Type de rotation.
annuler getSizeMax (_ULARGE_INTEGER[] pcbSize)
obtenirTailleMax
java.lang.String getSizeRendererExpression ()
Obtient l'expression de taille.
entier getSizeRendererFlags ()
Obtient des indicateurs de dimensionnement composés d'enum esriSizeRendererFlags.
annuler getSizeRendererRandomRange (double[] pMinSize, double[] pMaxSize)
Obtient une plage de tailles pour un dimensionnement aléatoire.
Isymbole obtenirSymbole ()
Symbole utilisé pour dessiner chaque entité.
Isymbole getSymbolByFeature (fonctionnalité IFeature)
Symbole utilisé pour dessiner l'entité spécifiée.
annuler getSymbolRotation3DExpressions (java.lang.String[] pExpressionX, java.lang.String[] pExpressionY, java.lang.String[] pExpressionZ)
Obtient des expressions pour la rotation autour de chaque axe.
entier getSymbolRotation3DFlags ()
Obtient des indicateurs de rotation composés d'enum esriSymbolRotation3DFlags.
annuler getSymbolRotation3DFlags2 (int[] pFlagX, int[] pFlagY, int[] pFlagZ)
Obtient un indicateur pour chaque axe.
annuler getSymbolRotation3DRandomRanges (double[] pMinRotationX, double[] pMinRotationY, double[] pMinRotationZ, double[] pMaxRotationX, double[] pMaxRotationY, double[] pMaxRotationZ)
Obtient la plage de rotation pour chaque axe (pour une rotation aléatoire).
entier getSymbolRotation3DRotationTypeZ ()
Obtient le type de rotation (géographique ou arithmétique) autour de l'axe Z (arithmétique codée en dur sur d'autres axes).
java.lang.String getTransparencyField ()
Champ de transparence.
entier hashCode ()
le hashcode de cet objet
annuler est sale ()
est sale
booléen isRenderPhase (int drawPhase)
Indique si le moteur de rendu utilise la phase de dessin spécifiée.
booléen isSymbolsAreGraduated ()
Indique si les symboles sont gradués.
booléen isUsesFilter ()
Indique si l'objet courant est dessiné à l'aide d'un filtre.
annuler charge (IStream pstm)
charge
Isymbole lookupSymbol (booléen firstPass, fonctionnalité IFeature)
Renvoie une référence au symbole du moteur de rendu pour l'entité en entrée.
annuler prepareFilter (IFeatureClass fc, IQueryFilter queryFilter)
Prépare le filtre de requête pour le processus de rendu.
annuler readExternal (java.io.ObjectInput dans)
annuler Libération ()
Libérez un SimpleRenderer.
annuler resetLookupSymbol (symbole ISymbole)
Réinitialise les options temporaires sur le symbole (par ex.
annuler enregistrer (IStream pstm, int fClearDirty)
sauvegarder
annuler sérialiser (données IXMLSerializeData)
Sérialise un objet en XML.
annuler setCurrentDrawLevel (int rhs1)
Le niveau de dessin actuel (défini sur -1 pour dessiner tous les niveaux).
annuler setDescription (texte java.lang.String)
Description du moteur de rendu.
annuler setExclusionSetByRef (IFeatureIDSet rhs1)
Une référence d'objet à un jeu d'exclusions de dessin temporaire.
annuler setExportInfoByRef (IFeatureExportInfoGenerator rhs1)
L'ojet d'aide pour générer les informations d'exportation.
annuler setLabel (étiquette java.lang.String)
Étiquette de rendu.
annuler setRotationField (java.lang.String fieldName)
Champ de rotation.
annuler setRotationType (type int)
Type de rotation.
annuler setSizeRendererExpression (java.lang.String pExpression)
Obtient l'expression de taille.
annuler setSizeRendererFlags (int pFlags)
Obtient des indicateurs de dimensionnement composés d'enum esriSizeRendererFlags.
annuler setSizeRendererRandomRange (double minSize, double maxSize)
Définit la plage de tailles pour un dimensionnement aléatoire.
annuler setSymbolByRef (symbole ISymbole)
Symbole utilisé pour dessiner chaque entité.
annuler setSymbolRotation3DExpressions (java.lang.String expressionX, java.lang.String expressionY, java.lang.String expressionZ)
Définit des expressions pour la rotation autour de chaque axe.
annuler setSymbolRotation3DFlags (int pFlags)
Obtient des indicateurs de rotation composés d'enum esriSymbolRotation3DFlags.
annuler setSymbolRotation3DFlags2 (int flagX, int flagY, int flagZ)
Définit un indicateur pour chaque axe.
annuler setSymbolRotation3DRandomRanges (double minRotationX, double minRotationY, double minRotationZ, double maxRotationX, double maxRotationY, double maxRotationZ)
Définit la plage de rotation pour chaque axe (pour une rotation aléatoire).
annuler setSymbolRotation3DRotationTypeZ (ent pType)
Obtient le type de rotation (géographique ou arithmétique) autour de l'axe Z (arithmétique codée en dur sur d'autres axes).
annuler setSymbolsAreGraduated (symboles booléensAreGraduated)
Indique si les symboles sont gradués.
annuler setTransparencyField (java.lang.String fieldName)
Champ de transparence.
annuler writeExternal (sortie java.io.ObjectOutput)
Méthodes héritées de la classe java.lang.Object
cloner, finaliser, getClass, notify, notifyAll, toString, wait, wait, wait

SerialVersionUID

SimpleRenderer

Lance : java.io.IOException - s'il y a des problèmes d'interopérabilité java.net.UnknownHostException - s'il y a des problèmes d'interopérabilité

SimpleRenderer

Construisez un SimpleRenderer à l'aide d'une référence à un tel objet renvoyé par ArcGIS Engine ou Server. C'est sémantiquement équivalent à convertir obj en SimpleRenderer .


Le bac à sable

Les produits ESRI ArcGIS Explorer, ArcGIS Desktop et ArcGIS Engine sont livrés avec une DLL C extrêmement utile appelée la bibliothèque du moteur de projection. Le moteur de projection est utilisé par ces produits pour effectuer des calculs géodésiques (ou ellipsoïdaux).

Le moteur de projection est entièrement documenté dans l'API SDE C et il existe un exemple de wrapper VB6 pour deux fonctions sur le site Web d'EDN.

L'exemple VB6 peut être facilement porté en C# à l'aide de DLLImportAttribute. Cependant, il y a deux inconvénients à utiliser DLLImport.

    s sont chargés en mémoire à chaque appel d'une fonction,
  1. Le fichier et le chemin d'accès à la DLL sont codés en dur au moment de la conception.

Cependant, avec .NET 2.0, une nouvelle méthode appelée GetDelegateForFunctionPointer a été ajoutée à la classe Marshal pour permettre une liaison tardive. Cela signifiait que les DLL externes pouvaient être découvertes et chargées au moment de l'exécution.

Vous trouverez ci-dessous un wrapper C# pour le moteur de projection ESRI. Le wrapper est développé en tant que singleton afin que la DLL ne soit chargée qu'une seule fois par instance d'application. En outre, l'emplacement de la bibliothèque du moteur de projection est découvert au moment de l'exécution à partir du Registre.

Voici un exemple utilisant le singleton du moteur de projection pour ArcGIS Explorer pour calculer la distance géodésique entre Londres et Paris. La distance géodésique est la distance la plus courte entre deux points sur la surface d'un ellipsoïde.

Voici le code source des wrappers.

Veuillez noter que le code et la méthodologie utilisés dans cet article ne sont ni approuvés ni pris en charge par ESRI. Utilisez ce code à vos risques et périls.

ArcGIS Diagrammer - Reverse engineering d'une géodatabase en diagramme

Cet article décrira comment créer un diagramme prêt à imprimer de votre géodatabase en quatre étapes simples.

Cet exercice utilisera ArcGIS Diagrammer (gratuit) qui est disponible auprès d'ArcScripts. Les prérequis pour ArcGIS Diagrammer incluent ArcGIS Desktop 9.2 et Microsoft .NET Framework 2.0.

Étape 1 : exporter une géodatabase existante vers un document d'espace de travail XML ESRI

Cliquez avec le bouton droit sur une géodatabase personnelle, une géodatabase fichier ou une connexion SDE. Sélectionner Exporter > Document d'espace de travail XML.

Sélectionner Schéma uniquement et entrez un nom de fichier de sortie. Par example C:TempMontgomery.xml. Cliquez sur Suivant.

Cliquez sur Finir pour lancer l'exportation.

Étape 2 : chargez le document XML Workspace dans ArcGIS Diagrammer

Démarrez ArcGIS Diagrammer en cliquant sur :
DÉMARRER > Tous les programmes > ArcGIS > ArcGIS Diagrammer > ArcGIS Diagrammer

Faites glisser et déposez le fichier XML créé par ArcCatalog dans le canevas ArcGIS Diagrammer.

ArcGIS Diagrammer affichera tous les objets et associations de la géodatabase. Vous souhaiterez peut-être modifier l'échelle du diagramme, par exemple, pour modifier l'échelle de zoom à 25 %, cliquez sur Affichage > Zoom > 25%.

Étape 3 : organiser les objets de la géodatabase

Tous les objets de la géodatabase peuvent être réorganisés pour répondre à vos besoins. En outre, certains objets tels que les sous-types, les domaines et les classes d'entités peuvent être développés pour révéler des détails supplémentaires.

Étape 4 : Imprimez le diagramme

Avant d'imprimer ou de tracer le diagramme, vous souhaiterez peut-être spécifier une imprimante/un traceur et un format de papier. Cliquez sur Fichier > Configuration de l'impression.

Dans la boîte de dialogue Configuration de l'imprimante, sélectionnez une imprimante et un format de papier.

Enfin, cliquez Fichier > Imprimer pour envoyer le diagramme pour impression/traçage.

Accès aux fichiers de style ESRI à l'aide d'ADO.NET

Les produits d'ESRI ArcGIS Engine, ArcGIS Desktop et ArcGIS Server utilisent des fichiers de style pour stocker et gérer des collections de symboles. Un symbole est un graphique utilisé pour représenter une entité géographique ou une classe d'entités. Styles contient des symboles nommés et classés pour diverses entités géographiques telles que des points, des lignes et des polygones.

Les fichiers de style ArcGIS Engine et ArcGIS Desktop sont des bases de données Microsoft Access avec un style extension de fichier.

Les fichiers de style ArcGIS Server utilisent un type de fichier propriétaire et ont un style de serveur extension de fichier. Les développeurs peuvent uniquement utiliser l'API ArcObjects pour accéder à ce fichier.

Les développeurs d'ArcGIS Engine peuvent utiliser SymbologyControl pour parcourir les symboles contenus dans un style de serveur. Alors que les développeurs d'ArcGIS Desktop peuvent réutiliser les boîtes de dialogue du bureau telles que StyleManagerDialog, SymbolEditor et SymbolPickerDialog.

Dans cet article, je vais présenter un exemple qui montre comment accéder aux fichiers de style ESRI à l'aide d'ADO.NET. L'exemple montrera également comment convertir un symbole ESRI en un bitmap .NET. Cet exemple peut être utile aux développeurs qui souhaitent :
1) accéder aux styles sans utiliser ArcObjects, ou
2) stocker des informations personnalisées dans un fichier de style ESRI, ou
3) convertir les symboles ESRI en bitmaps, ou
4) créer un navigateur de symboles personnalisé.

Veuillez noter que le code et la méthodologie utilisés dans cet article ne sont ni approuvés ni pris en charge par ESRI. Utilisez ce code à vos risques et périls.

Cet exemple a été développé en C# à l'aide de Microsoft Visual Studio 2005. L'application Windows se compose de quatre contrôles et d'un composant, à savoir :
1) textBox1 : chemin d'accès au fichier de style,
2) button1 : Ouvre le fichier de style et ajoute des entrées à la ListView,
3) listView1 : afficher l'icône du symbole et les descriptions,
4) axLicenseControl1 : extrait un moteur ArcGIS ou ArcGIS Desktop au moment de l'exécution,
5) imageList1 : Stockez une collection d'images pour les éléments ListView.

Lorsque le formulaire se charge :
1) Un nom de chemin par défaut est ajouté au style TextBox,
2) Quatre colonnes sont ajoutées au ListView,
3) Le style de vue ListView est défini sur les détails,
4) L'ImageList est assignée à la propriété SmallImageList du ListView.

L'application, une fois chargée, ressemble à ceci.

Si vous exécutez cette application en mode débogage, Microsoft Visual Studio 2005 peut lever une exception PInvokeStackImbalance. Cela peut être surmonté en exécutant l'application normalement à partir de l'exécutable ou en désactivant cette exception. Cette exception de débogage et d'autres peuvent être ignorées à l'aide de la fenêtre Exception (Déboguer > Exceptions. ).

Pour charger les symboles de point, de ligne et de polygone du style dans la ListView, cliquez sur VA!

Voici le code source de l'exemple :

L'outil générique d'obtention de position d'ESRI

Le produit ArcGIS Desktop d'ESRI comprend les applications ArcCatalog, ArcMap, ArcScene et ArcGlobe. Les interfaces utilisateur des quatre applications peuvent être fortement personnalisées par les développeurs, par exemple, un développeur peut déployer des barres d'outils et des boutons personnalisés.

Un bouton (ou commander dans la terminologie ESRI) est une classe COM qui implémente l'interface ICommand. Certaines commandes nécessitent une interaction géographique, par exemple, en cliquant sur un pays dans une carte du monde. Ces commandes doivent implémenter l'interface ITool.

Normalement, les développeurs créent des ensembles de commandes spécifiques à chaque projet. Dans cet article, je vais discuter d'une commande prête à l'emploi appelée Generic Get Point Tool qui peut être utilisée pour l'interaction carte/globe. L'utilisation de cette commande dans des projets futurs peut réduire votre temps de développement.

Pour illustrer cette commande, j'ai créé un exemple d'application Windows basé sur ArcGIS Engine à l'aide de Microsoft .Net Framework 2.0. L'application se compose d'une carte, d'une barre d'outils invisible et d'un bouton qui activera l'outil générique Get Point. Après avoir cliqué sur la carte, une boîte de message affichera les coordonnées cartographiques de l'emplacement cliqué, puis désactivera l'outil.

L'exemple d'application Windows (C#) a été créé à l'aide de Microsoft Visual Studio 2005. Il se compose d'un contrôle de carte, d'un contrôle de barre d'outils, d'un contrôle de licence et d'un bouton. Le contrôle de carte est affecté à la propriété buddy du contrôle de barre d'outils et le contrôle de carte est affecté à une carte à charger au moment de l'exécution.

Lorsque le formulaire se charge, le Outil générique d'obtention de point est ajouté à la barre d'outils, puis en transtypant la commande vers IToolPositionInitializer, le formulaire est affecté en tant que rappel (car il prend en charge IToolPositionCallback).

Lorsque le bouton est cliqué, l'outil Générique d'obtention de point est situé sur la barre d'outils, puis affecté comme outil actuel. Cela active essentiellement l'outil et désactive l'outil précédemment actif (le cas échéant).

Lorsque l'utilisateur clique sur l'affichage de la carte avec l'outil Générique Get Point activé, la commande appelle la méthode MouseClicked sur l'interface IToolPositionCallback. Dans l'exemple, le formulaire implémente cette interface et affiche une boîte de message affichant les coordonnées de la carte. Plutôt que de laisser l'outil actif, la définition de IToolbarControl::CurrentTool (ou IMapControl::CurrentTool) sur null désactive effectivement l'outil.

Éditeur de tablette ArcGIS

Récemment publié sur le site Web ArcScripts d'ESRI, un ensemble de commandes pour ArcMap cible les capacités d'un Tablet PC. Plus précisément, l'encre numérique, la reconnaissance de texte, la synthèse vocale (TTS) et la reconnaissance vocale.

L'éditeur de tablette ArcGIS peut être téléchargé à partir d'ici :
http://arcscripts.esri.com/details.asp?dbid=14921 (code source complet fourni)

Conditions préalables:

Comment installer:

Téléchargez le fichier ZIP depuis ArcScripts
Décompressez le téléchargement
Double-cliquez sur le fichier "msi". Suivez les instructions de l'assistant d'installation.

Comment commencer?

Démarrer ArcMap (Windows : Démarrer > ArcGIS > ArcMap)
Afficher la barre d'outils de l'éditeur de tablette (ArcMap : Afficher > Barres d'outils > Éditeur de tablette)
Chargez une carte. Pour afficher certaines des fonctionnalités avancées, ajoutez une ou plusieurs couches avec un moteur de rendu unique.

Captures d'écran de démonstration :

L'outil de sélection de fonctionnalités
Pour sélectionner des entités à l'aide d'encre, cliquez d'abord sur une couche dans la table des matières d'ArcMap, puis activez l'outil Sélection d'entités dans la barre d'outils de l'éditeur de tablette. À l'aide de votre périphérique de pointage, faites glisser votre souris sur l'écran. Dès que vous soulevez la souris/le stylet, les entités du calque sélectionné seront sélectionnées (si elles sont à l'intérieur de l'encre).

L'outil de cotation verbale
Cliquez sur l'outil de cotation verbale (troisième à partir de la gauche) dans la barre d'outils de l'éditeur de tablette. Faites glisser une ligne d'encre droite sur l'écran. L'ordinateur prononcera la longueur dans les unités cartographiques actuelles, par exemple. "Quatre-vingt-quatre mètres". Les longueurs seront arrondies à l'unité cartographique la plus proche.

L'outil d'ajout de fonctionnalités
Maintenant, démarrez une session d'édition (cliquez sur Éditeur > Démarrer l'édition dans la barre d'outils de l'éditeur). Sélectionnez la couche dans la table des matières d'ArcMap à laquelle vous souhaitez ajouter des entités. Dans la capture d'écran ci-dessus, l'utilisateur souhaite ajouter plus de lampadaires. Cliquez sur l'outil Ajouter des fonctionnalités (premier bouton de la barre d'outils de l'éditeur de tablette) et tracez de petites marques sur l'écran comme indiqué ci-dessus. Lorsque vous avez terminé, effectuez un geste vers le haut avec votre périphérique de pointage. Cela transformera les petits traits d'encre en nouveaux pôles lumineux.

L'outil de transfert d'attributs
À l'aide de l'outil Ajouter une fonctionnalité à l'étape précédente, quatre nouveaux poteaux d'éclairage ont été ajoutés. Les nouveaux poteaux lumineux ont adopté toutes les valeurs par défaut associées à la classe d'entités parent (et/ou sous-type). La couche Light Poles étant toujours sélectionnée dans la table des matières d'ArcMap, cliquez sur l'outil de transfert d'attributs (deuxième bouton de la barre d'outils de l'éditeur de tablette). Dessinez deux anneaux d'encre, chacun encerclant un poteau lumineux. Lorsque les gestes de droite sont utilisés, les attributs du pôle sélectionné avec le premier trait d'encre seront transférés au(x) pôle(s) sélectionné(s) avec le deuxième trait d'encre.

L'outil de mise à jour d'encre
Encore une fois, alors que vous êtes encore dans une session de mise à jour et avec la couche Light Poles sélectionnée dans la table des matières d'ArcMap, sélectionnez quelques pôles avec l'outil de sélection d'entités (comme indiqué précédemment). Cliquez maintenant sur l'outil Ink Updater (le cinquième bouton de la barre d'outils de l'éditeur de tablette). Étant donné que la couche sélectionnée utilise un moteur de rendu unique, l'utilisateur peut reclasser les pôles sélectionnés en écrivant "f" suivi d'un geste vers la droite. L'éditeur de tablette utilisera le texte manuscrit pour trouver la première description correspondante (le cas échéant) dans le calque et mettra à jour les attributs en conséquence. Si la couche n'a pas de moteur de rendu unique ou si vous souhaitez sélectionner explicitement un champ à mettre à jour, vous pouvez cliquer sur le menu déroulant Champ pour choisir un champ à modifier. L'outil de mise à jour d'encre est suffisamment intelligent pour convertir l'encre dans le format de données approprié, par exemple, l'encre sera convertie en une date si un champ de date est sélectionné.

L'outil de mise à jour de la parole
C'est probablement l'outil le plus cool de la barre d'outils de l'éditeur de tablette. L'utilisateur est toujours dans une session de mise à jour, il y a trois lampadaires sélectionnés dans la carte et la couche Light Poles est sélectionnée dans la table des matières d'ArcMap. Cliquez sur le bouton Speech Updater (sixième bouton de la barre d'outils de l'éditeur de tablette). Maintenant, dites "Bien". L'éditeur de tablette reclassera automatiquement les pôles comme « bons ». Cet outil fonctionnera avec N'IMPORTE QUELLE couche qui a une valeur unique rendue avec des descriptions en anglais lisible.


Faire pleuvoir les coordonnées : implémenter le glisser-déposer pour une application ArcGIS Silverlight Viewer

La frontière entre les applications de bureau et Web est de plus en plus floue. De plus en plus, les utilisateurs s'attendent à interagir avec les applications Web de la même manière que n'importe quelle application s'exécutant sur le bureau local. Exemple concret, faites glisser et déposez. Avant le « Web 2.0 », l'idée de déposer un fichier du système de fichiers local vers une application Web était pratiquement de la science-fiction. Cependant, comme de nombreux utilisateurs d'ArcGIS Online l'ont découvert, une telle fonctionnalité peut désormais être considérée comme acquise. Dans cet article, je vais décrire comment créer un comportement personnalisé qui permet le glisser-déposer de fichiers texte sur le contrôle de carte ArcGIS Silverlight.

Pour ceux qui ne sont pas familiers, ArcGIS Silverlight Viewer fournit un cadre pour créer rapidement des applications cartographiques personnalisées et entièrement fonctionnelles sans écrire de code ni modifier les paramètres de configuration. Le cadre est également extensible, permettant à un développeur de créer des outils, des mises en page et des comportements personnalisés emballés individuellement qui peuvent être connectés à ArcGIS Silverlight Viewer pour être utilisés dans une application de cartographie.

Bien que le processus décrit ici soit spécifique au dessin de points sur une carte ArcGIS Silverlight, vous pouvez le trouver utile pour créer d'autres types de comportements pour une application de visionneuse ArcGIS Silverlight ou pour activer le glisser-déposer pour d'autres types de contrôles Silverlight (même, <gulp> non -SIG !). Si vous n'êtes pas prêt à vous pencher sur les détails, n'hésitez pas à télécharger simplement le code terminé et à l'essayer. Sinon, lisez la suite !

Contrairement à un outil ou à une mise en page personnalisés, un comportement personnalisé n'est pas nécessairement représenté par des éléments d'interface utilisateur (UI) dans l'application. Au lieu de cela, un comportement est susceptible de répondre à des événements utilisateur qui se déroulent dans le cadre du flux de travail de l'application. La réponse d'un comportement à un événement peut impliquer l'affichage d'éléments d'interface utilisateur avec lesquels l'utilisateur peut interagir, ou il peut simplement exécuter du code en guise de réponse. Un comportement prêt à l'emploi actuellement disponible dans Silverlight Viewer, par exemple, consiste à afficher l'emplacement x/y du curseur de la souris lorsque l'utilisateur le déplace sur la carte. Comme son nom l'indique, un comportement est une partie intrinsèque de l'application qui est active dès le chargement de l'application. Dans les étapes suivantes, je décrirai le processus d'implémentation de la possibilité de faire glisser un fichier texte de coordonnées sur le contrôle de carte et d'afficher les emplacements dans le fichier sous forme de points (graphiques) sur la carte. Le comportement sera d'abord créé sans réponse supplémentaire requise de la part de l'utilisateur : lorsque les coordonnées seront déposées, elles seront vérifiées pour le bon format, puis immédiatement dessinées sur la carte. Créer un projet de visionneuse Silverlight Afin de développer des compléments pour la visionneuse ArcGIS Silverlight, vous devez installer le SDK d'extensibilité ArcGIS pour Silverlight (disponible en téléchargement sur le centre de ressources ArcGIS). En plus de fournir tout ce dont vous aurez besoin pour créer un complément dans l'assembly ESRI.ArcGIS.Client.Extensibility, le SDK contient également un modèle de projet Visual Studio pour vous aider à démarrer.

  • Pour commencer, créons un nouveau projet Visual Studio. Si vous avez installé ArcGIS Extensibility SDK for Silverlight, vous verrez un projet « ESRI Viewer for Silverlight » dans la boîte de dialogue Nouveau projet, comme illustré ci-dessous (sous Silverlight/ESRI Viewer). Parce que la solution contiendra plusieurs projets liés à la personnalisation de différents aspects de la visionneuse (outils, comportements, éléments de mise en page), j'ai choisi de lui donner un nom plus général, "ViewerCustomizations" (par opposition à "DragDropCoords", par exemple).

Notez que j'ai choisi de créer mon complément en utilisant C#, donc les captures d'écran et les descriptions de code différeront d'un projet créé pour VB.NET. Lorsque la solution s'ouvre, vous remarquerez qu'elle se compose de trois projets distincts :

  • Personnalisations de la visionneuse: Il s'agit de l'application Silverlight qui hébergera vos compléments personnalisés. Vous l'utiliserez pour tester votre comportement personnalisé.
  • ViewerCustomizations.AddIns: Ce projet contiendra des personnalisations pour ArcGIS Silverlight Viewer, dans notre cas le comportement de glisser-déposer personnalisé pour les fichiers de coordonnées. C'est également là que des outils personnalisés seraient développés. Pour nos besoins, c'est le seul projet pour lequel nous aurons besoin d'écrire du code (à part peaufiner les paramètres de configuration dans l'application de visualisation principale).
  • ViewerCustomizations.Layouts: ce projet contient des copies de tous les modèles de mise en page prêts à l'emploi utilisés par Silverlight Viewer. C'est là que vous développerez votre propre mise en page XAML pour la visionneuse, peut-être en commençant par une copie d'une mise en page existante.

En plus de créer ces trois projets, le modèle Visual Studio fournit également des modules de code pour vous aider à démarrer avec un outil personnalisé, un comportement et des boîtes de dialogue de configuration pour vos compléments de visionneuse. Nous allons commencer à étoffer le module fourni pour créer un comportement personnalisé (MyBehavior.cs).

  • Dans la fenêtre Explorateur de solutions, sous le projet ViewerCustomizations.AddIns, recherchez et ouvrez la classe MyBehavior.cs.

Le comportement personnalisé doit hériter du Système.Windows.Interactivité.Comportement classe de base. Cette classe fournit un mécanisme pour attacher un état et des commandes à un objet. Le paramètre générique (dans notre cas Carte), indique le type d'objet auquel le comportement peut être attaché. En plus de Comportement classe de base, un comportement personnalisé peut également implémenter des membres de ISupportsConfiguration afin d'enregistrer et de charger les paramètres de configuration requis pour le comportement. Nous n'aurons pas besoin de travailler avec la configuration dans cet exemple.

Si vous souhaitez mettre votre comportement personnalisé à la disposition des utilisateurs dans ArcGIS Application Builder, vous devez avoir les attributs suivants spécifiés pour votre classe. Exportation: faisant partie de Microsoft Managed Extensibility Framework, cela indique simplement que le comportement doit être rendu disponible dans le cadre. Pour un comportement de carte personnalisé dans ArcGIS Silverlight Viewer, la valeur sera toujours typeof(Comportement<Map>). Afficher un nom: un nom à afficher pour le comportement dans Application Builder. Catégorie: une catégorie optionnelle pour organiser les composants (comportements et outils). La description: un bref résumé de ce que le comportement fournit.

Maintenant que la plomberie de la classe de comportement personnalisée est en place, créons une fonction pour gérer un événement de dépôt pour le contrôle de carte. Le gestionnaire acceptera un objet DragEventArgs qui contiendra des informations sur l'objet (fichier, par exemple) qui a été déposé sur la carte. Pour l'instant, nous allons simplement afficher un message pour vérifier que l'événement est déclenché.

Nous allons maintenant tester le comportement personnalisé pour nous assurer que notre événement de dépôt est géré.

  • Exécutez la solution.
  • Utilisez l'Explorateur Windows pour faire glisser un fichier (n'importe quel type de fichier) sur la carte, puis déposez-le en relâchant la souris.

Après avoir déposé le fichier, vous vous attendiez peut-être à voir la boîte de message s'afficher. Qu'est-ce que c'est que ça ?! Désolé de vous taquiner… nous avons encore quelques étapes à accomplir avant que notre comportement ne soit correctement câblé. Ce ne sera pas long, promis.

Notez que le seul remplacement qui doit être implémenté sur la classe de base Behavior est le OnAttached une fonction.C'est le code qui s'exécute lorsque le comportement personnalisé est initialement attaché à son objet associé, qui dans notre cas est le Map.

  • Accédez à la fonction OnAttached dans votre module de code MyBehavior.cs.
  • Supprimez tout le code de la plaque signalétique de la fonction OnAttached, à l'exception de la ligne (initiale) qui appelle la fonction OnAttached sur l'objet de base :
  • Dans le remplacement OnAttached, sous le code existant, fournissez le code ci-dessous à…
  1. Configurer l'élément cartographique en tant que cible de dépôt (activer le glisser-déposer)
  2. Indiquez quelle fonction gérera l'événement drop (la fonction MapDrop créée ci-dessus)
  • Enregistrez et créez la solution.
  • Exécutez à nouveau l'application Silverlight Viewer et faites glisser un fichier de l'Explorateur Windows sur la carte.

Après avoir déposé le fichier sur la carte, vous devriez voir la boîte de message apparaître. Non? OK, c'était méchant… la dernière fois, je le jure. Nous n'avons plus qu'une chose à câbler.

Pour inclure un nouvel outil ou comportement dans une application ArcGIS Silverlight Viewer, vous devez modifier les paramètres de configuration appropriés pour le site. Chaque application de visualisation a un répertoire « Config » sous son dossier racine qui contient plusieurs fichiers de configuration au format XML. Pour inclure votre comportement personnalisé, vous devrez modifier les paramètres Behaviors.xml.

  • Dans la fenêtre Explorateur de solutions, dans le dossier Config sous le projet ViewerCustomizations, recherchez et ouvrez le fichier Behaviors.xml.

L'application de visualisation est configurée pour utiliser un comportement appelé « MonComportement », qui était le nom d'origine de notre classe de comportement. Puisque nous avons changé le nom en DropCoordinatesBehavior, nous devons mettre à jour le paramètre de configuration pour refléter le changement.

  • Modifiez la configuration du comportement pour utiliser le nouveau nom de la classe, DropCoordinatesBehavior, comme indiqué ci-dessous.
  • Enregistrez le fichier de configuration Behaviors.xml et exécutez le projet.
  • Encore une fois… faites glisser un fichier depuis l'Explorateur Windows et déposez-le sur la carte.

Croyez-moi, cette fois, la boîte de message aurait dû apparaître. Si ce n'est pas le cas, vous avez fait une erreur quelque part. Vérifiez les étapes ci-dessus et assurez-vous que : 1) la fonction OnAttached connecte la cible de dépôt et le gestionnaire d'événements de dépôt, et 2) le fichier Behaviors.xml est configuré avec le nom de classe correct. Lorsque vous l'aurez réparé, rencontrez-moi dans la section ci-dessous. J'attendrai.

  • Fermez la boîte de message et arrêtez d'exécuter l'application. Dans les étapes suivantes, nous allons lire le contenu du fichier déposé.

Lâchez une bombe F ("Fichier", bien sûr)

Nous allons maintenant ajouter du code qui examinera de plus près le fichier déposé sur la carte. Nous nous assurerons que l'utilisateur n'a déposé qu'un seul fichier et qu'il est du type approprié (texte délimité par des virgules avec des paires de coordonnées). Un objet DragEventArgs est passé à notre fonction MapDrop. Cet objet expose les données associées à l'objet déposé (via la propriété Data), ainsi que l'état des touches shift, cntrl et alt. Nous utiliserons cet objet pour obtenir des informations sur le fichier déposé.

L'assembly System.IO fournit la classe FileInfo, qui nous aidera à travailler avec les informations supprimées par l'utilisateur. Nous allons convertir les données déposées sur la carte en un tableau d'objets FileInfo. Nous nous assurerons alors que l'objet déposé n'est pas nul et qu'il contient un seul fichier.

  • Dans la fonction MapDrop de MyBehavior.cs, ajoutez le code suivant pour vous assurer que l'utilisateur a supprimé exactement un fichier.

Remarque : la méthode IDataObject:GetData vous permet d'obtenir les données dans un format spécifié, si plusieurs ont été fournies. Pour l'instant, nous devrons faire quelques hypothèses sur la structure des informations dans le fichier texte déposé. Supposons ce qui suit : 1) la première ligne du fichier contient les noms des champs, 2) les coordonnées seront toujours au format degré décimal, 3) les valeurs sont toujours séparées par des virgules, et 4) les deux premiers champs contiendront la longitude valeurs (x) et latitude (y) respectivement.

  • Ajoutez ce qui suit utilisant en haut du module MyBehavior.cs. Ces assemblages contiennent les classes nécessaires au traitement de la saisie des coordonnées et au dessin des points sur la carte.
  • Au bas du code existant dans la fonction MapDrop, déclarez une variable StreamReader et commencez un bloc try/catch/finally. Dans le attraper partie du bloc, afficher un message d'erreur, et dans le finalement partie du bloc, assurez-vous de fermer le fichier, comme indiqué ci-dessous.
  • Dans la partie try du bloc, ajoutez le code ci-dessous pour déclarer certaines variables nécessaires à la lecture du fichier et à l'affichage des points.
  • Ouvrez le fichier pour la lecture.
  • Ajouter un tandis que block pour lire toutes les lignes du fichier déposé.

StreamReader::ReadLine est utilisé pour lire la ligne courante du fichier (de haut en bas). La propriété StreamReader::EndOfStream renverra faux jusqu'à ce que la fin du fichier soit atteinte. Nous suivrons la position de la ligne à l'intérieur du fichier en utilisant le numéro de ligne variable. Cela nous permettra de signaler le numéro de ligne exact du fichier si une erreur est rencontrée lors de l'analyse des valeurs de coordonnées.

  • Au risque de nous ridiculiser entre vous et moi, nous supposons que la première ligne du fichier décrira les noms des champs. Ajoutez le code ci-dessous (à l'intérieur du tandis que boucle, après la ligne qui incrémente le numéro de ligne variable) pour sauter la première ligne du fichier.
  • Nous supposons également que les valeurs des coordonnées sont séparées par des virgules et que les deux premières valeurs d'une ligne sont les coordonnées x et y. Sur la base de ces hypothèses, nous pouvons ajouter le code ci-dessous pour lire les coordonnées de la ligne actuelle.

Les variables ci-dessus stockent les coordonnées x et y sous forme de valeurs de chaîne. Bien que nous ayons déjà fait beaucoup d'hypothèses sur la structure du fichier texte, nous ne pouvons certainement pas supposer que l'utilisateur ne nous a pas donné de déchets ! Ajoutons du code pour tenter d'analyser les valeurs en variables doubles. Si le code échoue, signalez le numéro de ligne où les problèmes se sont produits.

Supportez-moi, nous sommes dans la dernière ligne droite ! Tout ce que nous avons à faire maintenant est de créer un point à partir de la paire de coordonnées et de l'ajouter à la couche graphique. Oh, et nous devons ajouter la couche graphique à la carte. Oh oui, nous devons également nous assurer de projeter les points sur Web Mercator. Bref… on y est presque !

  • Ajoutez du code pour créer un MapPoint à partir de la paire de coordonnées analysée à partir du fichier. Étant donné que les coordonnées sont supposées être des degrés décimaux, nous donnerons au point une référence spatiale WGS 1984.
  • Utilisez le WebMercator objet pour projeter le point géographique vers Web Mercator.
  • Créez un nouvel objet Graphic pour afficher le point, ajoutez-le au GraphicsLayer créé précédemment.
  • Enfin, ajoutez le GraphicsLayer à la carte.

Nous sommes maintenant prêts à essayer !

  • Créez un fichier texte de coordonnées à tester (rappelez-vous nos hypothèses sur la structure du fichier !). Si vous êtes paresseux et/ou fatigué de taper, vous pouvez simplement copier l'exemple ci-dessous dans un fichier texte.
  • Lancez l'application et faites glisser votre fichier de coordonnées sur la carte. Vous devriez voir vos points apparaître avec le symbole de punaise par défaut (j'ai changé mon fond de carte en « Canevas gris clair » afin de mieux voir les points).

Si vous avez le temps, vous pouvez essayer d'implémenter certaines des améliorations suivantes à notre comportement de base.


Conception et développement d'applications logicielles SIG

Le cours vise à introduire l'architecture et la programmation OO (Object Oriented) en Python, a fourni un examen complet des principes clés de OO et COM (COMmodèles de développement de logiciels basés sur les composants). Le cours abordera spécifiquement la conception et la mise en œuvre d'applications géographiques et de tâches d'automatisation du géotraitement, dans le contexte de la plate-forme SIG propriétaire ArcGIS&trade 9.x e 10.

ArcGIS peut être programmé dans des langages standard et avancés tels que Visual C++&trade et Java&trade, offrant un accès complet aux fonctionnalités natives de la plate-forme via la bibliothèque de composants ArcObjects&trade. D'autre part, Python est maintenant entièrement intégré dans la version ArcGIS 10. ArcPy est une option simple, efficace et multiplateforme pour le développement rapide de prototypage et de scripts, abordant les tâches de gestion géographique et d'analyse. Les outils spatiaux de Model Builder peuvent être facilement intégrés dans les applications Python, également depuis l'extérieur d'ArcGIS, tandis que les modèles de données spatiales de Model Builder peuvent également être exportés vers Python et intégrés dans le cadre d'applications géographiques plus complexes.

Le cours fait partie d'un projet d'apprentissage GIScience plus large, abordant à la fois des sujets d'introduction et avancés dans la conception et la mise en œuvre de systèmes d'information géographique, répondant aux exigences de domaines aussi différents que les sciences de l'environnement, l'urbanisme, l'aménagement du territoire, l'informatique, pour ne citer que quelques .
Dans ce cadre, Python est une ressource précieuse pour les scripts ArcGIS et le développement d'applications géographiques complexes.

Programme

Le cours, adoptant une approche théorique/pratique, couvrira les sujets suivants :

  • Paradigme de programmation orienté objet (OO) : de la décomposition fonctionnelle et des problèmes connexes de modularité, de cohésion et de couplage dans les modèles de programmation traditionnels, au modèle OO.
  • Introduction aux concepts clés de l'OO et à leur implémentation : classe, polymorphisme, constructeurs et destructeurs, état et comportement (propriétés et fonctions), objet (instanciation de classe), collections et interaction entre objets.
  • Les sessions pratiques se sont concentrées sur l'investigation des concepts OO, à travers la mise en œuvre de programmes simples.
  • Conception logicielle pour les applications OO : ingénierie logicielle et UML (Unified Modeling Language), principes, schémas clés (Use Case, Class, State e Activity) et techniques d'identification de classes et de relations (CRC, Class-Responsibility-Collaborator).
  • Des sessions pratiques axées sur l'ingénierie logicielle et son rôle dans la conception d'applications OO.
  • Introduction à Python : éditeur IDLE et principes fondamentaux du langage, y compris les variables, les opérateurs mathématiques et les priorités, les commentaires, l'indentation, les constructions conditionnelles - if, elif, else - et itératives - while, for -, fonctions, paramètres et valeurs de retour, tuples, listes et dictionnaires, classes (création, instanciation d'objets, héritage), modules, entrées/sorties de fichiers, gestion des erreurs et exceptions, exécution et débogage (print, try..except)
  • Sessions pratiques axées sur les fondements du langage de programmation Python et le développement d'applications OO
  • Géotraitement dans ArcGIS. Définitions, modèles géographiques et scripting dans le cadre du géotraitement, architecture, Model Builder, implémentation de scripts. Le modèle de programmation, l'objet géoprocesseur et son historique.
  • Comment utiliser Python dans ArcGIS : ArcPy, paramètres environnementaux, outils de géotraitement et boîtes à outils, exécution de tâches de base (interaction avec les couches, création et exportation de cartes, paramétrage des systèmes de référence). Listes de données SIG, utilisation de curseurs pour sélectionner, modifier et ajouter de nouveaux enregistrements aux classes d'entités et d'objets, création d'outils personnalisés à intégrer dans ArcToolbox.
  • Sessions pratiques axées sur la conception et le développement d'applications Python pour la gestion des données géographiques et le géotraitement dans ArcGIS.

Projet GISscience

Le cours fait partie d'un projet d'apprentissage plus large en SIGscience et SIG, développement d'applications et de mashups géographiques, applications environnementales. Soutenu par des profils professionnels et académiques de haut niveau, le projet comprend les cours suivants :

  • Introduction aux SIGsciences: principe et techniques de développement d'applications, de visualisation et d'analyse spatiale
  • Conception et développement d'applications logicielles SIG: modèle orienté objet, génie logiciel, programmation Python et son rôle dans le géotraitement dans ArcGIS
  • Conception et développement deApplications de cartographie Web: un cours théorique et pratique sur la conception et le développement de mashups GeoWeb 2.0, intégrant les services Web Google Maps et OpenLayer et la base de données spatio-temporelle PostgreSQL/PostGIS
  • Conception et développement d'applications logicielles SIG: génie logiciel, modèles OO et composants, programmation en VBA/ArcObjects for ArcGIS 8.x/9
  • Programmation JAVA orientée objet pour le développement d'applications SIG: une perspective Open Source vers des solutions autonomes et Web
  • Une introduction pratique aux bases de données et aux géodatabases: Un cours de base en deux modules avec des exemples en MySql, PostgreSQL/PostGIS, Oracle XE et ArcGIS/MsAccess pour la conception et le développement de bases de données relationnelles (I) et spatiales (II)
  • Business Geographics & Geodemographics
  • Mashups Google Maps
  • Gestion de projet environnemental
  • Modélisation appliquée de l'écoulement des eaux souterraines et des transports: gestion des eaux souterraines à l'échelle régionale pour l'évaluation des politiques d'approvisionnement en eau et à l'échelle locale pour la dépollution environnementale des sites contaminés

Logiciel

Python, QuantumGIS, ESRI ArcGIS

C'est pour qui?

Le cours s'adresse aux professionnels travaillant dans le secteur public et aux jeunes chercheurs intéressés par la personnalisation des tâches ArcGIS à l'aide de Python.

Lieu et dates

Le cours aura lieu au Centre d'éducation à l'environnement Casa Archilei, situé à Fano (PU) et facilement accessible depuis les principales liaisons de transport. Le cours aura une durée de 48 heures, avec 8 heures de cours, sur 8-9-29-30 mai et 12-13 juin 2015


Publication de scripts Python en tant que services de géotraitement : bonnes pratiques

Pourquoi Python au lieu de modèles ?

Si vous avez publié vos modèles ModelBuilder en tant que services de géotraitement (GP supplémentaires), vous vous êtes probablement rendu compte que cela peut être assez lourd. Si vous n'êtes pas passé à Python, je pense que vous devriez vraiment le faire. La création de scripts Python présente de sérieux avantages par rapport à la création de modèles dans le contexte de la publication de services GP. En effet, au cours du processus de publication, ArcGIS Server transformera les données et tout ce qui peut être nécessaire pour les modifier en variables, ce qui peut perturber le modèle si vous n'avez pas suivi les instructions relatives à la création de services GP. La règle d'or pour moi était que s'il y a plus de 10 objets dans le modèle, c'est le bon moment pour passer à Python. Une autre chose est que vous pouvez facilement apporter des modifications dans le code Python sans republier en revanche, vous devez republier le modèle chaque fois que vous souhaitez publier une version mise à jour du service GP. Enfin, étant donné que vous n'avez pas besoin de redémarrer le service GP lors de la mise à jour du fichier Python (contrairement à la republication du modèle qui nécessite le redémarrage du service), il n'y a pas de temps d'arrêt pour le service et les utilisateurs ne remarqueront rien.

Que se passe-t-il après la publication ?

Voyons ce qui se passe sous le capot. Vous avez exécuté votre outil de script dans ArcMap et le résultat a été publié en tant que service. Vous pouvez maintenant trouver votre service et toutes les données qui l'accompagnent dans le arcgisserver dossier quelque part sur votre lecteur de disque. Le chemin serait : C:arcgisserverdirectoriesarcgissystemarcgisinput\%GPServiceName%.GPServer

Vous trouverez un tas de fichiers dans le dossier. Inspectons certains d'entre eux :

  • serviceconfiguration.json – fournit un aperçu de toutes les propriétés du service, y compris son type d'exécution, ses capacités activées, son répertoire de sortie et bien d'autres. Ici, vous verrez tous les paramètres que vous voyez habituellement dans la fenêtre de l'éditeur de services.
  • manifeste.xml et manifest.json – fournit un aperçu des paramètres système qui ont été utilisés lors de la publication du service. Ce ne sont pas les fichiers que vous voudriez généralement inspecter.

Dans le dossier esriinfo/metadata, il y a un fichier nommé metadata.xml qui est vraiment utile car vous pouvez y voir à quelle date un service a été publié. Deux balises que vous devriez regarder sont :

Étant donné que ces informations ne sont pas exposées à partir de l'interface graphique dans ArcGIS Desktop ou ArcGIS Server Manager, c'est le seul moyen de savoir à quelle heure le service a été créé. Ces informations peuvent être très utiles lorsque vous n'êtes pas sûr des versions publiées.

À l'intérieur de extrait/v101 dossier, vous trouverez le fichier de résultat et la boîte à outils avec laquelle vous avez travaillé lors de la publication du service GP. Ici, vous trouverez également un dossier nommé d'après le dossier dans lequel votre fichier Python source a été stocké et contenant le fichier Python source.

Les bonnes pratiques pour organiser le code et les fichiers Python ?

Regardons à l'intérieur du fichier Python. Vous avez peut-être remarqué que lors de la publication, certaines des variables que vous avez déclarées ont été renommées en g_ESRI_variable_%id%. La règle générale est que vous ne devriez pas vraiment utiliser de chaînes, vous pouvez transformer les chemins d'accès aux ensembles de données et les noms en variables. Bien sûr, vous n'êtes pas obligé de le faire car Esri mettra à jour ces variables en ligne, mais il est tellement plus difficile de refactoriser avec ces noms de variables, vous feriez donc mieux d'organiser votre code correctement dès le début.

Si vous exécutez l'outil de script dans ArcGIS, la géodatabase temporaire se trouve à C:Users\%user%AppDataLocalTempscratch.gdb. Cependant, après la publication de l'outil, le service obtiendra une nouvelle géodatabase temporaire. Si vous devez inspecter les données intermédiaires créées, accédez à la géodatabase scratch (le chemin peut être récupéré avec le arcpy.env.scratchGDB) qui sera une nouvelle géodatabase fichier dans chaque exécution du service GP avec la notation suivante : c:arcgisserverdirectoriesarcgisjobs\%service%_gpserver\%jobid%scratchscratch.gdb.

Gardez à l'esprit que le service GP utilisera toujours son dossier de tâches de serveur local pour écrire des données intermédiaires et que ce comportement ne peut pas être modifié. Mais avoir le service qui écrit dans l'espace de travail de travail est en réalité beaucoup plus sûr que d'écrire dans un emplacement désigné sur le disque. En effet, il n'y a aucune chance que plusieurs instances de service GP essaient d'écrire au même emplacement en même temps, ce qui peut entraîner des problèmes de blocage et de simultanéité. N'oubliez pas que chaque tâche GP soumise sera affectée à un nouveau dossier temporaire unique et à une nouvelle géodatabase dans le dossier arcgisjobs.

Assurez-vous de ne pas utiliser arcpy.env.espace de travail dans votre code, déclarez toujours une variable de chemin et attribuez-lui le dossier ou une connexion à la géodatabase. Pour le chemin des ensembles de données, utilisez os.path.join() au lieu de concaténer des chaînes. Pour des raisons de performances, utilisez en mémoire espace de travail pour les données intermédiaires avec la notation suivante :

Vous pouvez profiter de l'utilisation en mémoire espace de travail, mais à des fins de dépannage, il peut être préférable d'écrire quelque chose sur le disque pour l'inspecter plus tard. Dans ce cas, il peut être utile de créer une variable appelée quelque chose comme gpTempPlace que vous pouvez modifier en “en mémoire” ou une géodatabase fichier locale selon que vous exécutez un code propre en production ou que vous dépannez le service dans l'environnement intermédiaire.

Assurez-vous de ne pas utiliser le même nom pour la variable et le nom de la classe d'entités/du champ. Cela conduit parfois à des résultats inattendus lors de l'exécution du service. Il peut être utile d'ajouter "_fc" à la fin pour la variable de classe d'entités et "_domaine" pour la variable de champ. De cette façon, vous pourrez également les distinguer beaucoup plus facilement. Il en va de même pour les noms des classes d'entités et des couches d'entités (créées avec l'outil Générer une couche d'entités GP).

N'oubliez pas que vous pouvez ajuster le niveau de journalisation d'ArcGIS Server (dans le gestionnaire) ou du service GP uniquement (fait dans la fenêtre Éditeur de service) à des fins de dépannage. Il est souvent utile de définir le paramètre Niveau du message sur le niveau Info avant de publier le service GP en production, car cela vous donnera des informations détaillées sur ce qui s'est exactement passé lors de l'exécution du service GP. Vous pouvez accéder à ces informations à partir de la fenêtre Résultats dans ArcMap ou à partir des journaux d'ArcGIS Server dans le gestionnaire.

Comment mettre à jour le service publié ?

Un mot spécial devrait être réservé aux utilisateurs qui ont besoin de publier souvent les services GP tout en apportant des modifications au code. Il est important de comprendre qu'après la publication du service GP, le fichier de code Python copié et la boîte à outils ne maintiennent aucune connexion avec le fichier Python source et la boîte à outils source que vous avez créées. Cela implique qu'après avoir apporté des modifications à l'outil de script, vous devez transmettre ces modifications au service publié sur le serveur.

Il existe deux types de modifications que vous pouvez apporter à votre projet source : les paramètres de l'outil dans les propriétés de l'outil de script et le code Python. Gardez à l'esprit que vous ne pouvez pas modifier la boîte à outils publiée. Par conséquent, si vous avez ajouté un nouveau paramètre ou modifié un type de données de paramètre existant, vous devrez republier le service. Cependant, si vous n'avez modifié que le code source du script Python, il n'est pas nécessaire de republier l'ensemble du service car il vous suffit de remplacer le contenu dans le fichier Python.

Même si vous pouvez automatiser le workflow de publication de services avec Python, il faut encore du temps pour déplacer la boîte à outils et les fichiers de code Python. Par conséquent, vous pouvez gagner beaucoup de temps en trouvant un moyen de remplacer le code Python dans le fichier de code Python publié. Pour mettre à jour le fichier de code Python, vous n'avez en réalité que deux options : vous pouvez soit copier et remplacer le fichier publié par le fichier source mis à jour, soit copier/coller le code source. Cette approche peut fonctionner si vous avez un petit script Python et que tous les chemins d'accès aux données sur votre machine et sur le serveur sont les mêmes. Cela peut être une solution plausible lorsque vous avez Desktop et Server sur la même machine. Si vous disposez d'un fichier de configuration dans lequel le fichier de code source Python obtient tous les chemins et noms de jeux de données, vous pouvez également remplacer en toute sécurité le fichier Python publié. Cependant, cela reste une chose supplémentaire à faire.

La meilleure pratique à laquelle je suis arrivé en travaillant pendant deux ans sur les services GP consiste à diviser les fichiers de code et l'outil lui-même. Laisse-moi expliquer.

Comment séparer la logique de la boîte à outils et le code Python ?

Créez un fichier Python (un script appelant) qui contiendra tous les importer instructions pour les modules Python et vos fichiers. En ajoutant le chemin d'accès à vos fichiers Python, vous pourrez importer les fichiers Python sur lesquels vous travaillez. Ceci est très utile lorsque votre service GP se compose non seulement d'un fichier mais de plusieurs modules.

Ce fichier doit également inclure tous les paramètres exposés dans l'outil de script.

Ensuite, vous définissez une fonction principale qui sera exécutée lors de l'exécution du service GP. Vous appelez les fonctions définies dans les fichiers que vous avez importés.

Il est également pratique d'ajouter une logique de gestion des paramètres lorsque vous exécutez l'outil de script dans ArcMap, vous fournissez des valeurs pour l'outil qui deviendront des valeurs par défaut visibles lorsque les utilisateurs exécuteront le service GP à partir d'ArcMap ou de toute autre interface personnalisée. Afin d'éviter cela, vous pouvez simplement laisser ces paramètres vides, puis renvoyer une sortie vide à des fins de publication de l'outil de script GP uniquement.

Créez un outil de script à partir de ce fichier Python appelant définissant les paramètres et leurs types de données. Une fois l'outil publié en tant que service GP, vous pouvez travailler avec les fichiers Python qui ne contiendront que le code qui fait réellement le travail.

Après avoir effectué et enregistré les modifications du code, n'hésitez pas à exécuter le service GP directement – le fichier Python de l'appelant (publié en tant que service GP) importera le fichier de code1 dans le dossier que vous avez spécifié et exécutera le code. Il n'est pas nécessaire de redémarrer le service GP ou de réimporter votre module de mise à jour.