Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa menggunakan tipe data geografi SQL Server 2008?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyebarkan proyek database SQL Server (SSDT) ​​melalui baris perintah

  2. Ganti spasi duplikat dengan satu spasi di T-SQL

  3. Perbarui kolom hitungan dari data di tabel lain

  4. Menggunakan CASE dalam Pernyataan WHERE ketika parameter memiliki banyak nilai

  5. Apa Nama Batasan Default di SQL Server?