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

STContains trên cột Địa lý

Tôi đã sử dụng mã mà tôi đã viết cho bạn ( Lưu trữ cột 'Điểm' từ ShapeFile ) như một điểm khởi đầu để có được một bảng điểm. Từ đó:

select geography::STPolyFromText(
'POLYGON((' + 
    stuff((
        select ',' + cast(g.STPointN(t.i).Long as varchar(10)) + ' ' + cast(g.STPointN(t.i).Lat as varchar(10))
        from [a]
        cross join tally as [t]
        where t.i <= g.STNumPoints()
        order by i
        for xml path('')

    ), 1, 1, '') + '))'
    , 4326)

Mã này giả định một vài điều. Đầu tiên:rằng các điểm của bạn được sắp xếp theo thứ tự khi bạn đi xung quanh ranh giới của khu vực. Vấn đề này. Hãy nghĩ về câu đố kết nối các dấu chấm. Để có được bức tranh phù hợp, bạn phải thực hiện chúng theo đúng trình tự. Thứ hai, liên quan đến đầu tiên, họ phải được định hướng chính xác. Đa giác tuân theo quy tắc bên trái. Có nghĩa là, nếu bạn đang đi các điểm theo thứ tự, bạn đang xác định vùng nằm ở phía bên trái của bạn. Vì vậy, nếu bạn chỉ định các điểm theo thứ tự ngược lại, bạn sẽ có được mọi thứ trừ khu vực của mình! Bạn sẽ biết điều này ngay lập tức vì trước SQL 2012, bạn bị giới hạn trong việc có các khu vực nằm trọn trong một bán cầu.

Nhưng bây giờ tôi phải hỏi:với câu hỏi mà bạn đã hỏi trước đây (mà tôi đã liên kết ở trên), bạn có đang nhận được các tệp hình dạng với các đa giác trong đó không? Nếu vậy, hãy lưu trữ nó và giúp bạn đỡ phải đau đầu khi xây dựng lại nó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL để trả về bản ghi mới nhất cho mỗi ID

  2. Cách thay đổi cột mà không bỏ bảng trong SQL 2008

  3. Đối tượng 'DF __ *' phụ thuộc vào cột '*' - Thay đổi int thành double

  4. định dạng gói ssis trong excel

  5. Phân trang dựa trên bù đắp / Tìm nạp (Triển khai) trong EntityFramework (Sử dụng LINQ) cho SQL Server 2008