Existem alguns recursos interessantes no ArcToolbox que podemos usar, mas por algum motivo, isso NÃO está funcionando corretamente. Nem me lança um erro.
Meu software está rodando no ArcMap, então não é necessário AoInitialize novamente, 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");
}
Este é um exemplo de código que estou tendo aqui. Gerei o conjunto de ferramentas DataManagement, mas não consegui encontrar o arquivo para assiná-lo.
Este código apenas me dá um erro. é por causa da assinatura?
Também tentei o contrário, usando IVariantArray e chamando a partir do nome da ferramenta, sem sucesso. Sou só eu ou ...?
Alguém pode me apontar uma solução "melhor"? Preciso executar vários processos já construídos no ArcToolbox que realmente não quero duplicar.
arcobjects
geoprocessing
.net
George Silva
fonte
fonte
Respostas:
No código abaixo, a função multi2single funciona para mim na 10.0. Não pude testar o Feature2Point porque não tenho uma licença ArcInfo, pode?
Eu recebo esta saída no VS:
fonte
Você está correto, pois não há necessidade de AoInitialize. Como você descobriu, a depuração com o objeto de geoprocessador é uma dor no pescoço.
O que você precisa fazer é ler as mensagens, as filas de aviso e erro após cada chamada, para verificar se há problemas. Não existe a mesma sorte que confiar na entrega padrão de erros do .NET.
Tente isso após cada chamada de execução (observe o GetMessageS, não o GetMessage) ...
fonte