Tạo cột địa lý / hình học từ các trường x và y - SQL Server 2008


26

Tôi mới tham gia SQL Server 2008 và tôi hy vọng bạn sẽ hiểu câu hỏi / nhu cầu của tôi.

Vì vậy, tôi có một bảng chứa 3 trường (Tên, Lat và Long) trong cơ sở dữ liệu của tôi (không gian). Tôi muốn tạo một cột hình học / địa lý dựa trên các trường đó (Lat và Long) nhưng không may là không có thành công.

Câu hỏi của tôi là: Làm thế nào tôi có thể quản lý để làm điều đó?


Câu trả lời:


36

Bạn có thể thêm một cột được tính như thế này

alter table yourTable add geographyColumn as geography::STGeomFromText('POINT('+convert(varchar(20),Long)+' '+convert(varchar(20),Lat)+')',4326)

Tôi đã thêm chuyển đổi từ lng hoặc lat vì tôi lưu trữ Long và Lats dưới dạng số.


3
Cảm ơn câu trả lời của bạn, tôi đã giải quyết vấn đề của mình bằng cách sử dụng dòng này: CẬP NHẬT yourdatabase SET hình học_column = hình học :: Điểm ([ColX], [ColY], SRID)
Tudor

3
Có thể tạo ra một kích hoạt cho điều này? Giống như khi bạn điền vào các trường của mình (cột X và Y) với thông tin tập lệnh được đề cập ở trên sẽ chạy.
Tudor

10

Có vẻ như bạn muốn phương thức STGeomFromText()hoặc STPointFromText()SQL:

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

hoặc là

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

Tạo trường Geometryhoặc Geographytrường của bạn , sau đó sử dụng SQL để điền vào trường đó bằng các giá trị lat / lon của bạn.


Điều gì sẽ là sự khác biệt trong việc sử dụng phương pháp sau thay vào đó ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo

@awesomo - Đúng, bạn có thể sử dụng cái đó nếu bạn muốn, thực sự.
Chad Cooper


1

Nếu làm tròn các giá trị Long / Lat ban đầu xảy ra khi sử dụng CONVERT(VARCHAR,câu lệnh.

Hãy thử sử dụng:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.