В ArcToolbox есть несколько приятных функций, которые мы можем использовать, но по некоторым причинам это НЕ работает должным образом. Это даже не дает мне ошибки.
Мое программное обеспечение работает внутри ArcMap, поэтому нет необходимости снова AoInitialize, не так ли?
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");
}
Это пример кода у меня здесь. Я сгенерировал сборку инструментов DataManagement, но не смог найти файл для его подписи.
Этот код просто дает мне ошибку. это из-за подписания?
Я пробовал и другой путь, используя IVariantArray и вызывая имя инструмента, но безуспешно. Это только я или ...?
Кто-нибудь может указать мне «более хорошее» решение? Мне нужно запустить несколько процессов, уже встроенных в ArcToolbox, которые я действительно не хочу дублировать.
arcobjects
geoprocessing
.net
Джордж Сильва
источник
источник
Ответы:
В приведенном ниже коде функция multi2single работает для меня в 10.0. Я не смог протестировать Feature2Point, так как у меня нет лицензии ArcInfo, не так ли?
Я получаю этот вывод в VS:
источник
Вы правы в том, что нет необходимости в AoInitialize. Как вы обнаружили, отладка с помощью объекта геопроцессора - это боль в шее.
Что нужно сделать, так это читать сообщения, предупреждения и очереди ошибок после каждого вызова, чтобы проверить наличие проблем. Нет такой удачи, как полагаться на стандартную обработку ошибок .NET.
Попробуйте это после каждого вызова execute (обратите внимание на GetMessageS, а не на GetMessage) ...
источник