Se você planeja fazer qualquer computação espacial, o EF 5.0 permite expressões LINQ como:
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();
}
Então há uma razão muito boa para usar Geografia.
Explicação de espacial dentro do Entity Framework .
Atualizado com Criando bancos de dados espaciais de alto desempenho
Como observei em Resposta de Noel Abrahams :
Então, comparando os tipos de armazenamento:
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'
Resultado:
name rows data
Geo 20000 728 KB
LatLon 20000 560 KB
O tipo de dados de geografia ocupa 30% mais espaço.
Além disso, o tipo de dados de geografia não se limita apenas a armazenar um Ponto, você também pode armazenar LineString, CircularString, CompoundCurve, Polygon, CurvePolygon, GeometryCollection, MultiPoint, MultiLineString e MultiPolygon e muito mais . Qualquer tentativa de armazenar até mesmo o mais simples dos tipos Geography (como Lat/Long) além de um Point (por exemplo, LINESTRING(1 1, 2 2) instance) incorrerá em linhas adicionais para cada ponto, uma coluna para sequenciamento para a ordem de cada ponto e outra coluna para agrupamento de linhas. O SQL Server também tem métodos para os tipos de dados Geography que incluem o cálculo de Área, Limite, Comprimento, distâncias e muito mais .
Parece imprudente armazenar Latitude e Longitude como Decimal no Sql Server.
Atualização 2
Se você planeja fazer quaisquer cálculos como distância, área, etc., calculá-los corretamente sobre a superfície da Terra é difícil. Cada tipo de geografia armazenado no SQL Server também é armazenado com um ID de referência espacial . Esses id's podem ser de diferentes esferas (a terra é 4326). Isso significa que os cálculos no SQL Server irão realmente calcular corretamente sobre a superfície da Terra (em vez de as- as-moscas-corvo que poderia ser através da superfície da terra).