მეტი

აცილების თავიდან აცილება ArcObjects– ის გეოპროცესირებით .NET– ით?

აცილების თავიდან აცილება ArcObjects– ის გეოპროცესირებით .NET– ით?


ArcToolbox– ში არის რამდენიმე კარგი თვისება, რომლის გამოყენებაც შეგვიძლია, მაგრამ რატომღაც, ეს არ მუშაობს სწორად. ეს არც კი მაძლევს შეცდომას.

ჩემი პროგრამული უზრუნველყოფა მუშაობს ArcMap– ში, ამიტომ აღარ არის საჭირო AoInitialize, corret?

public void Execute () {InitializeProduct (); სცადეთ {გეოპროცესორი gp = ახალი გეოპროცესორი (); gp.OverwriteOutput = ჭეშმარიტი; FeatureToPoint featureToPoint = ახალი FeatureToPoint (); string outputPathName = CurrentWorkspace.PathName + " teste_centroide"; featureToPoint.in_features = InputFeatureClass; featureToPoint.out_feature_class = outputPathName; featureToPoint.point_location = "შიგნით"; IGeoProcessorResult შედეგი = (IGeoProcessorResult) gp.Execute (featureToPoint, null); if (შედეგი == null) {for (int i = 0; i <= gp.MessageCount - 1; i ++) {Console.WriteLine (gp.GetMessage (i)); }} IGPUtilities gpUtils = ახალი GPUtilitiesClass (); this.OutputFeatureClass = gpUtils.OpenFeatureClassFromString (outputPathName); } დაჭერა (გამონაკლისი გამონაკლისი) {MessageBox.Show (მაგ. შეტყობინება + " r  n"); }

ეს არის კოდის მაგალითი, რომელიც მე აქ მაქვს. მე შევქმენი DataManagement ინსტრუმენტების ასამბლეა, მაგრამ ვერ ვიპოვე ფაილი მის ხელმოსაწერად.

ეს კოდი მხოლოდ შეცდომას მაძლევს. ხელმოწერის გამო არის?

მეც ვცადე სხვა გზა, IVariantArray- ის გამოყენებით და ინსტრუმენტის სახელიდან გამოძახებით, წარმატების გარეშე. მხოლოდ მე ვარ თუ ...?

ვინმეს შეუძლია მიუთითოს "უკეთესი" გამოსავალი? მე მჭირდება რამდენიმე პროცესის გაშვება, რომელიც უკვე ჩაშენებულია ArcToolbox– ში, რომლის დუბლირება მე ნამდვილად არ მინდა.


ქვემოთ მოყვანილ კოდში, multi2single ფუნქცია მუშაობს ჩემთვის 10.0. მე ვერ შევამოწმე Feature2Point რადგან არ მაქვს ArcInfo ლიცენზია, შეგიძლია ?.

საჯარო კლასი ტესტი {public static void TestGP (IApplication app) {IMxDocument mxDoc = (IMxDocument) app.Document; //Feat2Point((IFeatureLayer)mxDoc.FocusMap.get_Layer(0), @"D:  Projects  AmberGIS  Forums  forumtest.gdb  f2p"); Multi2Single ((IFeatureLayer) mxDoc.FocusMap.get_Layer (0), @"D:  Projects  AmberGIS  Forums  forumtest.gdb  m2s"); } public static void Multi2Single (IFeatureLayer inLayer, string outPath) {MultipartToSinglepart m2s = new MultipartToSinglepart (); m2s.in_features = inLayer.FeatureClass; m2s.out_feature_class = outPath; შესრულება (m2s); } public static void Feat2Point (IFeatureLayer inLayer, string outPath) {FeatureToPoint f2p = new FeatureToPoint (); f2p.in_features = inLayer.FeatureClass; f2p.out_feature_class = outPath; შესრულება (f2p); } public static void Execute (IGPProcess proc) {გეოპროცესორი gp = ახალი გეოპროცესორი (); gp.AddOutputsToMap = ჭეშმარიტი; gp.OverwriteOutput = ჭეშმარიტი; gp.RegisterGeoProcessorEvents ((IGeoProcessorEvents) ახალი GPEvents ()); IGeoProcessorResult2 შედეგი = gp.Ecuteute (proc, null) როგორც IGeoProcessorResult2; IGPMessages msgs = result.GetResultMessages (); for (int i = 0; i

მე ვიღებ ამ გამომავალს VS– ში:

PreToolExecute PostToolExecute2 MultipartToSinglepart შესრულება: MultipartToSinglepart GPL0 D:  Projects  AmberGIS  Forums  forumtest.gdb  m2s esriGPMessageTypeProcessDefinition დაწყების დრო: ხუთ სექტემბერი 11:32:44 2010 წ. 7.00 წამი) esriGPMessageTypeProcessStop

თქვენ მართალი ხართ იმით, რომ არ არის საჭირო AoInitialize. როგორც თქვენ აღმოაჩინეთ, გეო-პროცესორის ობიექტთან გამართვა არის ტკივილი კისერზე.

რა გჭირდებათ იმისათვის, რომ წაიკითხოთ შეტყობინება, გაფრთხილება და შეცდომების რიგები ყოველი ზარის შემდეგ, პრობლემების შესამოწმებლად. არ არსებობს ისეთი იღბალი, როგორც სტანდარტული .NET შეცდომის გადაცემა.

სცადეთ ეს ყოველი ზარის შესრულების შემდეგ (გაითვალისწინეთ GetMessageS და არა GetMessage)…

Console.WriteLine ("შეტყობინებები:" + gp.GetMessages (1)); Console.WriteLine ("გაფრთხილებები:" + gp.GetMessages (2)); Console.WriteLine ("შეცდომები:" + gp.GetMessages (3));