Dela via


LineString

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

En LineString är ett endimensionellt objekt som representerar en sekvens med punkter och linjesegmenten som ansluter dem i SQL Database Engine spatiala data.

LineString instances

Följande bild visar exempel på LineString-instanser .

Diagram över exempel på geometri LineString-instanser.

Som du ser i bilden:

  • Bild 1 är en enkel, icke-sluten LineString-instans .

  • Bild 2 är en icke-omfattande, icke-sluten LineString-instans .

  • Bild 3 är en stängd, enkel LineString-instans och är därför en ring.

  • Bild 4 är en stängd, icke-omfattande LineString-instans och är därför inte en ring.

Accepted instances

Godkända LineString-instanser kan matas in i en geometrivariabel, men de kanske inte är giltiga LineString-instanser . Följande villkor måste uppfyllas för att en LineString-instans ska accepteras. Instansen måste bestå av minst två punkter eller vara tom. Följande LineString-instanser accepteras.

DECLARE @g1 geometry = 'LINESTRING EMPTY';  
DECLARE @g2 geometry = 'LINESTRING(1 1,2 3,4 8, -6 3)';  
DECLARE @g3 geometry = 'LINESTRING(1 1, 1 1)';  

@g3 visar att en LineString-instans kan accepteras, men inte giltig.

Följande LineString-instans accepteras inte. Det kastar en System.FormatException.

DECLARE @g geometry = 'LINESTRING(1 1)';  

Valid instances

För att en LineString-instans ska vara giltig måste den uppfylla följande villkor.

  1. LineString-instansen måste godkännas.
  2. Om en LineString-instans inte är tom måste den innehålla minst två distinkta punkter.
  3. LineString-instansen kan inte överlappa sig själv över ett intervall på två eller flera på varandra följande punkter.

Följande LineString-instanser är giltiga.

DECLARE @g1 geometry= 'LINESTRING EMPTY';  
DECLARE @g2 geometry= 'LINESTRING(1 1, 3 3)';  
DECLARE @g3 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0)';  
DECLARE @g4 geometry= 'LINESTRING(1 1, 3 3, 2 4, 2 0, 1 1)';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();  

Följande LineString-instanser är inte giltiga.

DECLARE @g1 geometry = 'LINESTRING(1 4, 3 4, 2 4, 2 0)';  
DECLARE @g2 geometry = 'LINESTRING(1 1, 1 1)';  
SELECT @g1.STIsValid(), @g2.STIsValid();  

Warning

Identifieringen av LineString-överlappningar baseras på flyttalsberäkningar, som inte är exakta.

Examples

Example A.

I följande exempel visas hur du skapar en geometry LineString instans med tre punkter och ett SRID på 0:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('LINESTRING(1 1, 2 4, 3 9)', 0);  

Example B.

Varje punkt i instansen LineString kan innehålla Z-värden (höjd) och M (mått). I det här exemplet läggs M-värden till i den LineString instans som skapades i föregående exempel. M och Z kan vara NULL värden.

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('LINESTRING(1 1 NULL 0, 2 4 NULL 12.3, 3 9 NULL 24.5)', 0);  

Example C.

I följande exempel visas hur du skapar en geometry LineString instans med två punkter som är samma. Ett anrop till IsValid anger att LineString-instansen inte är giltig. Ett anrop för att MakeValid konvertera LineString-instansen till en punkt.

DECLARE @g geometry  
SET @g = geometry::STGeomFromText('LINESTRING(1 3, 1 3)',0);  
IF @g.STIsValid() = 1  
  BEGIN  
     SELECT @g.ToString() + ' is a valid LineString.';    
  END  
ELSE  
  BEGIN  
     SELECT @g.ToString() + ' is not a valid LineString.';  
     SET @g = @g.MakeValid();  
     SELECT @g.ToString() + ' is a valid Point.';    
  END  

Här är resultatet.

LINESTRING(1 3, 1 3) is not a valid LineString  
POINT(1 3) is a valid Point.