Saya memiliki file data CSV dari pihak ke-3 yang merupakan tabel SQL Server yang diekspor. Mereka hanya melakukan select * from foo
dan mengeluarkan hasilnya ke file teks dan mengirimkannya.
Dalam tabel mereka adalah kolom tipe Geometri, jadi dalam teks mentah saya, saya memiliki sesuatu seperti "0xE610000010C47 ...", dll. Saat ini saya telah memuatnya ke dalam tabel di SQL Server sebagai nvarchar.
Saya mengantisipasi saya akan dapat membalikkan kembali ke bidang Geometri di ujung saya, tetapi itu tampaknya tidak begitu mudah. STGeomFromWKB
tidak berfungsi karena itu sebenarnya bukan WKB. Saya tidak dapat menampilkan string sebagai Geometri karena mengeluh bahwa itu bukan WKT.
Jadi, apakah ada cara saya bisa mendapatkan nilai ini ke dalam SQL Server seolah-olah itu adalah BLOB Geometri normal? Dapatkah saya memberi tahu SQL Server untuk memperlakukannya seperti itu?
Saya menemukan tautan ini yang membantu setidaknya menjawab pertanyaan saya tentang apa yang ada di SQL Server, tetapi tidak membuat saya sepenuhnya: apa format tipe data Geometri dari SQLServer 2008
Jawaban:
Saat Anda mengimpor data ke SQL Server, masukkan ke dalam kolom VARBINARY (MAX). Anda kemudian dapat CAST ini sebagai Geometri atau Geografi sesuai kebutuhan. Anda harus berhati-hati agar string 0xE6 ... tidak berubah selama impor.
Pilihan lain adalah melakukan kueri dinamis untuk mendapatkan pilihan. Saya menaruh beberapa contoh konversi di bawah ini.
sumber
Membangun jawaban @ MickyT, karena Anda akan memiliki tabel dengan nilai-nilai Anda sudah ada di WKB (atau apa pun sebutan kami), Anda ingin menulis sql yang akan mengubah semua catatan menjadi geometri, daripada harus mendeklarasikan variabel, dll. dll.
Jadi jika Anda memulai dengan tabel temp sederhana yang akan mereplikasi WKB dalam satu catatan, itu akan terlihat seperti ini:
Sekarang jika Anda menganggap itu sebagai temp table dan membungkus beberapa SQL di sekitarnya, Anda memiliki kolom dengan WKB di sana dan Anda dapat mengubahnya menjadi varbinary seperti yang disarankan di atas:
di mana temp.wkb bisa menjadi kolom di tabel Anda yang lebih besar yang berisi nilai WKB dari CSV
Akhirnya, gunakan metode yang dijelaskan oleh MickyT dan ubah varbinary menjadi geometri:
Yang mengembalikan geometri dan hasil spasial:
EDIT di mana SRID dideklarasikan? Seperti yang dijawab MickyT, itu ada dalam biner, dan Anda dapat membungkus 1 kueri sql lagi di sana untuk diuji:
yang menghasilkan, dan benar dalam contoh saya, 2877 (colorado state plane):
sumber
Poster asli di sini, ketika saya mencoba menyelesaikan pendaftaran, itu tidak menautkan masuk ke pos asli. Bagaimanapun....
Terima kasih atas semua bantuannya! Saya akan memutakhirkan setiap jawaban begitu saya bisa dan mungkin jika saya bisa mengetahui cara menautkan akun ini dan yang asli saya bisa menandai jawaban. Juga, setelah petunjuk Anda, saya tidak percaya saya ketinggalan menggunakan
CONVERT
bukanCAST
. Itu membuatnya jauh lebih mudah.Saya pikir masalah utama saya adalah mendapatkan "string" biner mentah untuk sesuatu yang bisa saya gunakan. Berikut ini contoh bagaimana saya menyelesaikannya:
sumber