Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLKoncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Existují dva typy prostorových dat. Datový typ geometrie podporuje data v rovině, tedy euklidovská (rovinná). Datový typ geometrie odpovídá jednoduchým funkcím Open Geospatial Consortium (OGC) pro specifikaci SQL verze 1.1.0 a je kompatibilní se standardem SQL MM (standard ISO).
SQL Server také podporuje datový typ geografie, který ukládá elipsoidální (kulová země) data, jako jsou souřadnice GPS zeměpisné šířky a délky.
Tip
SQL Server spatial tools je sponzorovaná opensourcová kolekce nástrojů od Microsoftu pro použití s prostorovými typy na SQL Serveru. Tento projekt poskytuje sadu opakovaně použitelných funkcí, které můžou aplikace využívat. Tyto funkce mohou zahrnovat rutiny převodu dat, nové transformace, agregace atd. Další podrobnosti najdete v tématu Microsoft/SQLServerSpatialTools na GitHubu.
Prostorové datové objekty
Typy geometrie a geografie podporují 16 typů prostorových datových objektů nebo instančních typů. Nicméně pouze 11 z těchto typů instancí jsou instantiovatelné; Tyto instance můžete vytvořit a pracovat s nimi v databázi. Tyto instance odvozují určité vlastnosti z nadřazených datových typů.
Následující obrázek znázorňuje hierarchii geometrie, na které jsou založeny datové typy geometrie a zeměpisné oblasti. Instantiovatelné typy geometrie a geografie jsou označené modře.
Pro datový typ geografie existuje další instanciovatelný typ: FullGlobe. Typy geometrie a zeměpis můžou rozpoznat konkrétní instanci, pokud je to dobře formátovaná instance, i když není explicitně definovaná. Pokud například definujete instanci Point explicitně pomocí metody STPointFromText(), geometrii a geografie rozpoznat instanci jako Bod, pokud je vstup metody dobře formátován. Pokud definujete stejnou instanci pomocí metody STGeomFromText(), geometrie i zeměpisné typy rozpoznávají instanci jako bod.
Podtypy pro typy geometrie a geografie jsou rozdělené na jednoduché typy a typy kolekcí. Některé metody jako STNumCurves() fungují jenom s jednoduchými typy.
Jednoduché typy jsou:
Typy kolekcí jsou:
Rozdíly mezi geometrií a zeměpisnými datovými typy
Dva typy prostorových dat se často chovají podobně. Existují některé klíčové rozdíly v tom, jak se data ukládají a manipulují.
Jak jsou definovány spojovací hrany
Definující data pro LineString a Polygon jsou pouze vrcholy. Spojovací hrana mezi dvěma vrcholy v geometrii je přímka. Spojovací hrana mezi dvěma vrcholy v typologii geografie je krátký největší eliptický oblouk mezi těmito dvěma vrcholy. Velká elipsa je průsečík elipsoidu s rovinou přes jeho střed. Velký elipsový oblouk je obloukový segment na velkém elipse.
Jak jsou definovány kruhové obloukové segmenty
Kruhové obloukové segmenty pro typy geometrie jsou definovány v kartézské rovině souřadnic XY (hodnoty Z jsou ignorovány). Kruhové obloukové segmenty pro zeměpisné typy jsou definovány křivkovými segmenty v referenční kouli. Jakákoli rovnoběžka na referenční sféře může být definována dvěma kruhovými oblouky, které jsou navzájem doplňkové, kde body obou oblouků mají konstantní úhel zeměpisné šířky.
Měření v prostorových datových typech
V planárním (plochém) systému jsou měření vzdáleností a oblastí uvedeny ve stejné jednotce měření jako souřadnice. Pomocí geometrie datového typu je vzdálenost mezi (2, 2) a (5, 6) pět jednotek bez ohledu na použité jednotky.
V elipsoidálním nebo kruhovém systému jsou souřadnice uvedeny ve stupních zeměpisné šířky a délky. Délky a oblasti se ale obvykle měří v metrech a čtverečních metrech, i když měření může záviset na identifikátoru prostorového odkazu geografické instance . Nejběžnější jednotkou pro měření pro zeměpisný typ dat je metr.
Orientace prostorových dat
Orientace prstence mnohoúhelníku není důležitým faktorem v planárním systému. jednoduché funkce OGC pro specifikaci SQL nediktují pořadí prstenců a SQL Server nevynucuje pořadí prstenců.
V elipsoidálním systému nemá mnohoúhelník bez orientace žádný význam nebo je nejednoznačný. Popisuje například prsten kolem rovníku severní nebo jižní polokouli? Pokud k uložení prostorové instance použijeme zeměpisný typ, musíme určit orientaci okruhu a přesně popsat umístění instance.
Vnitřní část mnohoúhelníku v elipsoidovém systému je definována „pravidlem levé ruky“: jestliže si představíte, že jdete po okruhu zeměpisného mnohoúhelníku a následujete body podle pořadí, oblast vlevo je považována za vnitřní část mnohoúhelníku a oblast vpravo za jeho vnější část.
Pokud je úroveň kompatibility na SQL Serveru 100 nebo nižší, má zeměpisný typ následující omezení:
Každá geografická instance se musí vejít do jedné polokoule. Nesmí být uloženy žádné prostorové objekty větší než polokoule.
Jakákoli geografická instance z Open Geospatial Consortium (OGC) Well-Known Text (WKT) nebo z Well-Known Binary (WKB) reprezentace, která vytváří objekt větší než polokoule, vyvolá ArgumentException.
zeměpisné metody datového typu, které vyžadují vstup dvou zeměpisných instancí, jako jsou
STIntersection(),STUnion(),STDifference()aSTSymDifference(), vrátí hodnotu null, pokud se výsledky z metod nevejdou do jediné polokoule.STBuffer()vrátí také hodnotu null, pokud výstup překročí jednu polokouli.
V SQL Serveru FullGlobe je speciální typ Mnohoúhelníku, který pokrývá celý svět. Má oblast, ale bez ohraničení nebo vrcholů.
Vnější a vnitřní kroužky v datovém typu geography
OGC Simple Features for SQL Specification popisuje vnější prstence a vnitřní prstence, ale tento rozdíl má malý smysl pro zeměpisný typ dat SQL Serveru ; jakýkoli prstenec mnohoúhelníku může být považován za vnější prstenec.
Další informace o specifikacích OGC naleznete v následujících dokumentech:
- specifikace OGC, jednoduchý přístup k funkcím – část 1 – společná architektura
- specifikace OGC, Jednoduchý přístup k funkcím Část 2 – možnosti SQL
Kruhové obloukové segmenty
Tři okamžité typy mohou mít kruhové obloukové segmenty: Kruhový řetězec, CompoundCurvea CurvePolygon. Kruhový obloukový segment je definován třemi body v dvojrozměrné rovině a třetí bod nemůže být stejný jako první bod. Několik příkladů obloukových úseků
První dva příklady ukazují typické kruhové obloukové segmenty. Všimněte si, že každý ze tří bodů leží na obvodu kruhu.
Další dva příklady ukazují, jak lze segment čáry definovat jako kruhový obloukový segment. Tři body jsou stále potřeba k definování kruhového obloukového segmentu na rozdíl od běžného segmentu čáry, který lze definovat pouze dvěma body.
Metody, které pracují s typy kruhových segmentů oblouku, používají přímé úsečky k přiblížení kruhového oblouku. Počet úseček použitých k aproximaci oblouku bude záviset na délce a zakřivení oblouku. Hodnoty Z lze uložit u každého typu segmentů kruhového oblouku, ale nebudou použity ve výpočtech.
Note
Pokud jsou hodnoty Z uvedeny pro kruhové obloukové segmenty, musí být stejné pro všechny body v kruhovém obloukovém segmentu, aby byly přijaty pro vstup. Příklad: CIRCULARSTRING(0 0 1, 2 2 1, 4 0 1) je přijat, ale CIRCULARSTRING(0 0 1, 2 2 2, 4 0 1) není přijat.
Porovnání LineStr a CircularString
Tento příklad ukazuje, jak uložit stejné rovnoramenné trojúhelníky pomocí instance LineString a instance CircularString:
DECLARE @g1 geometry;
DECLARE @g2 geometry;
SET @g1 = geometry::STGeomFromText('LINESTRING(1 1, 5 1, 3 5, 1 1)', 0);
SET @g2 = geometry::STGeomFromText('CIRCULARSTRING(1 1, 3 1, 5 1, 4 3, 3 5, 2 3, 1 1)', 0);
IF @g1.STIsValid() = 1 AND @g2.STIsValid() = 1
BEGIN
SELECT @g1.ToString(), @g2.ToString()
SELECT @g1.STLength() AS [LS Length], @g2.STLength() AS [CS Length]
END
Instance CircularString vyžaduje k definování trojúhelníku sedm bodů. linestring instance vyžaduje k definování trojúhelníku pouze čtyři body. Důvodem je, že CircularString instance ukládá kruhové obloukové segmenty, nikoli segmenty čáry. Strany trojúhelníku uloženého v instanci CircularString jsou ABC, CDE a EFA. Strany trojúhelníku uloženého v LineString instance jsou AC, CE a EA.
Podívejte se na následující příklad:
SET @g1 = geometry::STGeomFromText('LINESTRING(0 0, 2 2, 4 0)', 0);
SET @g2 = geometry::STGeomFromText('CIRCULARSTRING(0 0, 2 2, 4 0)', 0);
SELECT @g1.STLength() AS [LS Length], @g2.STLength() AS [CS Length];
Tady jsou výsledky.
LS Length CS Length
5.65685... 6.28318...
CircularString instance používají méně bodů k ukládání křivek s větší přesností než LineString instance. cyklický řetězec instance jsou užitečné pro ukládání kruhových hranic, jako je poloměr hledání 20 mil od určitého bodu. linestring instance jsou vhodné pro ukládání hranic, které jsou lineární jako čtvercový blok města.
Porovnání LineStr a CompoundCurve
Následující příklady kódu ukazují, jak uložit stejný obrázek pomocí LineString a CompoundCurve instancí:
SET @g = geometry::Parse('LINESTRING(2 2, 4 2, 4 4, 2 4, 2 2)');
SET @g = geometry::Parse('COMPOUNDCURVE((2 2, 4 2), (4 2, 4 4), (4 4, 2 4), (2 4, 2 2))');
SET @g = geometry::Parse('COMPOUNDCURVE((2 2, 4 2, 4 4, 2 4, 2 2))');
V předchozích příkladech mohla obrázek uložit buď instance LineString, nebo instance CompoundCurve. V dalším příkladu se pro uložení výseče koláčového grafu používá CompoundCurve:
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(2 2, 1 3, 0 2),(0 2, 1 0, 2 2))');
Instance CompoundCurve může přímo uložit kruhový obloukový segment (2 2, 1 3, 0 2), ale instance LineString by musela převést tuto křivku na několik menších úseček.
Porovnání CircularStr a CompoundCurve
Následující příklad kódu ukazuje, jak lze výsečový řez uložit v instanci CircularString:
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING( 0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)');
SELECT @g.ToString(), @g.STLength();
Uložení dílu koláče pomocí instance CircularString vyžaduje, aby se pro každý úsek použily tři rozdílné body. Pokud není známý zprostředkující bod, musí se buď vypočítat, nebo se musí koncový bod segmentu čáry zdvojnásobit, jak ukazuje následující fragment kódu:
SET @g = geometry::Parse('CIRCULARSTRING( 0 0, 3 6.3246, 3 6.3246, 0 7, -3 6.3246, 0 0, 0 0)');
Instance CompoundCurve umožňují jak komponenty LineString, tak i CircularString, aby bylo nutné znát pouze dva body na segmenty čáry odpovídající výseči. Tento příklad kódu ukazuje použití CompoundCurve k uložení stejného obrázku:
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING( 3 6.3246, 0 7, -3 6.3246), (-3 6.3246, 0 0, 3 6.3246))');
SELECT @g.ToString(), @g.STLength();
Porovnání Mnohoúhelníku a Křivkového mnohoúhelníku
Instance CurvePolygon mohou použít instance CircularString a CompoundCurve při definování svých vnějších a vnitřních prstenců. polygon instance nemůžou.
Limitations
V SQL databázích v Microsoft Fabric jsou podporovány geografické a geometrické datové typy, ale nelze je zrcadlit do Fabric OneLake.
Související obsah
- Prostorová data
- Referenční metody datového typu geometrie
- referenční dokumentace metody zeměpisného datového typu
- STNumCurves (geometrický datový typ)
- STNumCurves (zeměpisný datový typ)
- STGeomFromText (datový typ geometrie)
- STGeomFromText (zeměpisný datový typ)