Saya memiliki beberapa ratus bentuk ( polygon
s dan multipolygon
s) masing-masing terdiri dari puluhan ribu poin yang saya coba masuk ke SQL 2008.
Sayangnya, bentuk yang saya coba impor adalah "tangan kanan" (perimeter masing-masing ditarik searah jarum jam di sekitar titik-titik di dalamnya). SQL server mengasumsikan bentuk "kidal" (anti-searah jarum jam di sekitar interior), setidaknya untuk geography
jenis. Ini berarti bahwa SQL mengasumsikan bahwa saya mencoba untuk memilih seluruh bumi kecuali untuk bentuk saya. Beberapa orang menggambarkan ini sebagai bentuk "luar-dalam".
Dari MSDN , yang dengan putus asa tidak mengatakan orientasi dering mana yang harus digunakan:
Jika kita menggunakan
geography
tipe data untuk menyimpan instance spasial, kita harus menentukan orientasi cincin dan secara akurat menggambarkan lokasi instance.
Jika Anda menggunakan orientasi dering yang salah di SQL 2008, itu macet dengan kesalahan berikut (penekanan tambang):
Kesalahan .NET Framework terjadi selama eksekusi rutin yang ditentukan pengguna atau "geografi" agregat: Microsoft.SqlServer.Types.GLArgumentException: 24205: Input yang ditentukan tidak mewakili instance geografi yang valid karena melebihi satu belahan bumi. Setiap instance geografi harus masuk dalam satu belahan bumi. Alasan umum untuk kesalahan ini adalah poligon memiliki orientasi dering yang salah.
Mengimpor bentuk sebagai geometry
ganti geography
berfungsi dengan baik, tapi saya ingin menggunakannya geography
jika saya bisa.
Di SQL 2012, tampaknya cukup sepele untuk memperbaiki masalah ini, tapi saya terikat pada 2008.
Bagaimana saya harus mengubah bentuk?
sumber
Jawaban:
Blog Spatial Ed punya solusi ringkas. Berikut adalah beberapa SQL yang menunjukkan transformasi:
Dan kutipan dari posting Ed:
sumber
Dalam> = SQL Server 2012, metode ReorientObject () harus menyelesaikan ini. Untuk <SQL Server 2012, di bawah ini adalah metode alternatif.
Untuk SQL geografi @g yang ada, kode di bawah ini akan mengekstrak poin dan membuat kembali poligon dengan poin (simpul) dalam urutan terbalik:
(CATATAN 1: berfungsi untuk poligon sederhana, bukan untuk multipoligon atau poligon dengan cincin / centroid)
(CATATAN 2: menggunakan sistem koordinat SRID 4326 (WGS 84)
sumber
Sepertinya saya dapat menggunakan beberapa hybrid SQL dan C # yang tidak suci dari SQL Server Spatial Tools , seperti yang disarankan pada Stack Overflow .
Catatan: Pada saat jawaban ini diposting, tidak ada banyak informasi di luar sana. Tolong jangan coba metode ini kecuali Anda sudah membutuhkan SQL Server Spatial Tools untuk hal lain. Alih-alih, coba salah satu jawaban lain di sini atau di Stack Overflow .
sumber