W ArcToolbox jest kilka fajnych funkcji, których możemy użyć, ale z jakiegoś powodu NIE działa ono poprawnie. To nawet nie rzuca mi błędu.
Moje oprogramowanie działa w ArcMap, więc nie trzeba ponownie inicjować Ao, prawda?
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");
}
To jest przykład kodu, który mam tutaj. Wygenerowałem zestaw narzędzi DataManagement, ale nie mogłem znaleźć pliku do podpisania.
Ten kod po prostu daje mi błąd. czy to z powodu podpisania?
Próbowałem też w drugą stronę, używając IVariantArray i dzwoniąc z nazwy narzędzia, bez powodzenia. Czy to tylko ja czy ...?
Czy ktoś może wskazać mi „ładniejsze” rozwiązanie? Muszę uruchomić kilka procesów, które są już wbudowane w ArcToolbox, których tak naprawdę nie chcę powielać.
arcobjects
geoprocessing
.net
George Silva
źródło
źródło
Odpowiedzi:
W poniższym kodzie funkcja multi2single działa dla mnie w wersji 10.0. Nie mogłem przetestować Feature2Point, ponieważ nie mam licencji ArcInfo, prawda?
Otrzymuję ten wynik w VS:
źródło
Masz rację, ponieważ nie ma potrzeby AoInitialize. Jak odkryłeś, debugowanie za pomocą obiektu geo-procesorowego powoduje ból szyi.
Co musisz zrobić, przeczytaj kolejkę komunikatów, ostrzeżeń i błędów po każdym połączeniu, aby sprawdzić problemy. Nie ma takiego szczęścia, jak poleganie na standardowej obsłudze błędów .NET.
Spróbuj tego po każdym wywołaniu (zwróć uwagę na GetMessageS, a nie GetMessage) ...
źródło