কীভাবে IRelationalOperator2 এবং জ্যামিতি ব্যাগ ব্যবহার করবেন


9

আমি IRelationalOperator2 এর ইসনয়ার পদ্ধতিটি ব্যবহার করতে চাই। ডকুমেন্টেশন বলছেন যে GeometryBag IRelationalOperator2 ইন্টারফেস সমর্থন করে। তবে এটি কেবল কাজ করে না এবং একটি ব্যতিক্রমের ফলস্বরূপ "... COM অবজেক্টটি কাস্ট করতে অক্ষম ... এ জাতীয় কোনও ইন্টারফেস সমর্থিত নয় ..."

IRelationalOperator2 relationalOperator = (IRelationalOperator2)geometry;

একই কোড আইআরলেশনাল অপেরেটরের সাথে সূক্ষ্মভাবে কাজ করে তবে ইসনয়ারের কোনও পদ্ধতি নেই:

IRelationalOperator relationalOperator = (IRelationalOperator)geometry;

কী ভুল - কোড, ডকুমেন্টেশন বা এটি একটি বাগ? "জ্যামিতি" জ্যামিতি টাইপ এসরিজিওমিট্রি ব্যাগের একটি জ্যামিতি এবং এতে কিছু পাইলাইন থাকে। .NET ব্যতিক্রম পেতে আমি সোজা কাস্ট ব্যবহার করেছি।


আমি বলতে ভুলে গেছি যে আমি 10.0 এসপি 2 ব্যবহার করি
জর্জি হেফেল

1
এই সমস্যাটি এখনও আরকগিস 10.1 এ রয়েছে (এবং আরকগিস 10.0 এসপি 5)। দুর্ভাগ্যক্রমে কেউ এখন পর্যন্ত এই বাগটি ইএসআরআইতে প্রেরণ করেনি, তাই আমি স্থানীয় বিতরণকারীকে জানিয়েছিলাম এবং ইএসআরআই এখন বাগটি নিবন্ধভুক্ত করেছে। আমি আশা করি এটি পরবর্তী পরিষেবা প্যাকের সাথে ঠিক হয়ে যাবে।
dpalmetz

উত্তর:


6

এখানে অবশ্যই স্পষ্টত কিছু চলছে 10.0 এসপি 2 দিয়ে।

আমি IRelationalOperator2 এ জ্যামিতি ব্যাগ নিক্ষেপ করতে পারি, অন্যথায় এই পরীক্ষাটি "কাস্ট করতে অক্ষম" বলবে, এবং আমি একটি নাল রেফারেন্স ব্যতিক্রম পাব।

তবে ইসনয়ারের প্রথম কলটিতে আমি ব্যতিক্রম পাই।

System.InvalidCastException occurred
  Message=Unable to cast COM object of type 'ESRI.ArcGIS.Geometry.GeometryBagClass' to interface type 'ESRI.ArcGIS.Geometry.IRelationalOperator2'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{839F5C7E-ED5F-4B3F-8F97-C0A9CC4817EE}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
  Source=ESRI.ArcGIS.Geometry

পরীক্ষাটি এখানে:

private void GBTest(IPoint pnt)
{
    // this line does not fail
    var relop = new GeometryBagClass() as IRelationalOperator2;

    if (relop == null)
        Debug.Print("unable to cast"); // this doesn't print out

    var coll = relop as IGeometryCollection;
    coll.AddGeometry(pnt);
    //((ISpatialIndex)coll).AllowIndexing = true;
    //((ISpatialIndex)coll).Invalidate();

    var pnt2 = ((IClone)pnt).Clone() as IPoint;
    ((ITransform2D)pnt2).Move(100.0, 100.0);
    if (relop.IsNear(pnt2, 1000.0)) // exception here
        Debug.Print("test 1 fail");

    if (!relop.IsNear(pnt2, 10.0))
        Debug.Print("test 2 fail");
}

এখানে আরও একটি পরীক্ষা। আমি কীভাবে ব্যতিক্রম ছাড়াই কাস্ট করতে পারি তা লক্ষ্য করুন, তবে ইসনয়ারকে কল করার সময় একটি অকার্যকর ব্যতিক্রম পান।

private void GBTest(IPoint pnt)
{
    var coll = new GeometryBagClass();
    ((IGeometry)coll).SpatialReference = pnt.SpatialReference;

    coll.AddGeometry(pnt);
    coll.GeometriesChanged();

    var relop = (IRelationalOperator2)coll; // would expect the exception here

    var pnt2 = ((IClone)pnt).Clone() as IPoint;
    ((ITransform2D)pnt2).Move(100.0, 100.0);
    if (relop.IsNear(pnt2, 1000.0)) // exception here
        Debug.Print("test 1 fail");

    if (!relop.IsNear(pnt2, 10.0))
        Debug.Print("test 2 fail");
}

কর্ক, আমিও তাই করেছি। আপনার পরীক্ষাটি কখনই সত্য হবে না কারণ এই সময়ে "রিলপ" এর মান {ESRI.ArcGIS.Geometry.GeometryBagClass 0. রয়েছে 0 এর একটি গণনা সহ "নাল" বা ব্যতিক্রম ঘটে যদি আপনি সত্যিকারের জ্যামিতি ব্যাগ কাস্ট করার চেষ্টা করেন তবে (অন্তর্ভুক্ত) তথ্য)।
জর্জি হেইফেল

@ জর্গ আমি কোডটি যুক্ত করে দেখিয়েছি যে কীভাবে আমি আইরিয়েশনালওপ্রেটার 2-তে একটি খালি খালি জ্যামিতি ব্যাগক্লাস কাস্ট করতে পারি। আমার কাছে অবাক করা বিষয় হ'ল আমি যখন প্রকৃতরূপে কাস্ট করি তখনই একটি অকার্যকাস্ট ব্যতিক্রম ছোঁড়া হয় না - কেবল ইসনয়ারকে কল করার সময়।
কर्क কুইকেনডাল

কর্ক, কোড এবং আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। আমি আপনার ফলাফল পুনরুত্পাদন করতে পারেন। একটি আশ্চর্যের বিষয়: আসল কাস্ট করার পরে এবং আইসনেয়ারকে ভিজ্যুয়াল স্টুডিওতে স্থানীয়দের বলার আগে "রিপোপ" করার জন্য কিছু সমস্যা দেখায় - সমস্ত আইজিওমিট্রি 5-এন্ট্রিগুলিতে "((ESRI.ArcGIS.Geometry.GeometryBagClass)) (রিপো)) এর মান রয়েছে। IGeometry5_xxxx । System.Invalid.CastException 'কিন্তু ব্যতিক্রম' ধরনের একটি ব্যতিক্রম দিল 'আসলে নিক্ষিপ্ত করা হয় না এই ঘটনা যখন IsNear
গেয়র্গ Haefele

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

0

আমি অনুমান করব যে এটি ডকুমেন্টেশনের সাথে একটি বাগ কারণ একটি জ্যামিতি ব্যাগ পয়েন্ট / লাইন / বহুভুজগুলির সংগ্রহ ons জ্যামিতির ধরণের মিশ্র এবং মিলে যাওয়া সংগ্রহের জন্য কিছু আইটোপোলজিক্যাল অপারেটর অপারেশন করা অসম্ভব হতে পারে। আপনি যদি পলাইনগুলির একটি আইজিওট্রি সংগ্রহ ব্যবহার করেন তবে আমার মনে হয় আপনার সমাধানটি কাজ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.