sql >> Databáze >  >> RDS >> Sqlserver

Proč používat geografický datový typ SQL Server 2008?

Pokud plánujete provádět jakýkoli prostorový výpočet, EF 5.0 umožňuje výrazy LINQ jako:

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

Pak je tu velmi dobrý důvod, proč používat geografii.

Vysvětlení prostoru v rámci Entity Framework .

Aktualizováno pomocí Vytváření vysoce výkonných prostorových databází

Jak jsem poznamenal na odpověď Noela Abrahamse :

Takže porovnání typů úložiště:

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'

Výsledek:

name    rows    data     
Geo     20000   728 KB   
LatLon  20000   560 KB

Geografický datový typ zabírá o 30 % více místa.

Navíc geografický datový typ není omezen pouze na uložení bodu, můžete také uložit LineString, CircularString, CompoundCurve, Polygon, CurvePolygon, GeometryCollection, MultiPoint, MultiLineString a MultiPolygon a další . Jakýkoli pokus o uložení i těch nejjednodušších typů geografie (jako zeměpisná šířka/délka) za bod (například instance LINESTRING(1 1, 2 2)) způsobí další řádky pro každý bod, sloupec pro řazení pro pořadí každého bodu. a další sloupec pro seskupení řádků. SQL Server má také metody pro datové typy Geography, které zahrnují výpočet Area, Boundary, Délka, Vzdálenosti a další .

Zdá se nerozumné ukládat zeměpisnou šířku a délku jako desítkové na serveru SQL.

Aktualizace 2

Pokud plánujete provádět jakékoli výpočty, jako je vzdálenost, plocha atd., je obtížné je správně vypočítat na povrchu Země. Každý typ geografie uložený na serveru SQL je také uložen s ID prostorového odkazu . Tato ID mohou být z různých sfér (země je 4326). To znamená, že výpočty v SQL Serveru budou skutečně správně počítat na povrchu Země (místo as- vrana-mouchy který by mohl být skrz povrch země).



  1. Po instalaci se WAMP server nespouští ve Windows 10

  2. Jak fuzzy spárovat e-mail nebo telefon pomocí Elasticsearch?

  3. SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo se nezdařilo:zadán název uzlu ani název_serveru nebo není znám

  4. Může INNER JOIN nabídnout lepší výkon než EXISTS