Pertanyaan itu terdengar sangat berlebihan ...
Bagaimanapun, saya telah diminta untuk mengeksplorasi penggunaan SQL di ArcGIS. Kami menggunakan SDE DB untuk semua penyimpanan sisi server dan pengelolaan DB / pengeditan skala besar. Namun, saya mencoba untuk menggali lebih dalam tentang seberapa terintegrasi SQL dalam alat-alat ArcGIS. Ada catatan dalam Panduan Referensi Kueri SQL dari bantuan ArcGIS 10 yang secara jelas menyatakan sintaks SQL tidak berfungsi saat menggunakan alat Kalkulator Bidang. Saya menemukan ini sangat mengecewakan karena akan tampak sangat berguna untuk dapat menarik dan memotong informasi langsung dari database itu sendiri ketika menghitung nilai-nilai bidang.
Apa batasan dan jebakan terbesar yang mungkin ada ketika mencoba menggunakan SQL di ArcGIS? Alat mana yang melihat fungsionalitas terbaik ketika terintegrasi dengan SQL?
Jika diperlukan contoh untuk menjadikan ini pertanyaan yang lebih jelas, saya mencoba melacak jumlah tempat menarik yang memiliki tipe tertentu di wilayah tertentu. Setiap titik memiliki atribut yang menggambarkan jenis dan wilayahnya. Solusi saya saat ini melibatkan penggunaan kursor yang banyak untuk penghitungan dan pengambilan data, tetapi seorang superior menunjukkan bahwa query SQL sederhana dapat melakukan semua ini dan lebih banyak lagi. Sayangnya, sepertinya fungsinya tidak ada untuk ini.
Atau itu?
Jawaban:
Jika Anda ingin menggunakan Python, lihat perintah ArcSDESQLExecute . Ini akan memungkinkan Anda menjalankan SQL arbitrer tetapi harus terhubung melalui SDE. Jika hasil kueri adalah serangkaian baris, atribut akan dikembalikan sebagai daftar daftar Python. Kalau tidak, itu akan mengembalikan True jika SQL dijalankan dengan sukses atau Tidak ada jika tidak. Lihat juga: Menjalankan SQL menggunakan koneksi ArcSDE
sumber
Jika Anda menulis ArcObjects kustom, Anda dapat mengeksekusi SQL arbitrer terhadap WorkEdace SDE dengan menggunakan metode ExecuteSQL . Metode ini terbatas pada kueri yang tidak mengembalikan set hasil, seperti INSERT, UPDATE, atau beberapa prosedur tersimpan.
Jika Anda bekerja melalui ArcMap UI, opsi Anda sedikit lebih terbatas. Alasan mengapa Anda tidak dapat menggunakan SQL melalui Calculate Field adalah karena ekspresi sebenarnya adalah VBScript dan / atau Python. Anda bisa menggunakan VBScript atau Python untuk mengeksekusi ekspresi SQL sewenang-wenang dan menarik nilai dari kursor yang dihasilkan, tetapi saya tidak akan merekomendasikannya.
Atau, Anda dapat menggunakan jawaban Regan dan membuat Layer Kueri. Untuk data hanya baca, ini adalah pendekatan terbaik Anda. Jika Anda perlu memperbarui data, ini sedikit lebih rumit. Anda harus membuat lapisan kueri dengan nilai "baru" Anda, melakukan gabungan terhadap tabel yang ada, dan kemudian menggunakan bidang hitung. Ini dapat dikombinasikan dengan ExecuteSQL untuk melakukan pembaruan kompleks dan kemudian melihat hasilnya (agak kikuk).
Alternatif terakhir Anda adalah mengeksekusi SQL terhadap tabel ArcSDE secara langsung.
sumber
Anda harus memeriksa Query Layers di ArcMap 10
sumber
Bergantung pada RDBMS apa yang Anda gunakan, Anda dapat memanfaatkan pustaka SQL di luar ArcObjects atau arcpy, selama Anda tidak bergantung pada mendapatkan data fitur kembali. Banyak pertanyaan dalam database SQL Server yang saya gunakan setiap hari tidak bersifat spasial, jadi saya akan menggunakan kelas System.Data di dalam .NET, atau pymssql Python library di dalam aplikasi Python. Jika Anda memang membutuhkan penggunaan data spasial, maka Query Layers adalah pilihan terbaik Anda. Satu-satunya peringatan dengan Layers Query adalah mereka hanya bekerja dengan data yang disimpan menggunakan tipe data spasial (bukan tipe SDEBINARY standar).
sumber