Ada beberapa fitur bagus di ArcToolbox yang dapat kita gunakan, tetapi untuk beberapa alasan, ini TIDAK berfungsi dengan baik. Bahkan tidak membuat saya kesalahan.
Perangkat lunak saya berjalan di dalam ArcMap, jadi tidak perlu AoInitialize lagi, 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");
}
Ini adalah contoh kode yang saya miliki di sini. Saya menghasilkan perakitan alat DataManagement, tetapi saya tidak dapat menemukan file untuk menandatanganinya.
Kode ini hanya memberi saya kesalahan. apakah karena penandatanganan?
Saya sudah mencoba cara lain juga, menggunakan IVariantArray dan memanggil dari nama alat, tanpa berhasil. Apakah hanya saya atau ...?
Adakah yang bisa memberi saya solusi "lebih baik"? Saya perlu menjalankan beberapa proses yang sudah dibangun di ArcToolbox yang saya benar-benar tidak ingin tiru.
sumber
Jawaban:
Dalam kode di bawah ini, fungsi multi2single bekerja untuk saya di 10.0. Saya tidak dapat menguji Feature2Point karena saya tidak memiliki lisensi ArcInfo, bukan?
Saya mendapatkan output ini dalam VS:
sumber
Anda benar karena tidak perlu untuk AoInitialize. Seperti yang telah Anda temukan, debugging dengan objek geo-prosesor adalah rasa sakit di leher.
Yang perlu Anda lakukan adalah membaca pesan, antrian peringatan dan kesalahan setelah setiap panggilan, untuk memeriksa masalah. Tidak ada keberuntungan mengandalkan mengandalkan standar .NET error.
Coba ini setelah setiap panggilan dijalankan (perhatikan GetMessageS, bukan GetMessage) ...
sumber