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ó.