Freigeben über


LineString

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric SQL-Datenbank in Microsoft Fabric SQL in Microsoft Fabric

Ein LineString ist ein eindimensionales Objekt, das eine Abfolge von Punkten darstellt, und die Liniensegmente, die sie in SQL-Datenbank Modul-Räumlichen Daten verbinden.

LineString-Instanzen

Die folgende Abbildung zeigt Beispiele für LineString-Instanzen .

Diagramm mit Beispielen für Geometrie-LineString-Instanzen.

Folgendes wird dargestellt:

  • Abbildung 1 zeigt eine einfache, nicht geschlossene LineString -Instanz.

  • Abbildung 2 zeigt eine nicht einfache, nicht geschlossene LineString -Instanz.

  • Abbildung 3 zeigt eine einfache, geschlossene LineString -Instanz und daher einen Ring.

  • Abbildung 4 zeigt eine nicht einfache, geschlossene LineString -Instanz und daher keinen Ring.

Akzeptierte Instanzen

Akzeptierte LineString-Instanzen können in eine Geometrievariable eingegeben werden, sind aber möglicherweise keine gültigen LineString-Instanzen . Damit eine LineString -Instanz akzeptiert wird, müssen die folgenden Kriterien erfüllt sein. Die Instanz muss aus mindestens zwei Punkten gebildet werden, oder sie muss leer sein. Die folgenden LineString-Instanzen werden akzeptiert.

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 zeigt, dass eine LineString -Instanz zwar akzeptiert werden kann, möglicherweise jedoch nicht gültig ist.

Die folgende LineString -Instanz wird nicht akzeptiert. Es löst ein System.FormatException.

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

Gültige Instanzen

Damit eine LineString-Instanz gültig ist, muss sie die folgenden Kriterien erfüllen.

  1. Die LineString -Instanz muss akzeptiert sein.
  2. Wenn eine LineString-Instanz nicht leer ist, muss sie mindestens zwei unterschiedliche Punkte enthalten.
  3. Die LineString -Instanz kann sich über ein Intervall von zwei oder mehr aufeinanderfolgenden Punkten nicht selbst überschneiden.

Die folgenden LineString -Instanzen sind gültig.

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

Die folgenden LineString -Instanzen sind nicht gültig.

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

Warnung

Die Erkennung von LineString -Überschneidungen basiert auf Gleitkommaberechnungen, die nicht genau sind.

Beispiele

Beispiel A.

Das folgende Beispiel zeigt, wie eine geometry LineString -Instanz aus drei Punkten und mit der SRID 0 (null) erstellt wird:

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

Beispiel B.

Jeder Punkt in der LineString Instanz kann Z -Werte (Erhöhung) und M (Measure) enthalten. In diesem Beispiel werden der LineString im vorherigen Beispiel erstellten Instanz M-Werte hinzugefügt. M und Z können Werte sein NULL .

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

Beispiel C.

Im folgenden Beispiel wird veranschaulicht, wie eine geometry LineString -Instanz mit zwei Punkten erstellt wird, die identisch sind. Ein Aufruf, der IsValid angibt, dass die LineString-Instanz ungültig ist. Ein Aufruf zum MakeValid Konvertieren der LineString-Instanz in einen 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  

Hier sehen Sie das Ergebnis.

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