Saya ingin menggunakan metode IsNear dari IRelationalOperator2. The dokumentasi mengatakan bahwa GeometryBag mendukung antarmuka IRelationalOperator2. Tapi ini tidak berfungsi dan menghasilkan pengecualian "... tidak dapat menampilkan objek COM ... Tidak ada antarmuka yang didukung ..."
IRelationalOperator2 relationalOperator = (IRelationalOperator2)geometry;
Kode yang sama berfungsi dengan baik dengan IRelationalOperator tetapi tidak ada metode IsNear:
IRelationalOperator relationalOperator = (IRelationalOperator)geometry;
Apa yang salah - kode, dokumentasi atau itu bug? "geometri" adalah geometri tipe geometri esriGeometryBag dan berisi beberapa polyline. Saya menggunakan pemeran langsung untuk mendapatkan pengecualian .NET.
arcgis-10.0
arcobjects
Georg Haefele
sumber
sumber
Jawaban:
Pasti ada sesuatu yang mencurigakan terjadi di sini dengan 10.0 sp2.
Saya dapat melemparkan tas geometri ke IRelationalOperator2, jika tidak tes ini akan mengatakan "tidak dapat melakukan casting", ditambah saya akan mendapatkan pengecualian referensi nol.
Namun, pada panggilan pertama ke IsNear saya mendapatkan pengecualian.
Inilah tesnya:
Ini tes lain. Perhatikan bagaimana saya bisa melakukan tanpa pengecualian, tetapi dapatkan pengecualian InvalidCast saat memanggil IsNear.
sumber
Saya kira itu adalah bug dengan dokumentasi karena GeometryBag adalah kumpulan poin / garis / poligon. Melakukan beberapa operasi ITopologicalOperator pada kumpulan tipe geometri yang campuran dan cocok bisa menjadi mustahil. Jika Anda menggunakan IGeometryCollection dari polyline meskipun saya pikir solusi Anda akan berhasil.
sumber