Es gibt einige nette Funktionen in ArcToolbox, die wir verwenden können, aber aus irgendeinem Grund funktioniert dies NICHT richtig. Es macht mir nicht einmal einen Fehler.
Meine Software wird in ArcMap ausgeführt, daher muss AoInitialize nicht erneut ausgeführt werden.
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");
}
Dies ist ein Codebeispiel, das ich hier habe. Ich habe die DataManagement-Toolassembly generiert, die Datei zum Signieren jedoch nicht gefunden.
Dieser Code gibt mir nur einen Fehler. liegt es an der signierung?
Ich habe es auch andersherum versucht, indem ich IVariantArray verwendet und vom Toolnamen aus aufgerufen habe, ohne Erfolg. Bin es nur ich oder ...?
Kann mir jemand eine "schönere" Lösung zeigen? Ich muss mehrere Prozesse ausführen, die bereits in ArcToolbox erstellt wurden und die ich wirklich nicht duplizieren möchte.
quelle
Antworten:
Im folgenden Code funktioniert die Multi2Single-Funktion für mich in 10.0. Ich konnte Feature2Point nicht testen, da ich keine ArcInfo-Lizenz habe.
Ich bekomme diese Ausgabe in VS:
quelle
Sie haben Recht, dass AoInitialize nicht erforderlich ist. Wie Sie herausgefunden haben, ist das Debuggen mit dem Geoprozessorobjekt eine harte Angelegenheit.
Was Sie dazu benötigen, lesen Sie die Warteschlangen für Nachrichten, Warnungen und Fehler nach jedem Anruf, um nach Problemen zu suchen. Es gibt kein Glück, sich auf die standardmäßige .NET-Fehlerbehandlung zu verlassen.
Versuchen Sie dies nach jedem Ausführungsaufruf (beachten Sie die GetMessageS, nicht GetMessage) ...
quelle