Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sql Server 2008 địa lý Giới hạn kích thước chuỗi

Tôi chưa nghe nói về bất kỳ giới hạn kích thước nào đối với LINESTRING (chắc chắn không ngắn đến 567 điểm).

Tôi vừa thử một ví dụ

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()

hoạt động tốt (tạo LINESTRING và tính 1.122 điểm).

Ví dụ của bạn có thất bại với BẤT KỲ 567 điểm nào - hay chỉ một tập hợp điểm cụ thể (bạn có thể chia sẻ chúng với chúng tôi không?). Tôi đoán tôi đang tự hỏi liệu điểm thứ 568 của bạn có làm cho bản sao ĐỊA LÝ của bạn lớn hơn bán cầu không? Ví dụ:nếu tôi thay đổi ví dụ của mình bằng cách thêm một điểm khác (0,0) buộc ĐỊA LÝ quá lớn:

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()

Tôi nhận được ArgumentException 24205:Đầu vào được chỉ định không đại diện cho một trường hợp địa lý hợp lệ vì nó vượt quá một bán cầu duy nhất. Mỗi trường hợp địa lý phải nằm trong một bán cầu duy nhất. Một lý do phổ biến cho lỗi này là một đa giác có hướng vòng sai. rõ ràng không phải là cùng một lỗi với tư cách là bạn - nhưng tôi nghĩ dù sao thì tôi cũng sẽ nâng nó lên [Chuyển đến CẬP NHẬT ở cuối để có ý tưởng tốt hơn]

Câu hỏi thứ hai của tôi dành cho bạn là:nó có hoạt động với kiểu dữ liệu GEOMETRY không? Ví dụ. nếu tôi thay đổi ví dụ "vi phạm" ở trên để sử dụng GEOMETRY thì nó hoạt động tốt:

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()

Nếu bạn có thể đăng thêm một số chi tiết về vấn đề cụ thể của mình, điều đó có thể gợi ý vấn đề cơ bản. Ngoài ra, bạn có thể thêm liệu bạn đang nhập các điểm trong SQL Management Studio hay thông qua mã (đó là C # và SQL kiểu dữ liệu lắp ráp)? Nội dung đầy đủ của thông báo lỗi bạn nhận được là gì (nếu có nhiều hơn những gì bạn đã trích dẫn ở trên - hãy xem lỗi của tôi).

Nhưng câu trả lời ngắn gọn là "Tôi không nghĩ có giới hạn 567 điểm".

CẬP NHẬT: Bài đăng của Ed chứa lỗi chính xác mà bạn gặp phải (System.ArgumentException:24200) - vì vậy nếu bạn có thể nhận được dữ liệu hoạt động trong GEOMETRY thay vào đó, điều này có thể đáng thử:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận hàng trước và hàng tiếp theo từ các hàng đã chọn với điều kiện (WHERE)

  2. Làm cách nào để tôi chèn một Byte [] vào một cột VARBINARY của Máy chủ SQL

  3. Truy vấn SQL phân biệt giữa ß và ss

  4. Tại sao máy chủ SQL gặp lỗi này:Không thể chèn giá trị NULL vào cột 'id'?

  5. SQL Server:Làm thế nào để sử dụng UNION với hai truy vấn mà CẢ HAI có mệnh đề WHERE?