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