। নেট সঙ্গে জিওপ্রোসেসিং আরকোবজেক্টস থেকে ব্যর্থতা এড়ানো?


14

আর্টটুলবক্সে কয়েকটি দুর্দান্ত বৈশিষ্ট্য রয়েছে যা আমরা ব্যবহার করতে পারি তবে কিছু কারণে এটি সঠিকভাবে কাজ করছে না। এমনকি এটি আমার ত্রুটিও ছুঁড়ে না।

আমার সফ্টওয়্যারটি আর্কম্যাপের অভ্যন্তরে চলছে, সুতরাং আবার এওআইনাইটায়ালাইজ করার দরকার নেই, তাই না?

    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");
        }

এটি একটি কোড উদাহরণ আমি এখানে করছি। আমি ডেটা ম্যানেজমেন্ট সরঞ্জামগুলি সমাবেশ তৈরি করেছি, তবে সাইন ইন করার জন্য আমি ফাইলটি খুঁজে পেলাম না।

এই কোডটি আমাকে কেবল একটি ত্রুটি দেয়। এটা কি স্বাক্ষরের কারণে?

আমি অন্য উপায়েও চেষ্টা করেছি, আইভায়ারেন্টআরে ব্যবহার করে এবং কোনও নাম ছাড়াই সরঞ্জাম নাম থেকে কল করা। এটা কি আমি নাকি ...?

কেউ কি আমাকে "ভাল" সমাধানটি নির্দেশ করতে পারেন? আমার বেশ কয়েকটি প্রক্রিয়া চালানো দরকার যা ইতিমধ্যে আর্টটুলবক্সে নির্মিত যা সত্যই আমি সদৃশ করতে চাই না।


আপনার প্রশ্নের পরে আপনি কী ত্রুটি উল্লেখ করেছেন?
ড্যান্ডি

হ্যালো ড্যান্ডি এটি ত্রুটি ছুঁড়ে না, এটি কেবল ব্যর্থ হয়।
জর্জ সিলভা

উত্তর:


14

নীচের কোডটিতে, মাল্টি 2সিংল ফাংশন আমার জন্য 10.0 এ কাজ করে। আমি ফিচার 2 পয়েন্ট পরীক্ষা করতে পারিনি যেহেতু আমার কাছে আরকিআইএনফো লাইসেন্স নেই, আপনি কি পারেন ?.

public class Test
{
    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;
        Execute(m2s);
    }

    public static void Feat2Point(IFeatureLayer inLayer, string outPath)
    {
        FeatureToPoint f2p = new FeatureToPoint();
        f2p.in_features = inLayer.FeatureClass;
        f2p.out_feature_class = outPath;
        Execute(f2p);
    }

    public static void Execute(IGPProcess proc)
    {
        Geoprocessor gp = new Geoprocessor();
        gp.AddOutputsToMap = true;
        gp.OverwriteOutput = true;
        gp.RegisterGeoProcessorEvents((IGeoProcessorEvents)new GPEvents());
        IGeoProcessorResult2 result = gp.Execute(proc, null) as IGeoProcessorResult2;
        IGPMessages msgs = result.GetResultMessages();
        for(int i=0;i<msgs.Count;i++)
            Debug.Print("{0} {1}", msgs.GetMessage(i).Description, msgs.GetMessage(i).Type);            
    }
}
public class GPEvents : IGeoProcessorEvents3, IGeoProcessorEvents 
{
    #region IGeoProcessorEvents3 Members
    public void OnProcessMessages(IGeoProcessorResult result, IGPMessages pMsgs)
    {
        Debug.Print("OnProcessMessages {0}", result.Status);
    }
    public void OnProgressMessage(IGeoProcessorResult result, string message)
    {
        Debug.Print("OnProgressMessages {0}", result.Status);
    }
    public void OnProgressPercentage(IGeoProcessorResult result, double percentage)
    {
        Debug.Print("OnProgressPercentage {0}", result.Status);
    }
    public void OnProgressShow(IGeoProcessorResult result, bool Show)
    {
        Debug.Print("OnProgressShow {0}", result.Status);
    }
    public void PostToolExecute(IGeoProcessorResult result)
    {
        Debug.Print("PostToolExecute {0}", result.Status);
    }
    public void PreToolExecute(IGeoProcessorResult result)
    {
        Debug.Print("PreToolExecute {0}",result.Status);
    }
    #endregion

    #region IGeoProcessorEvents Members

    void IGeoProcessorEvents.OnMessageAdded(IGPMessage message)
    {
        Debug.Print("OnMessageAdded {0} {1}", message.Description, message.Type);
        throw new NotImplementedException();
    }

    void IGeoProcessorEvents.PostToolExecute(IGPTool Tool, ESRI.ArcGIS.esriSystem.IArray Values, int result, IGPMessages Messages)
    {
        Debug.Print("PostToolExecute2 {0}", Tool.Name);
    }

    void IGeoProcessorEvents.PreToolExecute(IGPTool Tool, ESRI.ArcGIS.esriSystem.IArray Values, int processID)
    {
        if (Tool.IsLicensed())
            Debug.Print("PreToolExecute");
        else
            Debug.Print("tool is not licensed to run");
    }

    void IGeoProcessorEvents.ToolboxChange()
    {
        Debug.Print("ToolboxChange");
    }

    #endregion
}

আমি ভিএস এ এই আউটপুট পেতে:

PreToolExecute
PostToolExecute2 MultipartToSinglepart
Executing: MultipartToSinglepart GPL0 D:\Projects\AmberGIS\Forums\forumtest.gdb\m2s esriGPMessageTypeProcessDefinition
Start Time: Thu Sep 02 11:32:44 2010 esriGPMessageTypeProcessStart
Succeeded at Thu Sep 02 11:32:51 2010 (Elapsed Time: 7.00 seconds) esriGPMessageTypeProcessStop

সেই ত্রুটিটি পরিচালনা করা দুর্দান্ত কার্ক। IGeoProcessorEvent ইন্টারফেস সম্পর্কে জানতে জিওপ্রসেসর ব্যবহার করে আমি কখনই পর্যাপ্ত সময় ব্যয় করিনি। এটা ইশারা জন্য ধন্যবাদ!
ব্লিঙ্কবিল

আপনার কোড কাজ করে! আরকঅবজেক্টস আমাকে পছন্দ করে না।
জর্জ সিলভা

4

আপনি সঠিক যে AoInitialize প্রয়োজন নেই। যেমন আপনি আবিষ্কার করেছেন, জিও-প্রসেসর অবজেক্টের সাথে ডিবাগ করা গলায় ব্যথা।

সমস্যাগুলি যাচাই করার জন্য আপনাকে যা করতে হবে তা প্রতিটি কলের পরে বার্তাটি, সতর্কতা এবং ত্রুটির সারিটি পড়ুন। মানক .NET ত্রুটি হস্তান্তর উপর নির্ভর করে যেমন ভাগ্য নেই।

প্রতিটি সম্পাদন কল করার পরে এটি চেষ্টা করুন (গেটম্যাসেজগুলি নোট করুন, গেটমেসেজ নয়) ...

Console.WriteLine("Messages: " + gp.GetMessages(1));
Console.WriteLine("Warnings: " + gp.GetMessages(2));
Console.WriteLine("Errors: " + gp.GetMessages(3));

হ্যালো জ্যেষ্ঠাক! কয়েক ঘন্টা হেড-বেং করার পরে আমি হাল ছেড়ে দিয়েছি, তবে আমি শীঘ্রই আবার এটি চেষ্টা করব এবং আমি এই প্রশ্নটির অনুসরণ করব। আপনি যখন সমাবেশটি প্রথম তৈরি করেন তখন এটি সাইন ইন করার ক্ষেত্রে সমস্যা হতে পারে?
জর্জ সিলভা

হাই জর্জ, এটি সম্ভবত একটি স্বাক্ষর করার সমস্যা নয়। যদি আপনার কাছে ফিচারটিপয়েন্ট (বা অন্য কোনও জিওপ্রসেসিং সরঞ্জাম) এর প্যারামগুলিতে একটি সাধারণ সিনট্যাক্স / পাথ / টাইপ ত্রুটি থাকে তবে এটি কোনও বিজ্ঞপ্তি ছাড়াই ব্যর্থ হবে, সুতরাং ত্রুটি সারিটির পরিদর্শন। আমি আর জিওপ্রসেসিংয়ের সরঞ্জামগুলির সাথে খুব কমই বিরক্ত হই। এটি বেশিরভাগ ক্ষেত্রে এটি কাজ করতে এত দীর্ঘ সময় নেয়, কারণ ডিবাগিংটি জাহান্নাম।
BlinkyBill

এটি একটি ব্যথা, কারণ আমার সেন্ট্রয়েড পরীক্ষা করা দরকার, তবে কোনও জিওপ্রসেসিং সরঞ্জাম ব্যবহার না করে আমার যে পরিবর্তনগুলি করা দরকার তা কীভাবে আমি যুক্ত করতে পারি তা আমি নিশ্চিত নই। আমাকে বহুভুজ স্তর পরিবর্তন করতে হবে, তবে পরীক্ষার জন্য এটি সেন্ট্রয়েডের অধীনে করা দরকার। আমি আমার ফলাফলগুলি ফিল্টার করার জন্য একটি স্থানিক জিজ্ঞাসা ব্যবহার করছি, তাই আমি এটিকে ফাঁকা করব।
জর্জ সিলভা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.