Saya sedang membangun pandangan sederhana terhadap ArcSDE Oracle RAC 10g. Kolom SHAPE saya menggunakan tipe data SDO_GEOMETRY. ArcSDE 9.3.1.
Saya memiliki beberapa tabel poin, dengan garis besar berikut:
ID (Guid) Name (string) Shape (SHAPE)
Saya telah membangun tampilan sederhana seperti ini di Oracle!
CREATE OR REPLACE VIEW VW_POINTS AS
SELECT ID, Name, Shape from TABLE_A
UNION ALL
SELECT ID, Name, Shape from TABLE_B
-- etc
Tampilan di Oracle dibuat dengan baik. Saya sudah mendaftarkan tampilan ini dengan baris perintah:
sdetable -o create_view -T POINTS -t VW_POINTS -c Id, Name, SHAPE dll
Tampilan ArcSDE dibuat lagi, baik-baik saja. Saya dapat menggunakan ArcObjects untuk menanyakannya, dll. Sekarang saya perlu membuat Layer. Saya sudah mencoba alat baris perintah, sdelayer -o daftar, tapi saya tidak berhasil. Itu memberi saya pesan, mengatakan bahwa pandangan tidak didukung.
Saya perlu melakukan ini beberapa kali, kadang-kadang menggunakan sintaksis kompleks untuk membangun tampilan.
Apa masalahnya? Bagaimana memvisualisasikan tampilan spasial ini sebagai lapisan SDE (saya tidak perlu mengeditnya, cukup melihatnya secara spasial di dalam ArcMap)
Terima kasih atas masukannya!
EDIT
Ini adalah tangkapan layar di ArcMap, untuk deligth Anda: P
Screenshot ArcMap untuk kebahagiaan Anda :
Seperti yang diminta, ini dia description_long
// create_view C: \ Users \ H> sdetable -o create_view -s server -i port -u pengguna -p pass -T view_airspace_points -t vw_airspace_points_oracle -c "*"
pada titik ini saya mengubah tampilan pada oracle, termasuk gips sebagai angka (38,0) sebelum pendaftaran.
// register layer C: \ Users \ H> sdelayer -o register -l view_airspace_points, bentuk -C OBJECTID, USER - g RTREE -s server -i port -u pengguna -p pass -ep -P TINGGI
ArcSDE 9.3.1 untuk Oracle10g Build 2784 Sel 27 Okt 10:51:14 2009
Utilitas Administrasi Lapisan
Deskripsi Lapisan ....:
Pemilik Meja ..........: SIGMAGIS2
Nama Tabel ...........: VIEW_AIRSPACE_POINTS
Kolom Spasial .......: SHAPE
Id Lapisan .............: 1398
SRID .................: 79
Minimum Bentuk Id .....: 1
Offset ...............:
falsex: -180.000000
falsey: -90.000000
Unit Sistem .........: 994200.000000
Z Offset ..............: 0,000000
Z Unit ..............: 1.000000
Mengukur Offset .......:
Unit Ukur ........:
XY Cluster Tolerance.: 2.0
Indeks Tata Ruang ........:
parameter: SPIDX_RTREE
ada: Ya
bentuk array: -2,0,0
Lapisan Amplop .......:
minx: -180.00000, miny: -90.00000
maxx: 180,00000, maxy: 90,00000
Entitas .............: hlm
Tipe Lapisan ...........: Tipe Spasial In-Line
Tanggal Pembuatan ........: 06/28/11 09:28:45
Mode I / O .............: NORMAL
Penguncian Otomatis ..........: Diaktifkan
Presisi .............: Tinggi
Keistimewaan Pengguna ......: SELECT, UPDATE, INSERT, DELETE
Sistem Koordinat ....: GEOGCS ["Bujur / Lintang [WGS 84]", DATUM ["WGS 84", SPHEROID ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0,0], UNIT [ "Desimal
Gelar ", 0,0174532925199433]]
Konfigurasi Lapisan ..: DEFAULTS
sumber
Jawaban:
Saya punya ini (dan masalah serupa) di masa lalu. Itu selalu bermuara pada dua hal:
Tabel spasial memiliki beberapa geometri yang rusak / tidak valid. Masalah dengan ArcMap adalah begitu menemukan geometri yang tidak valid, ia akan berhenti render.
Registrasi layer tidak benar. Apa yang saya juga temukan adalah bahwa sdelayer -o register tidak selalu berfungsi dengan benar dan Anda harus 'memijat' entri pendaftaran.
Jadi untuk memeriksa apakah layer tersebut benar, gunakan PERTAMA fungsi SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Kemudian gunakan fungsi validasi ArcSDE sdelayer -o feature_info -r tidak valid ... untuk mendapatkan fitur yang tidak valid sesuai dengan ArcSDE. Mungkin bersama dengan sdelayer -o daftar (lihat di sini )
Untuk memeriksa pendaftaran, Anda harus kembali ke skema ArcSDE. Tabel yang mengontrol pendaftaran adalah: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES dan SDE.GEOMETRY_COLUMNS. Salah satu trik yang saya gunakan adalah bahwa saya biasanya memiliki lapisan 'basis' yang serupa (sejauh menyangkut jenis geometri dan kolom kunci utama) yang ditampilkan di ArcMap. Saya kemudian membandingkan catatan registrasi, antara layer yang menampilkan dan kemudian yang tidak. Anda akan kagum menemukan perbedaan yang dihasilkan oleh perubahan 1 pada kolom bilangan bulat! :-)
Kiat pada COLUMN_REGISTRY - yang harus Anda lakukan adalah memastikan bahwa kolom kunci Utama (apa yang didefinisikan sebagai ROWID_COLUMN di SDE.TABLE_REGISTRY) dan Kolom Spasial sudah benar (atau sama dengan lapisan yang menampilkan). Abaikan semua kolom lainnya. Jika Anda menambahkan lapisan dalam ArcMap yang masuk sebagai pemilik tabel entri yang hilang di tabel COLUMN_REGISTRY akan ditambahkan secara otomatis.
Beri tahu saya jika ini membantu!
sumber
Apa yang Anda cari adalah Spatial-View , sekarang satu-satunya masalah besar yang akan Anda lihat di sini adalah Anda harus berhati-hati dengan bidang yang Anda ikuti. Ini adalah proses yang cukup bagus, saya menggunakannya di semua tempat di mana saya menggeneralisasikan DB saya untuk berbicara dengan data spasial yang tipis.
Ini akan membuat Anda mendapatkan apa yang Anda inginkan. Kuncinya adalah membuat bidang Anda dipetakan dengan benar. Saya cenderung hanya melakukan tampilan dengan minimum yang saya butuhkan, kemudian menggunakan UI untuk mengedit tampilan yang terdaftar di SDE untuk melakukan tweak yang lebih baik.
sumber
Satu hal yang saya lihat hilang adalah kolom integer unik yang ArcObjects dapat digunakan untuk ID objek. Coba buat satu urutan yang akan mempertahankan nilai unik untuk kolom id ini. Kemudian buat pemicu sisipkan pada setiap tabel untuk mengisi kolom id dengan urutan.nextval.
Dalam perintah sdelayer -o register, pastikan untuk mengatur flag -C ke kolom id integer Anda dengan kata kunci USER sehingga esri tidak mencoba mengelola kolom untuk Anda.
sumber
Saya telah memilah-milah balasan dan sepertinya tidak ada yang mengamati bahwa permintaan serikat pekerja adalah sedikit masalah untuk tampilan spasial dengan ArcGIS. ini karena Anda hampir pasti akan berakhir dengan duplikat objectid. Hal yang sama berlaku untuk kueri gabung dalam di mana predikat gabung tidak menjamin catatan "induk" yang unik. dalam kedua kasus tersebut meskipun tampilan dapat memenuhi semua persyaratan pendaftaran, tampilan tersebut tidak akan berlaku dengan benar
sumber
Terima kasih untuk semua yang melihat utas ini.
Yah prosesnya agak rumit, tetapi dimungkinkan untuk mendaftarkan query yang kompleks sebagai layer, hanya perlu beberapa pemikiran licik. Saya tidak yakin apa implikasinya pada kinerja pada ini, tapi saya akan mencoba untuk menjaga ini diperbarui. Saya juga memiliki masalah untuk melihat poin di ArcMap, tetapi saya akan menyelidiki lebih lanjut.
Pertama-tama, buat tampilan spasial yang kompleks di RDBMS Anda. Pastikan Anda memiliki kolom INTEGER UNIK BUKAN NULL dalam tampilan, yang dapat digunakan nanti untuk pendaftaran dengan ArcSDE.
Kueri saya hanya sekelompok UNION ALL, mirip dengan ini:
Dalam skema ini, semua objek saya miliki sebagai PK ID_UNIQUE_ID, yang merupakan GUID. ObjectIDs saya berulang di seluruh kelas fitur, jadi, bukan pilihan yang baik untuk ObjectID pengganti kami.
Saya menggunakan (dalam kasus saya) kolom virtual rownum Oracle untuk membungkus semua pertanyaan saya dan membuat tampilan yang memiliki "objectID" yang efektif. Lihatlah:
Saya membuat tampilan dengan kueri di atas, dan membuat tampilan di atasnya. Pandangan ini akan menjadi lapisan spasial di dalam arcsde. Ini adalah proses yang cukup mudah.
Setelah itu, saya sudah mencoba dan mencoba mendaftarkan tampilan spasial saya sebagai layer, tetapi selalu gagal. Ketika Anda membuat tampilan di atasnya, ArcSDE mengasumsikan bahwa FID adalah NUMBER (38,10), angka floating point, menurut sdetable -o menggambarkan program utilitas.
Di Oracle, ini adalah definisi untuk tampilan:
Setelah saya mengganti kolom fid dengan gips, semuanya bekerja dengan baik. Saya melanjutkan pendaftaran lapisan dan itu berjalan dengan baik.
EDIT
Lapisan ditampilkan di ArcCatalog sebagai lapisan titik dan saya bisa melihat dan memilih tabel di ArcMap seperti biasa (titik-titik itu bahkan disorot), tetapi saya tidak dapat menyimbolkannya dan melihatnya sebagai lapisan biasa. Adakah itu?
Adakah yang tahu mengapa ini terjadi? Semuanya baik-baik saja, kecuali bahwa saya tidak dapat melihat objek spasial di dalam ArcMap. Ada ide?
sumber
Silakan coba jalankan perintah berikut: sdelayer -o alter -l [-S] [-k] [-i | | ] [-s] [-D] -E calc -u [-p]
sumber
Dalam pengalaman saya, ketika sebuah layer tidak ditampilkan di Arc, itu karena indeks spasial hilang. Tampilan menggunakan indeks spasial dari tabel sumber, tetapi sepertinya Anda membuat indeks spasial untuk tampilan dalam pernyataan pendaftaran Anda.
Apakah salah satu dari tabel sumber memiliki indeks spasial? Jika tidak, coba buat di Oracle dan daftarkan ulang tampilan tanpa -g.
Kemungkinan lain adalah Anda menggabungkan geometri dari dua tabel menjadi satu kolom, tidak yakin apakah itu tidak-tidak, belum pernah mencobanya sebelumnya.
sumber