Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego warto korzystać z typu danych geograficznych SQL Server 2008?

Jeśli planujesz wykonywać dowolne obliczenia przestrzenne, EF 5.0 zezwala na wyrażenia LINQ, takie jak:

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

W takim razie jest bardzo dobry powód, aby korzystać z geografii.

Wyjaśnienie przestrzenne w ramach Entity Framework .

Zaktualizowano za pomocą Tworzeniem przestrzennych baz danych o wysokiej wydajności

Jak zauważyłem w Odpowiedź Noela Abrahama :

Porównując typy pamięci:

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'

Wynik:

name    rows    data     
Geo     20000   728 KB   
LatLon  20000   560 KB

Typ danych geograficznych zajmuje 30% więcej miejsca.

Dodatkowo typ danych geograficznych nie ogranicza się tylko do przechowywania punktu, możesz również przechowywać Ciąg linii, Ciąg kołowy, Krzywa złożona, Wielokąt, Wielokąt krzywej, Kolekcja geometrii, MultiPoint, MultiLineString, MultiPolygon i więcej . Każda próba przechowywania nawet najprostszych typów geografii (jak szerokość/długość) poza punktem (na przykład LINESTRING(1 1, 2 2)) spowoduje nałożenie dodatkowych wierszy dla każdego punktu, kolumny do sekwencjonowania dla kolejności każdego punktu i kolejna kolumna do grupowania linii. SQL Server ma również metody dla typów danych Geography, które obejmują obliczanie Obszar, Granica, Długość, odległości i więcej .

Nierozsądne wydaje się przechowywanie szerokości i długości geograficznej w formacie dziesiętnym na serwerze SQL.

Aktualizacja 2

Jeśli planujesz wykonać jakiekolwiek obliczenia, takie jak odległość, powierzchnia itp., prawidłowe obliczenie ich na powierzchni ziemi jest trudne. Każdy typ Geography przechowywany w SQL Server jest również przechowywany z Spatial Reference ID . Te identyfikatory mogą należeć do różnych sfer (ziemia ma 4326). Oznacza to, że obliczenia w SQL Server będą faktycznie obliczane poprawnie na powierzchni ziemi (zamiast jak- wrona-leci które mogą przechodzić przez powierzchnię ziemi).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj pierwszy rząd dla jednej grupy

  2. DATEDIFF() Przykłady w SQL Server

  3. zapytanie sql, aby zwrócić różnice między dwiema tabelami

  4. Dla transakcji bez zapisu, która jest tańsza/szybsza:COMMIT czy ROLLBACK?

  5. SQL Server FOR XML Path tworzy powtarzające się węzły