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

Tại sao sử dụng kiểu dữ liệu địa lý SQL Server 2008?

Nếu bạn định thực hiện bất kỳ phép tính không gian nào, EF 5.0 cho phép các Biểu thức LINQ như:

private Facility GetNearestFacilityToJobsite(DbGeography jobsite)
{   
    var q1 = from f in context.Facilities            
             let distance = f.Geocode.Distance(jobsite)
             where distance < 500 * 1609.344     
             orderby distance 
             select f;   
    return q1.FirstOrDefault();
}

Vậy thì có một lý do chính đáng để sử dụng môn Địa lý.

Giải thích về không gian trong Entity Framework .

Cập nhật với Tạo cơ sở dữ liệu không gian hiệu suất cao

Như tôi đã lưu ý trên Câu trả lời của Noel Abrahams :

Vì vậy, so sánh các loại lưu trữ:

CREATE TABLE dbo.Geo
(    
geo geography
)
GO

CREATE TABLE dbo.LatLng
(    
    lat decimal(15, 12),   
    lng decimal(15, 12)
)
GO

INSERT dbo.Geo
SELECT geography::Point(12.3456789012345, 12.3456789012345, 4326) 
UNION ALL
SELECT geography::Point(87.6543210987654, 87.6543210987654, 4326) 

GO 10000

INSERT dbo.LatLng
SELECT  12.3456789012345, 12.3456789012345 
UNION
SELECT 87.6543210987654, 87.6543210987654

GO 10000

EXEC sp_spaceused 'dbo.Geo'

EXEC sp_spaceused 'dbo.LatLng'

Kết quả:

name    rows    data     
Geo     20000   728 KB   
LatLon  20000   560 KB

Loại dữ liệu địa lý chiếm thêm 30% dung lượng.

Ngoài ra, loại dữ liệu địa lý không giới hạn ở việc chỉ lưu trữ một Điểm, bạn cũng có thể lưu trữ LineString, CircularString, CompoundCurve, Polygon, CurvePolygon, GeometryCollection, MultiPoint, MultiLineString và MultiPolygon và hơn thế nữa . Bất kỳ nỗ lực nào để lưu trữ ngay cả những loại Địa lý đơn giản nhất (như Vĩ độ / Kinh độ) ngoài một Điểm (ví dụ:ví dụ LINESTRING (1 1, 2 2)) sẽ phát sinh thêm các hàng cho mỗi điểm, một cột để sắp xếp thứ tự của mỗi điểm và một cột khác để nhóm các dòng. SQL Server cũng có các phương pháp cho các kiểu dữ liệu Địa lý bao gồm tính toán Diện tích, Ranh giới, Chiều dài, Khoảng cách và hơn thế nữa .

Có vẻ không khôn ngoan khi lưu trữ Vĩ độ và Kinh độ dưới dạng Thập phân trong Máy chủ Sql.

Cập nhật 2

Nếu bạn dự định thực hiện bất kỳ phép tính nào như khoảng cách, diện tích, v.v., thì việc tính toán chính xác chúng trên bề mặt trái đất là rất khó. Mỗi loại Địa lý được lưu trữ trong SQL Server cũng được lưu trữ với một ID tham chiếu không gian . Các id này có thể là các hình cầu khác nhau (trái đất là 4326). Điều này có nghĩa là các phép tính trong SQL Server sẽ thực sự tính toán chính xác trên bề mặt trái đất (thay vì as- những con quạ có thể xuyên qua bề mặt trái đất).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'PDOException' với thông báo 'SQLSTATE [22001]:Chuỗi dữ liệu, bị cắt ngắn bên phải:0

  2. Kiểu dữ liệu của Cột thay thế với khóa chính

  3. chọn sự suy giảm hiệu suất trạng thái khi sử dụng DISTINCT với các tham số

  4. Microsoft có thể lưu trữ các trường có ba giá trị trong một bit không?

  5. CHỌN CHO TỰ ĐỘNG XML và trả về các kiểu dữ liệu