Il existe de belles fonctionnalités dans ArcToolbox que nous pouvons utiliser, mais pour une raison quelconque, cela ne fonctionne PAS correctement. Cela ne me lance même pas d'erreur.
Mon logiciel s'exécute dans ArcMap, donc pas besoin de AoInitialize à nouveau, corret?
public void Execute()
{
InitializeProduct();
try
{
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
FeatureToPoint featureToPoint = new FeatureToPoint();
string outputPathName = CurrentWorkspace.PathName + "\\teste_centroide";
featureToPoint.in_features = InputFeatureClass;
featureToPoint.out_feature_class = outputPathName;
featureToPoint.point_location = "INSIDE";
IGeoProcessorResult result = (IGeoProcessorResult)gp.Execute(featureToPoint, null);
if (result == null)
{
for (int i = 0; i <= gp.MessageCount - 1; i++)
{
Console.WriteLine(gp.GetMessage(i));
}
}
IGPUtilities gpUtils = new GPUtilitiesClass();
this.OutputFeatureClass = gpUtils.OpenFeatureClassFromString(outputPathName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "\r\n");
}
Ceci est un exemple de code que j'ai ici. J'ai généré l'assembly d'outils DataManagement, mais je n'ai pas pu trouver le fichier pour le signer.
Ce code me donne juste une erreur. est-ce à cause de la signature?
J'ai également essayé dans l'autre sens, en utilisant IVariantArray et en appelant depuis le nom de l'outil, sans succès. Est-ce juste moi ou ...?
Quelqu'un peut-il me désigner une solution «plus agréable»? J'ai besoin d'exécuter plusieurs processus déjà construits dans ArcToolbox que je ne veux vraiment pas dupliquer.
la source
Réponses:
Dans le code ci-dessous, la fonction multi2single fonctionne pour moi dans 10.0. Je n'ai pas pu tester Feature2Point car je n'ai pas de licence ArcInfo, pouvez-vous?.
J'obtiens cette sortie en VS:
la source
Vous avez raison, car il n'y a pas besoin d'AoInitialize. Comme vous l'avez découvert, le débogage avec l'objet géoprocesseur est une douleur dans le cou.
Ce que vous devez faire, lisez le message, l'avertissement et la file d'attente d'erreurs après chaque appel, pour vérifier les problèmes. Il n'y a pas de chance de s'appuyer sur la gestion des erreurs .NET standard.
Essayez ceci après chaque appel d'exécution (notez GetMessageS, pas GetMessage) ...
la source