Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо да използвате географския тип данни на SQL Server 2008?

Ако планирате да правите някакво пространствено изчисление, EF 5.0 позволява LINQ изрази като:

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();
}

Тогава има много добра причина да използвате география.

Обяснение на пространственото в рамките на Entity Framework .

Актуализирано с Създаване на високопроизводителни пространствени бази данни

Както отбелязах в Noel Abrahams Answer :

И така, сравнявайки видовете съхранение:

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'

Резултат:

name    rows    data     
Geo     20000   728 KB   
LatLon  20000   560 KB

Географският тип данни заема 30% повече място.

Освен това типът данни за география не се ограничава само до съхраняване на точка, можете също да съхранявате LineString, CircularString, CompoundCurve, Polygon, CurvePolygon, GeometryCollection, MultiPoint, MultiLineString и MultiPolygon и други . Всеки опит за съхраняване дори на най-простите географски типове (като ширина/дължина) извън точка (например LINESTRING(1 1, 2 2) екземпляр) ще доведе до допълнителни редове за всяка точка, колона за последователност за реда на всяка точка и друга колона за групиране на редове. SQL Server също има методи за типовете данни Geography, които включват изчисляване на Area, Boundary, Дължина, разстояния и други .

Изглежда неразумно да се съхраняват географска ширина и дължина като десетични числа в Sql сървър.

Актуализация 2

Ако планирате да правите изчисления като разстояние, площ и т.н., правилното им изчисляване върху повърхността на земята е трудно. Всеки тип география, съхраняван в SQL Server, също се съхранява с Идентификационен номер за пространствена препратка . Тези идентификатори могат да бъдат от различни сфери (земята е 4326). Това означава, че изчисленията в SQL Server всъщност ще изчислят правилно върху повърхността на земята (вместо as- враните-летят което може да бъде през повърхността на земята).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверите дали датата и часът са събота или неделя в SQL Server 2008

  2. Как мога да групирам колона по дата и час, без да вземам предвид времето

  3. Как да получите преди един месец от днес в SQL Server 2008?

  4. Надстройка на платформата за данни на SQL Server през 2015 г

  5. Как да добавя колона с пореден номер към данните за резултатите?