Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Sql Server 2008 geografi Batasan ukuran LineString

Saya belum pernah mendengar tentang batasan ukuran apa pun di LINESTRING (tentu saja tidak sesingkat 567 poin).

Saya baru saja mencoba contoh

DECLARE @geom GEOGRAPHY
SET @geom = GEOGRAPHY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608 )', 4326)
SELECT @geom, @geom.STNumPoints()

yang bekerja dengan baik (membuat LINESTRING dan menghitung 1.122 poin).

Apakah contoh Anda gagal dengan 567 poin APAPUN - atau hanya serangkaian poin tertentu (dapatkah Anda membagikannya kepada kami?). Saya kira saya bertanya-tanya apakah titik 568 Anda membuat instance GEOGRAFI Anda lebih besar dari belahan bumi? Misalnya, jika saya mengubah contoh saya dengan menambahkan titik lain (0,0) yang memaksa GEOGRAFI menjadi terlalu besar:

DECLARE @geom GEOGRAPHY
SET @geom = GEOGRAPHY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608
   , 0 0 )', 4326)         -- ADDED ANOTHER POINT !
SELECT @geom, @geom.STNumPoints()

Saya mendapatkan ArgumentException 24205:Input yang ditentukan tidak mewakili instance geografi yang valid karena melebihi satu belahan bumi. Setiap contoh geografi harus muat di dalam satu belahan bumi. Alasan umum untuk kesalahan ini adalah poligon memiliki orientasi cincin yang salah. yang jelas bukan kesalahan yang sama persis seperti Anda - tapi saya pikir saya akan tetap menaikkannya [Lewati ke UPDATE di bagian akhir untuk ide yang lebih baik]

Pertanyaan kedua saya kepada Anda adalah:apakah ini berfungsi dengan tipe data GEOMETRI? Misalnya. jika saya mengubah contoh "melanggar" saya di atas untuk menggunakan GEOMETRI maka itu berfungsi dengan baik:

DECLARE @geom GEOMETRY    -- using GEOMETRY type instead
SET @geom = GEOMETRY::STGeomFromText(
  'LINESTRING (142.98873903132778 -11.006193013241768
   , 142.9891970000001 -11.005916999999954
   -- SNIP 1,119 points
   , 142.04362479801711 -11.629451936538608
   , 0 0 )', 4326)         -- THIS POINT BREAKS GEOGRAPHY but works now!
SELECT @geom, @geom.STNumPoints()

Jika Anda dapat memposting beberapa detail lebih lanjut tentang masalah spesifik Anda, itu mungkin menyarankan masalah yang mendasarinya. Anda juga dapat menambahkan apakah Anda memasukkan poin di SQL Management Studio atau melalui kode (apakah C# dan tipe data SQL assembly)? Apa teks lengkap dari pesan kesalahan yang Anda terima (jika ada lebih dari yang Anda kutip di atas - lihat kesalahan saya).

Tapi jawaban singkatnya adalah "Saya rasa tidak ada batas 567 poin".

PERBARUI: Pos Ed berisi kesalahan persis yang Anda dapatkan (System.ArgumentException:24200) - jadi jika Anda bisa membuat data Anda bekerja di GEOMETRY, ini mungkin patut dicoba:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cari Tahu apakah Objek adalah Fungsi Bernilai Tabel di SQL Server dengan OBJECTPROPERTY()

  2. SQL Server 2008 FullTextSearch Karakter Tunggal dalam Nama Hilang dari Hasil

  3. Pemformatan Tanggal/Waktu Kustom di SQL Server

  4. SQL Server Intellisense tidak berfungsi di *beberapa* server

  5. Melewati parameter Tabel Bernilai ke prosedur tersimpan