Freigeben über


LineString

A LineString ist ein eindimensionales Objekt, das eine Abfolge von Punkten und die Liniensegmente darstellt, die sie verbinden.

LineString-Instanzen

Die folgende Abbildung zeigt Beispiele für LineString Instanzen.

Beispiele für LineString-Geometrieinstanzen

Wie in der Abbildung gezeigt:

  • Abbildung 1 ist eine einfache, nicht geschlossene LineString Instanz.

  • Abbildung 2 ist eine nicht einfache, nicht abgeschlossene LineString Instanz.

  • Abbildung 3 ist eine geschlossene, einfache LineString Instanz und ist daher ein Ring.

  • Abbildung 4 ist eine geschlossene, nicht einfache LineString Instanz und ist daher kein Ring.

Akzeptierte Instanzen

Akzeptierte LineString Instanzen können in eine Geometrievariable eingegeben werden, sind aber möglicherweise keine gültigen LineString Instanzen. Die folgenden Kriterien müssen erfüllt sein, damit eine LineString Instanz akzeptiert wird. 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 an, dass eine LineString Instanz akzeptiert werden kann, aber nicht gültig ist.

Die folgende LineString Instanz wird nicht akzeptiert. Es wird 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 werden.

  2. Wenn eine LineString Instanz nicht leer ist, muss sie mindestens zwei unterschiedliche Punkte enthalten.

  3. Die LineString Instanz kann sich nicht über ein Intervall von zwei oder mehr aufeinander folgenden Punkten ü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 ungü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 Überlappungen basiert auf Gleitkommaberechnungen, die nicht genau sind.

Beispiele

Das folgende Beispiel zeigt, wie Sie eine geometry``LineString Instanz mit drei Punkten und einer SRID von 0 erstellen:

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

Jeder Punkt in der LineString Instanz kann Z-Werte (Höhe) und M-Werte (Maß) enthalten. In diesem Beispiel werden der LineString im obigen Beispiel erstellten Instanz M-Werte hinzugefügt. M und Z können Nullwerte sein.

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

Das folgende Beispiel zeigt, wie Sie eine geometry LineString Instanz mit zwei Punkten erstellen, die identisch sind. Ein Aufruf an IsValid zeigt an, dass die LineString Instanz ungültig ist, und ein Aufruf an MakeValid wird die LineString Instanz in eine Point konvertieren.

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

Der obige Codeausschnitt gibt Folgendes zurück:

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

Siehe auch

STLength (Geometrie-Datentyp)STStartPoint (Geometrie-Datentyp)STEndpoint (Geometrie-Datentyp)STPointN (Geometrie-Datentyp)STNumPoints (Geometrie-Datentyp)STIsRing (Geometrie-Datentyp)STIsClosed (Geometrie-Datentyp)STPointOnSurface (Geometrie-Datentyp)Räumliche Daten (SQL Server)