Hay algunas características interesantes en ArcToolbox que podemos usar, pero por alguna razón, esto NO funciona correctamente. Ni siquiera me arroja un error.
Mi software se está ejecutando dentro de ArcMap, por lo que no es necesario volver a inicializar, ¿corregir?
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 es un ejemplo de código que estoy teniendo aquí. Generé el conjunto de herramientas de DataManagement, pero no pude encontrar el archivo para firmarlo.
Este código solo me da un error. ¿Es por la firma?
También he intentado lo contrario, usando IVariantArray y llamando desde el nombre de la herramienta, sin éxito. ¿Soy solo yo o ...?
¿Alguien puede señalarme una solución "más agradable"? Necesito ejecutar varios procesos que ya están construidos en ArcToolbox que realmente no quiero duplicar.
fuente
Respuestas:
En el siguiente código, la función multi2single funciona para mí en 10.0. No pude probar Feature2Point ya que no tengo una licencia de ArcInfo, ¿puedes?
Me sale esta salida en VS:
fuente
Tienes razón en que no hay necesidad de AoInitialize. Como has descubierto, la depuración con el objeto del geoprocesador es un dolor de cabeza.
Lo que debe hacer es leer el mensaje, la advertencia y la cola de errores después de cada llamada, para verificar si hay problemas. No existe la suerte de confiar en la entrega estándar de errores .NET.
Intente esto después de cada llamada de ejecución (tenga en cuenta GetMessageS, no GetMessage) ...
fuente