أكثر

أقوم بإجراء تحديد باستخدام ArcObjects ، هل هناك مشكلة في iSelectionSet: AddList أم لدي خطأ في مكان ما؟


أقوم بجمع مجموعة من OIDs في مصفوفة OID (طويلة) ، وهذا يحدث في حلقة وإذا وجدت معرفًا شخصيًا أريد إضافته إلى المصفوفة ، فأنا REDIM PRESERVE لتوسيع المصفوفة.

iOIDListCount = iOIDListCount + 1 ReDim Preserve iOIDList (iOIDListCount) iOIDList (iOIDListCount - 1) = pRow.OID Debug.Print (iOIDList (iOIDListCount - 1))

بمجرد استخدام هذه المصفوفة لإجراء اختياراتي عبر iFeatureSelection. لا يوجد خطأ ولكن الاختيار الناتج خاطئ تمامًا. بدلاً من الحصول على 89 سجلًا متوقعًا ، يقوم جدول السمات بالإبلاغ عن 40 تم تحديده ولكن يتم تحديد حوالي 10 سجلات فقط فعليًا على الشاشة وفي جدول البيانات (انظر الشكل 1)

لا يعمل بشكل صحيح:

pFeatureSelection.SelectionSet.AddList (iOIDListCount، iOIDList (0))

ومع ذلك ، عندما أستخدم حلقة For Next بدلاً من ذلك وأضف معرف الكائن بشكل فردي ، أحصل على ما أتوقعه بالضبط: 89 سجلًا. (انظر الشكل 2)

يعمل بشكل جيد:

بالنسبة إلى i = 0 إلى iOIDListCount - 1 pFeatureSelection.SelectionSet.Add (iOIDList (i)) التالي i

الشكل 1 - نتيجة اختيار غير صحيحة عند استخدام نهج AddList

الشكل 2 - نتيجة الاختيار الصحيح عند استخدام طريقة الإضافة (بشكل فردي في حلقة)


يبدو أنه لم يعد بإمكانك الوثوق بـ ISelectionSet.AddList ، وفقًا لوثيقة المساعدة:

يجب ألا يتم استدعاء هذه الطريقة بواسطة تطبيقات .NET أو Java. بدلاً من ذلك ، قم باستدعاء IGeoDatabaseBridge2.AddList.
[C #]
لا يجب استخدام هذه الطريقة في .NET. بدلاً من ذلك ، استخدم IGeoDatabaseBridge2.AddList.
[Visual Basic .NET]
لا يجب استخدام هذه الطريقة في .NET. بدلاً من ذلك ، استخدم IGeoDatabaseBridge2.AddList.

الذي يرشدنا إلى استخدام IGeoDatabaseBridge2.AddList التي لا يمكنني العثور على أي أمثلة لها ، ولكن يبدو أنها تسير على هذا النحو:

iOIDListCount = iOIDListCount + 1 ReDim Preserve iOIDList (iOIDListCount) iOIDList (iOIDListCount - 1) = pRow.OID Debug.Print (iOIDList (iOIDListCount - 1)) خافت pGDBridge مثل IGeoDoDatabase (pGDBridge) )


شاهد الفيديو: ArcGIS Desktop part 1 displaying map data (شهر اكتوبر 2021).