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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.