Jika Anda berencana melakukan perhitungan spasial, EF 5.0 memungkinkan Ekspresi LINQ seperti:
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();
}
Maka ada alasan yang sangat bagus untuk menggunakan Geografi.
Penjelasan spasial dalam Entity Framework .
Diperbarui dengan Membuat Basis Data Spasial Berkinerja Tinggi
Seperti yang saya catat di Jawaban Noel Abrahams :
Jadi, bandingkan jenis penyimpanan:
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'
Hasil:
name rows data
Geo 20000 728 KB
LatLon 20000 560 KB
Tipe data geografi membutuhkan 30% lebih banyak ruang.
Selain itu tipe data geografi tidak terbatas hanya untuk menyimpan Point, Anda juga dapat menyimpan LineString, CircularString, CompoundCurve, Polygon, CurvePolygon, GeometryCollection, MultiPoint, MultiLineString, dan MultiPolygon dan banyak lagi . Upaya apa pun untuk menyimpan bahkan tipe Geografi yang paling sederhana (seperti Lintang/Bujur) di luar suatu Titik (misalnya instans LINESTRING(1 1, 2 2)) akan menimbulkan baris tambahan untuk setiap titik, kolom untuk pengurutan untuk urutan setiap titik dan kolom lain untuk pengelompokan garis. SQL Server juga memiliki metode untuk tipe data Geografi yang mencakup penghitungan Area, Boundary, Panjang, Jarak, dan lainnya .
Tampaknya tidak bijaksana untuk menyimpan Lintang dan Bujur sebagai Desimal di Server Sql.
Perbarui 2
Jika Anda berencana melakukan perhitungan seperti jarak, luas, dll, menghitung dengan benar di atas permukaan bumi itu sulit. Setiap jenis Geografi yang disimpan di SQL Server juga disimpan dengan ID Referensi Spasial . Id ini bisa dari bidang yang berbeda (bumi adalah 4326). Ini berarti bahwa perhitungan di SQL Server akan benar-benar menghitung dengan benar di atas permukaan bumi (bukan sebagai- burung gagak-lalat yang bisa melalui permukaan bumi).