Si planea realizar algún cálculo espacial, EF 5.0 permite expresiones 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();
}
Entonces hay una muy buena razón para usar Geografía.
Explicación espacial dentro de Entity Framework .
Actualizado con Creación de bases de datos espaciales de alto rendimiento
Como señalé en Respuesta de Noel Abraham :
Comparando tipos de almacenamiento:
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
El tipo de datos de geografía ocupa un 30 % más de espacio.
Además, el tipo de datos geográficos no se limita solo a almacenar un Punto, también puede almacenar LineString, CircularString, CompoundCurve, Polygon, CurvePolygon, GeometryCollection, MultiPoint, MultiLineString, MultiPolygon y más . Cualquier intento de almacenar incluso el más simple de los tipos de Geografía (como Lat/Long) más allá de un Punto (por ejemplo, instancia de LINESTRING(1 1, 2 2)) incurrirá en filas adicionales para cada punto, una columna para secuenciar el orden de cada punto y otra columna para agrupación de líneas. SQL Server también tiene métodos para los tipos de datos geográficos que incluyen calcular Área, Límite, Longitud, distancias y más .
Parece imprudente almacenar la latitud y la longitud como decimales en el servidor Sql.
Actualización 2
Si planea hacer cálculos como distancia, área, etc., es difícil calcularlos correctamente sobre la superficie de la tierra. Cada tipo de geografía almacenado en SQL Server también se almacena con un ID de referencia espacial . Estos id's pueden ser de diferentes esferas (la tierra es 4326). Esto significa que los cálculos en SQL Server realmente calcularán correctamente sobre la superficie de la tierra (en lugar de as- las-moscas-cuervo que podría ser a través de la superficie de la tierra).