Mehr

Leere Geometrien in GEOMETRYCOLLECTION

Leere Geometrien in GEOMETRYCOLLECTION


Ich habe gerade ein seltsames Verhalten in PostGIS in Bezug auf das WKT-Parsing festgestellt.

Eine GeometryCollection mit 1 oder mehreren leeren Geometrien

postgis_test=# SELECT ST_GeomFromEWKT('GEOMETRYCOLLECTION(POINT LEER, LINESTRING LEER)'); 0107000000000000000

ist das gleiche eine leere GeometryCollection

postgis_test=# SELECT ST_GeomFromEWKT('GEOMETRYSAMMLUNG LEER'); 0107000000000000000

Dies scheint nicht richtig zu sein. Aber hier ist der wirklich seltsame Teil. Wenn Sie eine nicht leere Geometrie in die Sammlung werfen, werden die leeren Geometrien plötzlich in der Sammlung dargestellt:

postgis_test=# SELECT ST_GeomFromEWKT('GEOMETRYCOLLECTION(POINT LEER, LINESTRING LEER, POINT LEER)'); 010700000000000000 postgis_test=# SELECT ST_GeomFromEWKT('GEOMETRYCOLLECTION(POINT LEER, LINESTRING LEER, POINT (1 2))'); 01070000000300000001040000000000000000102000000000000000101000000000000000000F03F0000000000000040

Es erscheint seltsam, dass leere Geometrien nur erkannt werden, wenn die Sammlung mindestens eine nicht leere enthält.

Ist das ein Fehler? Ist dieses Verhalten irgendwo dokumentiert?


Es ist kein Bug, eher eine strategische Faulheit. 1.X-Versionen von PostGIS unterstützten nur GEOMETRYCOLLECTION EMPTY, keine anderen Formen von empty. Für 2.X habe ich (vielleicht töricht) die ganze Vielfalt des Nichts angenommen. Das Ergebnis ist eine nicht ganz vollständige Unterstützung von Varietäten des Nichts, die durch die Tatsache, dass Unterstützungsbibliotheken wie GEOS ihre eigenen Vorstellungen davon haben, welche Arten von Nichts es wert sind, erhalten zu werden, etwas missbräuchlich gemacht werden, und Standards wie WKB nicht einmal einige darstellen können Formen davon (POINT EMPTY ist in WKB nicht darstellbar).

Wie auch immer, ein Haufen Nichts ist immer noch nichts. Müssen Sie die Treue Ihrer Sammlungen von nichts bewahren?

AKTUALISIEREN

Wenn ich mir den PostGIS-Code ansehe, bin ich mir ziemlich sicher, dass Sie einen Effekt der Funktion "ist leer" sehen. Ihre Eingabe wird in der Tat in eine interne Darstellung geparst, die die Eingabe widerspiegelt, eine Sammlung leerer Dinge. Aber bei der Ausgabe an WKB lautet der erste Test "Ist dieses Ding leer? Wenn ja, geben Sie eine leere Darstellung aus". Dann erhalten wir diese Situation: Ist eine Geometriesammlung leerer Dinge selbst leer? Philosophie 101. In Bezug auf die meisten Dinge, die wir damit machen könnten (Fläche oder Länge berechnen, sie mit Dingen schneiden, wirklich jede Operation überhaupt), ist eine Sammlung von leeren genau dasselbe wie eine einzelne leere. Das Ausmisten mit der Definition von "ist leer" hat viele Auswirkungen auf die gesamte Codebasis, daher haben wir es nicht viel berührt.


Leere Geometrien in GEOMETRYCOLLECTION - Geographische Informationssysteme

Eine Sammlung von Geometrieformen. Enthaltene Geometrien können Polyline s, Polygon s oder andere GeometryCollection sein. Das Umgruppieren zusammengehöriger Polygone in einer einzigen Sammlung hilft, das Rendern zu beschleunigen. Polygone können räumlich (europäische Polygone, afrikanische Polygone usw.) oder nach Werten (50 Meter Isobath, 100 Meter Isobath usw.) neu gruppiert werden.

Eine GeometryCollection wird zunächst mit einem Koordinatensystem erstellt. Eine beliebige Anzahl von Geometrien kann nach der Konstruktion mit add(Geometry) oder add(float[],int,int) hinzugefügt werden. Geometrien werden in der Reihenfolge gerendert, in der sie hinzugefügt wurden. Wenn Polygone in viele Teile zerbrochen sind, kann die Methodeassembl(. ) helfen, sie vor dem Rendern zusammenzusetzen.

Notiz: diese Klasse hat eine natürliche Ordnung, die mit Gleichen nicht vereinbar ist. Die Methode CompareTo(java.lang.Object) vergleicht nur den Wert der Sammlung, während equals(java.lang.Object) auch alle Koordinatenpunkte vergleicht. Die natürliche Sortierung für GeometryCollection ist praktisch, um Sammlungen in alphabetischer Reihenfolge oder Isobaten in aufsteigender Höhe zu sortieren.

Version: $Id: GeometryCollection.java 17672 2006-01-19 00:25:55Z desruisseaux $ Autor: Martin Desruisseaux Siehe auch: Polyline , Polygon , Serialized Form Aufgabe: TODO: Fügen Sie eine 'getTree(boolean)'-Methode hinzu, die einen TreeNode zurückgibt . Wäre nützlich zum Debuggen. Knoten enthält GeometryCollection nur, wenn das boolesche Argument false ist, GeometryCollection und Polygons, wenn true (nicht Polylines). Node.toString gibt Geometry.getName() zurück.

Feldzusammenfassung
Von der Klasse org.geotools.renderer.geom.Geometry geerbte Felder
STANDARD-KOORDINATEN-SYSTEM
Konstrukteur-Zusammenfassung
GeometrieSammlung ()
Konstruieren Sie eine anfänglich leere Sammlung mit dem Standardkoordinatensystem.
GeometryCollection (Koordinatensystem-Koordinatensystem)
Konstruieren Sie eine anfänglich leere Sammlung.
GeometryCollection (GeometryCollection-Geometrie)
Erstellen Sie eine Sammlung mit denselben Daten wie die angegebene Sammlung.
Zusammenfassung der Methode
Leere add (float[] Array, Int Lower, Int Upper)
Fügt dieser Sammlung Punkte hinzu.
Geometrie hinzufügen (Geometrie zum Hinzufügen)
Fügen Sie dieser Sammlung eine Geometrie hinzu.
Leere hinzufügen (java.awt.Shape-Form)
Fügen Sie Geometrien aus der angegebenen Form hinzu.
Leere Assemble (ProgressListener-Fortschritt)
Montieren Sie alle Polylinien mit Standardeinstellung.
Leere Assemble (java.awt.Shape mapBounds, float[] toComplete, ProgressListener progress)
Stellen Sie alle Polylinien zusammen, um geschlossene Polygone für das richtige Rendering zu erstellen.
Geometrie Clip (Clipper-Clipper)
Gibt eine Geometrie zurück, die ungefähr dieser Geometrie entspricht, die auf die angegebenen Grenzen zugeschnitten ist.
java.lang.Object Klon ()
Gibt eine Kopie dieser Geometrie zurück.
int CompareTo (java.lang.Object-Objekt)
Vergleichen Sie diese Geometrie mit dem angegebenen Objekt für die Bestellung.
schweben komprimieren (CompressionLevel-Ebene)
Komprimieren Sie alle Geometrien in dieser Sammlung.
boolesch enthält (doppeltes x, doppeltes y)
Gibt an, ob sich der angegebene ( x , y ) Punkt innerhalb dieser Geometrie befindet.
boolesch enthält (java.awt.geom.Point2D-Punkt)
Gibt an, ob sich der angegebene Punkt innerhalb dieser Geometrie befindet.
boolesch enthält (java.awt.geom.Rectangle2D rect)
Überprüft, ob das angegebene Rechteck vollständig in dieser Geometrie enthalten ist.
boolesch enthält (java.awt.Shape-Form)
Überprüft, ob die angegebene Form vollständig in dieser Geometrie enthalten ist.
boolesch gleich (java.lang.Object-Objekt)
Vergleicht das angegebene Objekt mit dieser Geometrie auf Gleichheit.
java.awt.geom.Rectangle2D getBounds2D ()
Gibt den Begrenzungsrahmen dieser Geometrie einschließlich der möglichen Ränder zurück.
Koordinatensystem getCoordinateSystem ()
Gibt das Koordinatensystem der Geometrie oder null zurück, wenn es unbekannt ist.
java.util.Sammlung getGeometrien ()
Gibt die Auflistung von Geometry-Objekten zurück.
java.util.Sammlung getGeometries (java.awt.geom.Point2D-Punkt)
Gibt die Sammlung von Geometrien zurück, die den angegebenen Punkt enthalten.
java.util.Sammlung getGeometriesContaining (java.awt.Shape-Form)
Gibt die Sammlung von Geometrien zurück, die die angegebene Form enthalten.
java.util.Sammlung getGeometriesIntersecting (java.awt.Shape-Form)
Gibt die Auflistung von Geometrien zurück, die die angegebene Form schneiden.
java.lang.String getName (java.util.Locale-Gebietsschema)
Gibt den lokalisierten Namen für diese Geometrie zurück oder null, wenn keiner.
java.awt.geom.PathIterator getPathIterator (java.awt.geom.AffineTransform-Transformation)
Gibt einen Pfaditerator für diese Geometrie zurück.
int getPointCount()
Gibt die Anzahl der Punkte in dieser Geometrie zurück.
java.lang.String getPolygonName (java.awt.geom.Point2D-Punkt, java.util.Locale-Gebietsschema)
Gibt den Namen des kleinsten Polygons an der angegebenen Position zurück.
schweben getRenderingResolution()
Gibt die Rendering-Auflösung zurück.
Statistiken getResolution ()
Gibt die Auflösung der Geometrie zurück.
schweben Wert erhalten ()
Gibt den Wert für diese Auflistung zurück, oder NaN, wenn keiner.
int Hash-Code ()
Gibt einen Hashwert für diese Geometrie zurück.
boolesch schneidet (java.awt.geom.Rectangle2D rect)
Testet, ob das angegebene Rechteck das Innere dieser Geometrie schneidet.
boolesch schneidet (java.awt.Shape-Form)
Testet, ob die angegebene Form das Innere dieser Geometrie schneidet.
boolesch ist leer ()
Bestimmt, ob die Auflistung leer ist.
geschützte Leere readObject (java.io.ObjectInputStream in)
Wird während der Deserialisierung aufgerufen.
boolesch entfernen (Geometrie zu entfernen)
Entfernt eine Geometrie aus dieser Sammlung.
Leere alles entfernen ()
Entfernen Sie alle Geometrien aus dieser Geometrie.
Leere setCoordinateSystem (KoordinatenSystem-Koordinatensystem)
Legen Sie das Koordinatensystem der Geometrie fest.
Leere setRenderingResolution (Float-Auflösung)
Weist dieser Geometrie darauf hin, dass die angegebene Auflösung zum Rendern ausreicht.
Leere setResolution (doppelte Auflösung)
Legen Sie die Auflösung der Geometrie fest.
Leere setValue (java.lang.Vergleichbarer Wert)
Legen Sie den Wert für diese Geometrie fest.
Leere setValue (Floatwert)
Legen Sie den Wert für diese Geometrie fest.
geschützte Leere writeObject (java.io.ObjectOutputStream aus)
Wird während der Serialisierung aufgerufen.
Von der Klasse org.geotools.renderer.geom.Geometry geerbte Methoden
enthält, getBounds, getID, getPathIterator, getStyle, getUserObject, Schnittpunkte, setID, setStyle, setUserObject, toString
Von der Klasse java.lang.Object geerbte Methoden
abschließen, getClass, benachrichtigen, benachrichtigenAlle, warten, warten, warten

GeometrieKollektion

GeometrieKollektion

GeometrieKollektion

GetName

Überschreibungen: getName in Klasse Geometry Parameters: locale - Das gewünschte Gebietsschema. Wenn für dieses Gebietsschema kein Name verfügbar ist, wird ein Standardgebietsschema verwendet. Rückgabe: Der Name der Geometrie, wenn möglich lokalisiert. Aufgabe: TODO: Wir sollten einen Weg finden, die Erstellung des Format-Objekts bei jedem Aufruf zu vermeiden.

Wert erhalten

SetValue

SetValue

Parameter: value - Der Wert von value für diese Geometrie.

GetCoordinateSystem

SetCoordinateSystem

Angegeben durch: setCoordinateSystem in der Klasse Geometry Parameters: CoordinateSystem - Das neue Koordinatensystem. Ein Nullwert setzt das zur Bauzeit angegebene Koordinatensystem zurück. Löst aus: org.opengis.referencing.operation.TransformException – Wenn eine Transformation fehlgeschlagen ist. Im Fehlerfall bleibt der Zustand dieses Objekts unverändert (als ob diese Methode nie aufgerufen worden wäre). UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Parameter: array - Koordinaten-Array (kann NaNs enthalten). Diese Daten werden kopiert. Folglich hat jede Änderung der Daten keine Auswirkungen auf die mit dieser Methode erstellten Geometrien. Lower - Index der ersten x-Ordinate, die der Polylinie hinzugefügt werden soll. upper - Index nach der letzten y-Ordinate, die der Polylinie hinzugefügt werden soll. Löst: UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Parameter: shape - Die hinzuzufügende Form. Löst: java.lang.IllegalArgumentException - wenn die angegebene Form nicht hinzugefügt werden kann. Dieser Fehler kann auftreten, wenn Shape eine Instanz von Geometry ist und ein inkompatibles Koordinatensystem verwendet. UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Parameter: toAdd - Geometrie zum Hinzufügen. Löst: org.opengis.referencing.operation.TransformException - wenn die angegebene Geometrie in diesem Sammlungskoordinatensystem nicht transformiert werden kann. UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Löschen

Parameter: toRemove - Die zu entfernende Geometrie. Rückgabe: true, wenn die Geometrie entfernt wurde. Löst: UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Alles entfernen

Löst: UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Montieren

Diese Methode ausführen Einmal für eine bestimmte Sammlung von Geometrien vor dem Rendern hilft, diese zu reparieren. Der Algorithmus ist:

  1. Eine Liste aller möglichen Polylinienpaare wird erstellt.
  2. Für jedes Polylinienpaar wird der kürzeste Abstand zwischen ihren Enden berechnet. Alle Kombinationen zwischen Anfang und Ende einer Polylinie mit dem Anfang oder Ende der anderen Polylinie werden berücksichtigt.
  3. Das Paar mit dem kürzesten Abstand wird identifiziert. Wenn der kürzeste Abstand vom Ende einer Polylinie das andere Ende derselben Polylinie ist, wird die Polylinie als geschlossenes Polygon identifiziert (z. B. eine Insel oder ein See). Andernfalls werden die am nächsten liegenden Polylinien zusammengeführt.
  4. Die Schleife wird ab Schritt 1 erneut ausgeführt, bis keine Polylinien mehr zusammengeführt wurden.

Parameter: mapBounds – Die begrenzte Form der Karte oder null für die Annahme einer aus dieser Geometrie abgeleiteten rechteckigen Karte. Dies ist die Begrenzungsform der Software, die die Polylinien erstellt hat, und kein beliebiger Clip, den die Anwendung haben möchte. toComplete - Wert der Sammlungen, die mit Kartenrahmen abgeschlossen werden sollen, oder null, wenn keine. progress - Ein optionaler Fortschrittslistener ( null in none). Dies ist ein optionales, aber empfohlenes Argument, da die Berechnung sehr lang sein kann. Löst aus: org.opengis.referencing.operation.TransformException - wenn eine Transformation erforderlich war und fehlgeschlagen ist. UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Montieren

Parameter: progress - Ein optionaler Fortschrittslistener ( null in none). Dies ist ein optionales, aber empfohlenes Argument, da die Berechnung sehr lang sein kann. Löst aus: org.opengis.referencing.operation.TransformException - wenn eine Transformation erforderlich war und fehlgeschlagen ist. UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

Überschreibungen: Clip in Klasse Geometrie Parameter: clipper - Der Clipping-Bereich. Rückgabe: null, wenn diese Geometrie den Clip nicht schneidet, dies, wenn kein Clip ausgeführt wurde, oder andernfalls eine neue zugeschnittene Geometrie.

GetGeometries

Rückgabe: Eine Sammlung von Geometry-Objekten.

GetGeometries

Parameter: point - Die zu betrachtenden Koordinaten im Koordinatensystem dieser Geometrie. Rückgabe: Die Sammlung von Geometrien unter dem angegebenen Punkt.

GetGeometriesContaining

Parameter: shape – Eine Form mit Koordinaten, die gemäß getCoordinateSystem() ausgedrückt werden. Rückgabe: Die Sammlung von Geometrien, die die angegebene Form enthalten.

GetGeometriesSchneidend

Parameter: shape – Eine Form mit Koordinaten, die gemäß getCoordinateSystem() ausgedrückt werden. Rückgabe: Die Sammlung von Geometrien, die die angegebene Form schneiden.

GetPolygonName

Parameter: point - Die zu betrachtenden Koordinaten im Koordinatensystem dieser Geometrie. locale - Das gewünschte Gebietsschema für den Geometrienamen. Rückgabe: Der Geometriename an der angegebenen Position oder null, wenn keiner vorhanden ist.

Ist leer

GetPointCount

GetBounds2D

Angegeben von: getBounds2D in der Schnittstelle java.awt.Shape Angegeben von: getBounds2D in der Klasse Geometry Rückgabewert: Ein Begrenzungsrahmen dieser Geometrie. Änderungen an diesem Rechteck wirken sich nicht auf den Cache aus.

Enthält

Spezifiziert durch: enthält in der Schnittstelle java.awt.Shape Overrides: enthält in der Klasse Geometry Parameters: x - die angegebenen x-Koordinaten in diesem Geometriekoordinatensystem. y - die angegebenen y-Koordinaten in diesem Geometriekoordinatensystem. Rückgabewert: true, wenn die angegebenen Koordinaten innerhalb der Geometriegrenze liegen, andernfalls false.

Enthält

Angegeben von: enthält in der Schnittstelle java.awt.Shape Angegeben von: enthält in der Klasse Geometry Parameters: point - der angegebene Punkt in diesem Geometriekoordinatensystem. Rückgabewert: true, wenn der angegebene Punkt innerhalb der Geometriegrenze liegt, andernfalls false.

Enthält

Spezifiziert durch: enthält in der Schnittstelle java.awt.Shape Überschreibungen: enthält in der Klasse Geometry

Enthält

Schneidet

Spezifiziert durch: schneidet in der Schnittstelle java.awt.Shape Überschreibungen: schneidet in der Klasse Geometry

Schneidet

Kompresse

Angegeben durch: Komprimierung in Klasse Geometrie Parameter: level - Die zu verwendende Komprimierungsstufe (oder Algorithmus). Eine Erläuterung der verfügbaren Algorithmen finden Sie im Javadoc zu CompressionLevel. Rückgabe: A Einschätzung der Kompressionsrate. Ein Wert von 0,2 bedeutet beispielsweise, dass das neue Polygon . verwendet CA 20 % weniger Speicher. Löst: org.opengis.referencing.operation.TransformException - Wenn während einer kartografischen Projektion ein Fehler aufgetreten ist. UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

GetResolution

Angegeben durch: getResolution in der Klasse Geometry Rückgabewerte: Statistik über die Auflösung oder null, wenn diese Geometrie keinen Punkt enthält. Wenn nicht null, enthält das Statistikobjekt Minimum, Maximum, Mittelwert, Effektivwert und Standardabweichung immer in linearen Einheiten.

SetAuflösung

Angegeben durch: setResolution in Klasse Geometry Parameter: Resolution - Gewünschte Auflösung, in den gleichen Einheiten wie getResolution() . Löst: org.opengis.referencing.operation.TransformException - Wenn einige Koordinatentransformationen erforderlich waren und fehlgeschlagen sind. Es gibt keine Garantie für den Zustand der Kontur im Fehlerfall. UnmodifiableGeometryException - wenn das Ändern dieser Geometrie einen Container beschädigen würde. Um diese Ausnahme zu vermeiden, klonen Sie diese Geometrie, bevor Sie sie ändern.

GetRenderingResolution

Überschreibt: getRenderingResolution in der Klasse Geometry Rückgabewert: Die Rendering-Auflösung in Einheiten des Koordinatensystems dieser Geometrie (lineare oder Winkeleinheiten) oder 0, wenn die feinste verfügbare Auflösung verwendet werden soll.

SetRenderingResolution

Überschreibungen: setRenderingResolution in der Klasse Geometry Parameter: resolution - Die zum Rendern zu verwendende Auflösung in Einheiten des Koordinatensystems dieser Geometrie (lineare oder Winkeleinheiten).


Skalare Funktionen

Gibt die Fläche der gegebenen Geometrie zurück geom wenn es sich um ein POLYGON oder MULTIPOLYGON handelt, das den angegebenen Lösungstyp verwendet. Kehrt zurück 0 wenn der Eingabegeometrietyp (MULTI)POINT oder (MULTI)LINESTRING ist. Verfügbare Lösungstypen:

  • 0 (Standard) - 2D euklidischer Bereich
  • 1 - gekrümmte Oberfläche auf einer Kugel in Quadratmetern
  • 2 - gekrümmte Oberfläche auf einem Sphäroid in Quadratmetern

Gibt eine Geometrie zurück, die alle Punkte darstellt, deren Abstand von der gegebenen Geometrie geom kleiner oder gleich dem angegebenen Abstand ist Radius. Das Radius Einheiten können durch die Lösung Typ (Standard ist in Grad) und die Radius wird im bereitgestellten erstellt Stil. Das Stil Optionen werden als Liste von durch Leerzeichen getrennten Schlüssel-Wert-Paaren angegeben, z. B. 'quad_segs=8 endcap=rund'. Wenn ein leerer Stil aufführen ('') bereitgestellt wird, werden die Standardeinstellungen verwendet. Das Stil Parameter muss angegeben werden, um a . bereitzustellen Lösung Typ.

  • quad_segs -- die Anzahl der Segmente, die verwendet werden, um einen Viertelkreis anzunähern (Standard ist 8)
  • Endkappe -- der Endcap-Stil des Puffers (Standard ist runden) Optionen sind runden, Wohnung (oder Hintern), und Platz
  • beitreten -- der Join-Stil des Puffers (Standard ist runden) Optionen sind runden, Gehrung (oder Gehrung), und Fase
  • mitre_limit -- die Grenze des Gehrungsverhältnisses, ausgedrückt als Gleitkommazahl (miter_limit ist auch akzeptabel)
  • 0 (Standard) - 2D-Euklidischer Radiusabstand in Grad
  • 1 - Radiusabstand der gekrümmten Oberfläche auf einer Kugel in Metern
  • 2 - Radiusabstand der gekrümmten Oberfläche auf einem Sphäroid in Metern

Um einen 5-Meter-Puffer herum zu schaffen geom Verwenden der Standardstile: ST_BUFFER(geom, 5, '', 1). So erstellen Sie einen 5-Fuß-Puffer (umrechnen von Fuß in Meter) um geom mit den folgenden Stilen: ST_BUFFER(geom, 5*0.3048,'quad_segs=4 endcap=flach', 1)

Berechnet das 2-D PUNKT In geom1 das ist am nächsten geom2 den angegebenen Lösungstyp verwenden. Ob geom1 oder geom2 ist leer, a Null ist zurück gekommen. Verfügbare Lösungstypen:

  • 0 (Standard) - Euklidisch berechnet den nächsten Punkt unter Verwendung der 2-D-Euklidischen Distanz
  • 1 - Haversine berechnet den nächsten Punkt anhand der Kugelentfernung in Metern
  • 2 - Vincenty gibt den minimalen Sphäroidabstand in Metern zurück, genauer als Haversine, aber langsamere Leistung

Gibt nur die angegebenen zurück Typ aus der gegebenen Geometrie Sammlung. Typ ist eine Zahl, die folgendem zugeordnet ist:

Berechnet den Mindestabstand zwischen den gegebenen Geometrien, geom1 und geom2, unter Verwendung des angegebenen Lösungstyps. Verfügbare Lösungstypen:

  • 0 (Standard) - Euklidisch gibt den 2-D-euklidischen Abstand zurück
  • 1 - Haversine gibt den minimalen Kugelabstand in Metern zurück
  • 2 - Vincenty gibt den minimalen Sphäroidabstand in Metern zurück, genauer als Haversine, aber langsamere Leistung

Notiz: Ob geom1 und geom2 schneiden (überprüfen mit ST_INTERSECTS), wird der Abstand immer sein 0.

Berechnet den Mindestabstand zwischen den gegebenen Punkten, x1, y1 und x2, y2, unter Verwendung des angegebenen Lösungstyps. Verfügbare Lösungstypen:

  • 0 (Standard) - Euklidisch gibt den 2-D-euklidischen Abstand zurück
  • 1 - Haversine gibt den minimalen Kugelabstand in Metern zurück
  • 2 - Vincenty gibt den minimalen Sphäroidabstand in Metern zurück, genauer als Haversine, aber langsamere Leistung

Kehrt zurück 1 (wahr) wenn der maximale Abstand zwischen den Geometrien geom1 und geom2 ist kleiner oder gleich dem angegebenen Distanz voneinander mit dem angegebenen Lösungstyp. Ob geom1 oder geom2 ist Null, 0 (falsch) wird zurückgegeben. Verfügbare Lösungstypen:

  • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
  • 1 - Sphere verwendet Meter, um die Entfernung zu berechnen
  • 2 - Sphäroid verwendet Meter, um die Entfernung zu berechnen, genauer als Kugel, aber langsamere Leistung

Kehrt zurück 1 (wahr) wenn der Mindestabstand zwischen den Geometrien geom1 und geom2 liegt innerhalb der angegebenen Distanz voneinander mit dem angegebenen Lösungstyp. Verfügbare Lösungstypen:

  • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
  • 1 - Sphere verwendet Meter, um die Entfernung zu berechnen
  • 2 - Sphäroid verwendet Meter, um die Entfernung zu berechnen, genauer als Kugel, aber langsamere Leistung

Gibt eine Ellipse mit den folgenden Werten zurück:

  • Zentrumx -- die x-Koordinate oder der Längengrad, der verwendet wird, um die Ellipse zu zentrieren
  • zentriert -- die y-Koordinate oder der Breitengrad, der verwendet wird, um die Ellipse zu zentrieren
  • Höhe -- die Höhe der Ellipse (in Grad)
  • Breite -- die Breite der Ellipse (in Grad)

Kehrt zurück 1 (wahr) wenn geom1 liegt innerhalb der angegebenen Distanz der Begrenzungsbox von geom2 den angegebenen Lösungstyp verwenden. Verfügbare Lösungstypen:

  • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
  • 1 - Sphere verwendet Meter, um die Entfernung zu berechnen

Gibt die dreidimensionale Version (z. B. X-, Y- und Z-Koordinaten) von . zurück geom, eine bereitgestellte Geometrie oder ein Satz von Geometrien (z. B. über GEOMETRYCOLLECTION oder WKT-Spaltenname), mit z als neuer Z-Wert der Geometrie. Die bereitgestellten Z-Werte können auch aus einer numerischen Spalte abgeleitet werden. Wenn nein z bereitgestellt wird, a 0 Wird angewendet werden.

Wenn eine WKT-Spalte vorgesehen ist für geom und eine numerische Spalte ist vorgesehen für z, werden die Z-Werte zeilenweise in der Quelltabelle mit den bereitgestellten Geometrien abgeglichen. Wenn eine singuläre Geometrie vorgesehen ist geom und eine Spalte ist vorgesehen für z, werden dreidimensionale Versionen der bereitgestellten Geometrie für jeden Z-Wert zurückgegeben, der in der bereitgestellten gefunden wird z Säule. Wenn Spalten für beide vorgesehen sind geom und z und Nullwerte in beiden Spalten vorhanden sind, wird die Zeile mit Nullwerten in den Ergebnissen übersprungen.

Gibt eine Hash-String-Darstellung der gegebenen Geometrie zurück geom mit angegebenem Präzision (die Länge des Geohash-Strings). Je länger die Präzision, desto genauer ist der Hash. Standardmäßig, Präzision ist eingestellt auf 20 das Maximum für Präzision ist 32. Kehrt zurück Null Wenn geom ist eine leere Geometrie.

Der zurückgegebene Wert wird nicht sei ein Geohash der exakten Geometrie, aber ein Geohash des Schwerpunkts der gegebenen Geometrie

Gibt die Typ-ID von from . zurück geom. Typ- und ID-Zuordnungen:

  • PUNKT = 0
  • LINESTRING = 1
  • POLYGON = 3
  • MEHRPUNKT = 4
  • MULTILINESTRING = 5
  • MULTIPOLYGON = 6
  • GEOMETRIESAMMLUNG = 7

Erstellt ein MULTIPOLYGON, das ein Gitter aus Sechsecken zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens enthält. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Die Größe (in Metern) der Seiten der einzelnen Sechsecke wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

  • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
  • 0 (Standard) - 100 Millionen Zellen
  • <n> - Benutzerdefiniertes Limit von n Zellen

Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.

Gibt die Länge der Geometrie zurück, wenn es sich um einen LINESTRING oder MULTILINESTRING handelt. Kehrt zurück 0 wenn ein anderer Geometrietyp, z. B. POINT, MULTIPOINT usw., auch GEOMETRYCOLLECTIONs unterstützt werden, aber die oben genannte Typbeschränkung weiterhin gilt, wird die Sammlung rekursiv nach LINESTRINGs und MULTILINESTRINGs durchsucht und die Summe aller unterstützten Geometrietypen wird zurückgegeben (nicht unterstützte Typen werden ignoriert .) ). Verfügbare Lösungstypen:

  • 0 (Standard) - 2D-euklidische Länge
  • 1 - Länge auf einer Kugel in Metern
  • 2 - Länge auf einem Sphäroid in Metern

Gibt den LINESTRING zurück, der die längste Punktlinie zwischen den beiden Geometrien darstellt. Wenn mehrere längste Zeilen gefunden werden, wird nur die erste gefundene Zeile zurückgegeben. Ob geom1 oder geom2 ist leer, Null ist zurück gekommen. Verfügbare Lösungstypen:

  • 0 (Standard) - Euklidisch verwendet Grad, um die längste Linie zu berechnen
  • 1 - Sphere verwendet Meter, um die längste Linie zu berechnen
  • 2 - Sphäroid verwendet Meter, um die längste Linie zu berechnen, genauer als Kugel, aber langsamere Leistung

Erstellt einen LINESTRING aus geom wenn es ein MULTIPOINT ist. Ob geom ein POINT ist, muss es mindestens einen weiteren POINT geben, um einen LINESTRING zu erstellen. Ob geom ein LINESTRING ist, muss er mindestens zwei Punkte haben. Kehrt zurück Null Wenn geom ist kein POINT, MULTIPOINT oder LINESTRING

Diese Funktion kann in Bezug auf die Leistung ziemlich kostspielig sein

Erzeugt einen POINT an der angegebenen Koordinate

Diese Funktion kann in Bezug auf die Leistung ziemlich kostspielig sein

Erstellt ein POLYGON aus geom. Eingaben müssen geschlossene LINESTRINGs sein

Diese Funktion kann in Bezug auf die Leistung ziemlich kostspielig sein

Gibt den maximalen Abstand zwischen den angegebenen geom1 und geom2 Geometrien mit dem angegebenen Lösungstyp. Ob geom1 oder geom2 ist leer, Null ist zurück gekommen. Verfügbare Lösungstypen:

  • 0 (Standard) - gibt den maximalen 2D-euklidischen Abstand zurück
  • 1 - Die Kugel gibt die maximale Entfernung in Metern zurück
  • 2 - Sphäroid gibt die maximale Entfernung in Metern zurück, genauer als Kugel, aber langsamere Leistung

Erstellt mehrere Puffer an den angegebenen Distanz um das gegebene geom Geometrie. Mehrere Abstände werden als durch Kommas getrennte Werte in einem Array angegeben, z. B. [10,20,30]. Gültige Werte für draußen sind:

  • VOLL -- zeigt an, dass sich Puffer überlappen oder das Gegebene abdecken geom Geometrie. Dies ist die Standardeinstellung.
  • OUTSIDE_ONLY -- zeigt an, dass Puffer Ringe um das Gegebene sein werden geom Geometrie.

Gibt den Umfang der Geometrie zurück, wenn es sich um ein POLYGON oder MULTIPOLYGON handelt. Kehrt zurück 0 wenn ein anderer Geometrietyp, z. B. POINT, MULTIPOINT, LINESTRING oder MULTILINESTRING. GEOMETRYCOLLECTIONs werden ebenfalls unterstützt, aber die oben genannte Typbeschränkung gilt weiterhin. Die Sammlung wird rekursiv nach POLYGONs und MULTIPOLYGONs durchsucht und die Summe aller unterstützten Geometrietypen wird zurückgegeben (nicht unterstützte Typen werden ignoriert). Verfügbare Lösungstypen:

  • 0 (Standard) - 2D-euklidische Länge
  • 1 - Länge auf einer Kugel in Metern
  • 2 - Länge auf einem Sphäroid in Metern

Gibt einen POINT mit dem angegebenen zurück Geohash mit einer durch die ganze Zahl festgelegten Genauigkeit Präzision. Ob Präzision angegeben ist, verwendet die Funktion so viele Zeichen im Hash wie Präzision um die Geometrie zu erstellen. Wenn nein Präzision angegeben ist, wird die volle Länge des Geohash wird genutzt.

Der zurückgegebene POINT repräsentiert die Mitte des Begrenzungsrahmens des Geohash

Erstellt ein MULTIPOLYGON mit einem quadratischen Punktraster zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Der Abstand zwischen den Punkten (in Metern) wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

  • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
  • 0 (Standard) - 100 Millionen Zellen
  • <n> - Benutzerdefiniertes Limit von n Zellen

Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.

Gibt das Gegebene zurück geom aber segmentiert n oft, je nachdem, wie max_segment_length Entfernung (in Einheiten basierend auf der Lösung type) teilt die ursprüngliche Geometrie auf. Das neue geom hat garantiert Segmente, die kleiner als die angegebenen sind max_segment_length. Beachten Sie, dass POINTs nicht segmentiert werden können. Sammlungsgeometrien (GEOMETRYCOLLECTION, MULTILINESTRING, MULTIPOINT usw.) können segmentiert werden, jedoch werden nur die einzelnen Teile segmentiert, nicht die Sammlung als Ganzes. Verfügbare Lösungstypen:

  • 0 - Euklidisch verwendet Grad, um die Entfernung zu berechnen
  • 1 (Standard) - Sphere verwendet Meter, um die Entfernung zu berechnen

Gibt eine vereinfachte Version des angegebenen zurück geom Verwenden eines Algorithmus zum Reduzieren der Anzahl von Punkten, die eine gegebene Geometrie umfassen, während versucht wird, die ursprüngliche Form am besten beizubehalten. Das Gegebene Toleranz bestimmt, wie stark die Geometrie vereinfacht werden soll. Je höher die Toleranz, desto einfacher ist die zurückgegebene Geometrie. Einige Löcher werden möglicherweise entfernt und einige ungültige Polygone (z. B. sich selbst überschneidend usw.) können in der zurückgegebenen Geometrie vorhanden sein. Nur (MULTI)LINESTRINGs und (MULTI)POLYGONs können vereinfacht werden, einschließlich derer, die in GEOMETRYCOLLECTIONs gefunden werden, alle anderen Geometrieobjekte werden nicht vereinfacht zurückgegeben.

Das Toleranz sollten in den gleichen Einheiten wie die Daten angegeben werden. Als Faustregel gilt a Toleranz von 0.00001 würde etwa einem Meter entsprechen.

Gibt eine vereinfachte Version des angegebenen zurück geom Verwenden eines Algorithmus zum Reduzieren der Anzahl von Punkten, die eine gegebene Geometrie umfassen, während versucht wird, die ursprüngliche Form am besten beizubehalten. Das Gegebene Toleranz bestimmt, wie stark die Geometrie vereinfacht werden soll. Je höher die Toleranz, desto einfacher ist die zurückgegebene Geometrie. In der zurückgegebenen Geometrie werden keine Löcher entfernt und keine ungültigen Polygone (z. B. sich selbst überschneidend usw.) vorhanden. Nur (MULTI)LINESTRINGs und (MULTI)POLYGONs können vereinfacht werden, einschließlich derer, die in GEOMETRYCOLLECTIONs gefunden werden, alle anderen Geometrieobjekte werden nicht vereinfacht zurückgegeben.

Das Toleranz sollten in den gleichen Einheiten wie die Daten angegeben werden. Als Faustregel gilt a Toleranz von 0.00001 würde etwa einem Meter entsprechen.

Erstellt ein MULTIPOLYGON, das ein Gitter aus Quadraten zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens enthält. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Die Größe (in Metern) der Seiten der einzelnen Quadrate wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

  • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
  • 0 (Standard) - 100 Millionen Zellen
  • <n> - Benutzerdefiniertes Limit von n Zellen

Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.

Erstellt ein MULTIPOLYGON, das ein Gitter aus Dreiecken zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens enthält. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Die Größe (in Metern) der Seiten der einzelnen Dreiecke wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

  • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
  • 0 (Standard) - 100 Millionen Zellen
  • <n> - Benutzerdefiniertes Limit von n Zellen

Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.


Leere Geometrien in GEOMETRYCOLLECTION - Geographische Informationssysteme

MySQL 4.1 führt räumliche Erweiterungen ein, um die Generierung, Speicherung und Analyse von geografischen Merkmalen zu ermöglichen. Derzeit sind diese Funktionen nur für MyISAM-Tabellen verfügbar.

In diesem Kapitel werden die folgenden Themen behandelt:

  • Die Grundlage dieser räumlichen Ausdehnungen im OpenGIS-Geometriemodell
  • Datenformate zur Darstellung von Geodaten
  • So verwenden Sie Geodaten in MySQL
  • Verwendung der Indexierung für Geodaten
  • MySQL-Unterschiede zur OpenGIS-Spezifikation

MySQL implementiert räumliche Erweiterungen gemäß der Spezifikation des Open GIS Consortium (OGC). Dies ist ein internationales Konsortium von mehr als 250 Unternehmen, Agenturen und Universitäten, die an der Entwicklung öffentlich verfügbarer konzeptioneller Lösungen beteiligt sind, die bei allen Arten von Anwendungen zur Verwaltung von Geodaten nützlich sein können. Das OGC unterhält eine Website unter http://www.opengis.org/.

1997 veröffentlichte das Open GIS Consortium die OpenGIS (R) Simple Features Specifications For SQL , ein Dokument, das mehrere konzeptionelle Möglichkeiten zur Erweiterung eines SQL-RDBMS zur Unterstützung räumlicher Daten vorschlägt. Diese Spezifikation ist auf der Open GIS-Website unter http://www.opengis.org/techno/implementation.htm verfügbar. Es enthält zusätzliche Informationen, die für dieses Kapitel relevant sind.

MySQL implementiert eine Teilmenge der SQL mit Geometrietypen Umgebung von OGC vorgeschlagen. Dieser Begriff bezieht sich auf eine SQL-Umgebung, die um eine Reihe von Geometrietypen erweitert wurde. Eine SQL-Spalte mit Geometriewerten wird als Spalte mit einem Geometrietyp implementiert. Die Spezifikationen beschreiben eine Reihe von SQL-Geometrietypen sowie Funktionen für diese Typen zum Erstellen und Analysieren von Geometriewerten.

EIN geografisches Merkmal ist alles auf der Welt, das einen Standort hat. Ein Merkmal kann sein:

  • Eine Entität. Zum Beispiel ein Berg, ein Teich, eine Stadt.
  • Ein Leerzeichen. Zum Beispiel ein Postleitzahlengebiet, die Tropen.
  • Ein definierbarer Standort. Zum Beispiel eine Kreuzung, als ein bestimmter Ort, an dem sich zwei Straßen kreuzen.

Sie können auch Dokumente finden, die den Begriff verwenden Geoinformatik auf geografische Besonderheiten verweisen.

Geometrie ist ein anderes Wort, das ein geografisches Merkmal bezeichnet. Die ursprüngliche Bedeutung des Wortes Geometrie bezeichnet einen Zweig der Mathematik. Eine andere Bedeutung kommt aus der Kartographie und bezieht sich auf die geometrischen Merkmale, die Kartographen verwenden, um die Welt zu kartieren.

In diesem Kapitel werden alle diese Begriffe synonym verwendet: geografisches Merkmal, Geoinformatik, darstellen, oder Geometrie. Der hier am häufigsten verwendete Begriff ist Geometrie.

Definieren wir a Geometrie wie ein Punkt oder eine Ansammlung von Punkten, die alles auf der Welt darstellen, das einen Standort hat.

Der Satz von Geometrietypen, der von OGC vorgeschlagen wird SQL mit Geometrietypen Umgebung basiert auf der OpenGIS-Geometriemodell. In diesem Modell hat jedes geometrische Objekt die folgenden allgemeinen Eigenschaften:

  • Es ist einem räumlichen Bezugssystem zugeordnet, das den Koordinatenraum beschreibt, in dem das Objekt definiert ist.
  • Es gehört zu einer Geometrieklasse.

Die Geometrieklassen definieren eine Hierarchie wie folgt:

  • Geometrie (nicht instanziierbar)
    • Punkt (instanziierbar)
    • Kurve (nicht instanziierbar)
      • LineString (instanziierbar)
        • Linie
        • LinearRing
        • Polygon (instanziierbar)
        • MultiPoint (instanziierbar)
        • MultiCurve (nicht instanziierbar)
          • MultiLineString (instanziierbar)
          • MultiPolygon (instanziierbar)

          Einige dieser Klassen sind abstrakt (nicht instanziierbar). Das heißt, es ist nicht möglich, ein Objekt dieser Klassen zu erstellen. Andere Klassen sind instanziierbar und Objekte können daraus erstellt werden. Jede Klasse hat Eigenschaften und instanziierbare Klassen können Assertionen haben (Regeln, die gültige Klasseninstanzen definieren).

          Geometrie ist die Basisklasse. Es ist eine abstrakte Klasse. Die instanziierbaren Unterklassen von Geometry sind auf null-, ein- und zweidimensionale geometrische Objekte beschränkt, die im zweidimensionalen Koordinatenraum existieren. Alle instanziierbaren Geometrieklassen sind so definiert, dass gültige Instanzen einer Geometrieklasse topologisch geschlossen sind (d. h. alle definierten Geometrien enthalten ihre Begrenzung).

          Die Basisklasse Geometry hat Unterklassen für Point , Curve , Surface und GeometryCollection :

          • Punkt repräsentiert nulldimensionale Objekte.
          • Curve stellt eindimensionale Objekte dar und hat die Unterklasse LineString mit den Unterklassen Line und LinearRing .
          • Surface ist für zweidimensionale Objekte konzipiert und hat die Unterklasse Polygon .
          • GeometryCollection verfügt über spezialisierte null-, ein- und zweidimensionale Sammlungsklassen namens MultiPoint , MultiLineString und MultiPolygon zum Modellieren von Geometrien, die Sammlungen von Points , LineStrings bzw. Polygons entsprechen. MultiCurve und MultiSurface werden als abstrakte Oberklassen eingeführt, die die Sammlungsschnittstellen verallgemeinern, um Kurven und Flächen zu behandeln.

          Geometry , Curve , Surface , MultiCurve und MultiSurface sind als nicht instanziierbare Klassen definiert. Sie definieren einen gemeinsamen Methodensatz für ihre Unterklassen und sind aus Gründen der Erweiterbarkeit enthalten.

          Point , LineString , Polygon , GeometryCollection , MultiPoint , MultiLineString und MultiPolygon sind instanziierbare Klassen.

          Geometrie ist die Wurzelklasse der Hierarchie. Es handelt sich um eine nicht instanziierbare Klasse, die jedoch eine Reihe von Eigenschaften aufweist, die allen Geometriewerten gemeinsam sind, die aus einer der Geometry-Unterklassen erstellt wurden. Diese Eigenschaften werden in der folgenden Liste beschrieben. (Bestimmte Unterklassen haben ihre eigenen spezifischen Eigenschaften, die später beschrieben werden.)

          17.2.3 Geometrieeigenschaften

          Ein Geometriewert hat die folgenden Eigenschaften:

          • Es ist Typ. Jede Geometrie gehört zu einer der instanziierbaren Klassen in der Hierarchie.
          • Es ist SRID, oder Raumbezugskennung. Dieser Wert identifiziert das der Geometrie zugeordnete räumliche Bezugssystem, das den Koordinatenraum beschreibt, in dem das Geometrieobjekt definiert ist.
          • Es ist Koordinaten in seinem räumlichen Bezugssystem, dargestellt als Zahlen mit doppelter Genauigkeit (8 Byte). Alle nicht leeren Geometrien enthalten mindestens ein Paar von (X,Y)-Koordinaten. Leere Geometrien enthalten keine Koordinaten. Koordinaten beziehen sich auf die SRID. In unterschiedlichen Koordinatensystemen kann sich beispielsweise der Abstand zwischen zwei Objekten auch dann unterscheiden, wenn Objekte die gleichen Koordinaten haben, da der Abstand auf dem planar Koordinatensystem und der Abstand auf dem geozentrisch (Koordinaten auf der Erdoberfläche) sind verschiedene Dinge.
          • Es ist Innere, Grenze, und Außen. Alle Geometrien nehmen irgendeine Position im Raum ein. Das Äußere einer Geometrie ist der gesamte Raum, der nicht von der Geometrie eingenommen wird. Das Innere ist der Raum, den die Geometrie einnimmt. Die Grenze ist die Schnittstelle zwischen dem Inneren und Äußeren der Geometrie.
          • Es ist MBR (Minimum Bounding Rectangle) oder Envelope. Dies ist die Begrenzungsgeometrie, gebildet aus den minimalen und maximalen (X,Y)-Koordinaten:
          • Die Qualität des Seins einfach oder nicht einfach. Geometriewerte einiger Typen ( LineString , MultiPoint , MultiLineString) sind entweder einfach oder nicht einfach. Jeder Typ bestimmt seine eigenen Behauptungen, ob er einfach oder nicht einfach ist.
          • Die Qualität des Seins geschlossen oder nicht geschlossen. Geometriewerte einiger Typen ( LineString , MultiString ) sind entweder geschlossen oder nicht geschlossen. Jeder Typ bestimmt seine eigenen Zusicherungen, ob sie geschlossen oder nicht geschlossen sind.
          • Die Qualität des Seins leer oder nicht leer Eine Geometrie ist leer, wenn sie keine Punkte enthält. Äußeres, Inneres und Begrenzung einer leeren Geometrie sind nicht definiert (dh sie werden durch einen NULL-Wert dargestellt). Eine leere Geometrie wird als immer einfach definiert und hat eine Fläche von 0.
          • Es ist Abmessungen. Eine Geometrie kann eine Dimension von -1, 0, 1 oder 2 haben:
            • -1 steht für leere Geometrien.
            • 0 steht für Geometrien ohne Länge und ohne Fläche.
            • 1 steht für Geometrien mit einer Länge ungleich Null und einer Fläche von Null.
            • 2 steht für Geometrien mit Nicht-Null-Bereich.

            Ein Punkt ist eine Geometrie, die eine einzelne Position im Koordinatenraum darstellt.

            17.2.5 Punktbeispiele

            • Stellen Sie sich eine großformatige Weltkarte mit vielen Städten vor. Ein Punkt könnte jede Stadt darstellen.
            • Auf einem Stadtplan könnte ein Punkt eine Bushaltestelle darstellen.

            17.2.6 Punkteigenschaften

            • X-Koordinatenwert.
            • Y-Koordinatenwert.
            • Punkt ist als nulldimensionale Geometrie definiert.
            • Die Grenze eines Punktes ist die leere Menge.

            Eine Kurve ist eine eindimensionale Geometrie, die normalerweise durch eine Folge von Punkten dargestellt wird. Bestimmte Unterklassen von Curve definieren die Art der Interpolation zwischen Punkten. Curve ist eine nicht instanziierbare Klasse.

            17.2.8 Kurveneigenschaften

            • Die Koordinaten seiner Punkte.
            • Kurve ist als eindimensionale Geometrie definiert.
            • Eine Kurve ist einfach, wenn sie nicht zweimal durch denselben Punkt verläuft.
            • Eine Kurve ist geschlossen, wenn ihr Startpunkt gleich ihrem Endpunkt ist.
            • Der Rand einer geschlossenen Kurve ist leer.
            • Die Begrenzung einer nicht geschlossenen Kurve besteht aus ihren beiden Endpunkten.
            • Eine einfache und geschlossene Kurve ist ein LinearRing.

            Ein LineString ist eine Kurve mit linearer Interpolation zwischen Punkten.

            17.2.10 LineString-Beispiele

            • Auf einer Weltkarte könnten LineString-Objekte Flüsse darstellen.
            • In einem Stadtplan könnten LineString-Objekte Straßen darstellen.

            17.2.11 LineString-Eigenschaften

            • Koordinaten von LineString-Segmenten, definiert durch jedes aufeinanderfolgende Punktpaar.
            • Ein LineString ist eine Line, wenn er aus genau zwei Punkten besteht.
            • Ein LineString ist ein LinearRing, wenn er sowohl geschlossen als auch einfach ist.

            Eine Fläche ist eine zweidimensionale Geometrie. Es ist eine nicht instanziierbare Klasse. Die einzige instanziierbare Unterklasse ist Polygon .

            17.2.13 Oberflächeneigenschaften

            • Eine Fläche ist als zweidimensionale Geometrie definiert.
            • Die OpenGIS-Spezifikation definiert eine einfache Oberfläche als Geometrie, die aus einem einzelnen ``Patch'' besteht, der mit einer einzelnen äußeren Begrenzung und null oder mehr inneren Begrenzungen verbunden ist.
            • Die Grenze einer einfachen Fläche ist der Satz geschlossener Kurven, die ihren äußeren und inneren Grenzen entsprechen.

            Ein Polygon ist eine ebene Fläche, die eine mehrseitige Geometrie darstellt. Es wird durch eine einzelne äußere Begrenzung und null oder mehr innere Begrenzungen definiert, wobei jede innere Begrenzung ein Loch im Polygon definiert.

            17.2.15 Polygon-Beispiele

            17.2.16 Polygon-Zusicherungen

            • Die Begrenzung eines Polygons besteht aus einer Reihe von LinearRing-Objekten (d. h. einfachen und geschlossenen LineString-Objekten), die seine äußeren und inneren Begrenzungen bilden.
            • Keine zwei Ringe im Grenzkreuz. Die Ringe in der Begrenzung eines Polygons können sich an einem Punkt schneiden, jedoch nur als Tangente.
            • Ein Polygon darf keine Schnittlinien, Spitzen oder Einstiche aufweisen.
            • Das Innere jedes Polygons ist eine zusammenhängende Punktmenge.
            • Das Äußere eines Polygons mit einem oder mehreren Löchern ist nicht verbunden. Jedes Loch definiert eine verbundene Komponente des Äußeren.

            In den obigen Behauptungen sind Polygone einfache Geometrien. Diese Behauptungen machen ein Polygon zu einer einfachen Geometrie.

            Eine GeometryCollection ist eine Geometrie, die eine Sammlung von einer oder mehreren Geometrien einer beliebigen Klasse ist.

            Alle Elemente in einer GeometryCollection müssen sich im selben räumlichen Bezugssystem (d. h. im selben Koordinatensystem) befinden. GeometryCollection erlegt seinen Elementen keine weiteren Einschränkungen auf, obwohl die in den folgenden Abschnitten beschriebenen Unterklassen von GeometryCollection die Mitgliedschaft einschränken können. Einschränkungen können beruhen auf:

            • Elementtyp (z. B. kann ein MultiPoint nur Point-Elemente enthalten)
            • Abmessungen
            • Einschränkungen hinsichtlich des Grads der räumlichen Überlappung zwischen Elementen

            Ein MultiPoint ist eine Geometriesammlung, die aus Point-Elementen besteht. Die Punkte sind in keiner Weise verbunden oder geordnet.

            17.2.19 MultiPoint-Beispiele

            • Auf einer Weltkarte könnte ein Multipoint eine Kette kleiner Inseln darstellen.
            • Auf einem Stadtplan könnte ein Multipoint die Verkaufsstellen einer Kasse darstellen.

            17.2.20 Multipoint-Eigenschaften

            • MultiPoint ist als nulldimensionale Geometrie definiert.
            • Ein MultiPoint ist einfach, wenn keine zwei seiner Point-Werte gleich sind (identische Koordinatenwerte haben).
            • Die Grenze eines MultiPoints ist die leere Menge.

            Eine MultiCurve ist eine Geometriesammlung, die aus Kurvenelementen besteht. MultiCurve ist eine nicht instanziierbare Klasse.

            17.2.22 MultiCurve-Eigenschaften

            • MultiCurve ist als eindimensionale Geometrie definiert.
            • Eine MultiCurve ist genau dann einfach, wenn alle ihre Elemente einfach sind. Die einzigen Schnittpunkte zwischen zwei beliebigen Elementen treten an Punkten auf, die auf den Grenzen beider Elemente liegen.
            • Die Grenze einer MultiCurve wird durch Anwendung der ``mod 2 union rule'' (auch als ungerade-gerade-Regel bekannt) ermittelt: Ein Punkt liegt in der Grenze einer MultiCurve, wenn er innerhalb der Grenzen einer ungeraden Anzahl von MultiCurve liegt Elemente.
            • Eine MultiCurve ist geschlossen, wenn alle ihre Elemente geschlossen sind.
            • Die Begrenzung einer geschlossenen MultiCurve ist immer leer.

            Ein MultiLineString ist eine MultiCurve-Geometriesammlung, die aus LineString-Elementen besteht.

            17.2.24 MultiLineString-Beispiele

            Eine MultiSurface ist eine Geometriesammlung, die aus Oberflächenelementen besteht. MultiSurface ist eine nicht instanziierbare Klasse. Die einzige instanziierbare Unterklasse ist MultiPolygon .

            17.2.26 MultiSurface-Assertions

            • Die Innenräume von zwei beliebigen Oberflächen in einer MultiSurface dürfen sich nicht überschneiden.
            • Die Grenzen von zwei beliebigen Elementen in einem MultiSurface dürfen sich höchstens an einer endlichen Anzahl von Punkten schneiden.

            Ein MultiPolygon ist ein MultiSurface-Objekt, das aus Polygon-Elementen besteht.

            17.2.28 MultiPolygon-Beispiele

            17.2.29 MultiPolygon-Assertions

            • Die Innenräume von zwei Polygon-Werten, die Elemente eines MultiPolygons sind, dürfen sich nicht überschneiden.
            • Die Grenzen von zwei beliebigen Polygon-Werten, die Elemente eines MultiPolygon sind, dürfen sich nicht kreuzen und dürfen sich nur an einer endlichen Anzahl von Punkten berühren. (Das Überqueren ist auch durch die vorstehende Behauptung verboten.)
            • Ein MultiPolygon darf keine Schnittlinien, Spitzen oder Einstiche aufweisen. Ein MultiPolygon ist eine regelmäßige geschlossene Punktmenge.
            • Das Innere eines MultiPolygons, das aus mehr als einem Polygon besteht, ist nicht verbunden. Die Anzahl der verbundenen Komponenten des Inneren eines MultiPolygon entspricht der Anzahl der Polygon-Werte im MultiPolygon .

            17.2.30 MultiPolygon-Eigenschaften

            • Ein MultiPolygon ist als zweidimensionale Geometrie definiert.
            • Die Begrenzung eines MultiPolygons ist ein Satz geschlossener Kurven (LineString-Werte), die den Begrenzungen seiner Polygon-Elemente entsprechen.
            • Jede Kurve in der Begrenzung des MultiPolygon liegt in der Begrenzung von genau einem Element Polygon .
            • Jede Kurve in der Begrenzung eines Elements Polygon befindet sich in der Begrenzung des MultiPolygon .

            In diesem Abschnitt werden die standardmäßigen räumlichen Datenformate beschrieben, die verwendet werden, um Geometrieobjekte in Abfragen darzustellen. Sie sind:

            Intern speichert MySQL Geometriewerte in einem Format, das weder mit dem WKT- noch mit dem WKB-Format identisch ist.

            Die Well-Known Text (WKT)-Darstellung von Geometrie dient zum Austausch von Geometriedaten in ASCII-Form.

            Beispiele für WKT-Darstellungen von Geometrieobjekten sind:

            • A Point : Beachten Sie, dass Punktkoordinaten ohne Trennkomma angegeben werden.
            • Ein LineString mit vier Punkten:
            • Ein Polygon mit einem Außenring und einem Innenring:
            • Ein MultiPoint mit drei Point-Werten:
            • Ein MultiLineString mit zwei LineString-Werten:
            • Ein MultiPolygon mit zwei Polygon-Werten:
            • Eine GeometryCollection bestehend aus zwei Point-Werten und einem LineString :

            Eine Backus-Naur-Grammatik, die die formalen Produktionsregeln zum Schreiben von WKT-Werten festlegt, finden Sie im OGC-Spezifikationsdokument, auf das am Anfang dieses Kapitels verwiesen wird.

            Die Well-Known Binary (WKB)-Darstellung für geometrische Werte wird durch die OpenGIS-Spezifikationen definiert. Es ist auch im ISO-Standard ``SQL/MM Part 3: Spatial'' definiert.

            WKB wird verwendet, um Geometriedaten als binäre Ströme auszutauschen, die durch BLOB-Werte dargestellt werden, die geometrische WKB-Informationen enthalten.

            WKB verwendet 1-Byte-Ganzzahlen ohne Vorzeichen, 4-Byte-Ganzzahlen ohne Vorzeichen und 8-Byte-Zahlen mit doppelter Genauigkeit (IEEE 754-Format). Ein Byte ist 8 Bit lang.

            Ein WKB-Wert, der POINT(1 1) entspricht, besteht beispielsweise aus dieser Folge von 21 Bytes (jeweils hier durch zwei Hex-Ziffern dargestellt):

            Die Reihenfolge kann in diese Komponenten unterteilt werden:

            Die Komponentendarstellung ist wie folgt:

            • Die Byte-Reihenfolge kann entweder 0 oder 1 sein, um Little-Endian- oder Big-Endian-Speicher anzuzeigen. Die Little-Endian- und Big-Endian-Byte-Reihenfolge werden auch als Network Data Representation (NDR) bzw. External Data Representation (XDR) bezeichnet.
            • Der WKB-Typ ist ein Code, der den Geometrietyp angibt. Werte von 1 bis 7 geben Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon und GeometryCollection an.
            • Ein Punktwert hat X- und Y-Koordinaten, die jeweils als Wert mit doppelter Genauigkeit dargestellt werden.

            WKB-Werte für komplexere Geometriewerte werden durch komplexere Datenstrukturen dargestellt, wie in der OpenGIS-Spezifikation beschrieben.

            In diesem Abschnitt werden die Datentypen beschrieben, die Sie zum Darstellen räumlicher Daten in MySQL verwenden können, sowie die verfügbaren Funktionen zum Erstellen und Abrufen von räumlichen Werten.

            MySQL stellt eine Reihe von Datentypen bereit, die Klassen in der Klassenhierarchie des OpenGIS Geometry Model entsprechen. Einige dieser Typen enthalten einzelne Geometriewerte:

            GEOMETRY ist der allgemeinste dieser Einzelwerttypen und kann Geometriewerte jedes Typs speichern. Die anderen beschränken ihre Werte auf einen bestimmten Geometrietyp.

            Die anderen Datentypen enthalten Sammlungen von Werten:

            GEOMETRYCOLLECTION kann eine Sammlung von Objekten jeglichen Typs speichern. Die anderen Sammlungstypen beschränken Sammlungsmitglieder auf diejenigen mit einem bestimmten Geometrietyp.

            In diesem Abschnitt wird beschrieben, wie Sie mit den im OpenGIS-Standard definierten Funktionen Well-Known Text und Well-Known Binary räumliche Werte erstellen und MySQL-spezifische Funktionen verwenden.

            MySQL bietet eine Reihe von Funktionen, die als Eingabeparameter eine Well-Known-Text-Darstellung (und optional eine Raumbezugssystemkennung (SRID)) verwenden und die entsprechende Geometrie zurückgeben.

            GeomFromText() akzeptiert eine WKT eines beliebigen Geometrietyps als erstes Argument. Eine Implementierung stellt auch typspezifische Konstruktionsfunktionen zum Konstruieren von Geometriewerten jedes Geometrietyps bereit.

            GeomFromText(wkt[,srid]) GeometryFromText(wkt[,srid]) Konstruiert einen Geometriewert eines beliebigen Typs unter Verwendung seiner WKT-Darstellung und SRID. PointFromText(wkt[,srid]) Konstruiert einen POINT-Wert unter Verwendung seiner WKT-Darstellung und SRID. LineFromText(wkt[,srid]) LineStringFromText(wkt[,srid]) Konstruiert einen LINESTRING-Wert unter Verwendung seiner WKT-Darstellung und SRID. PolyFromText(wkt[,srid]) PolygonFromText(wkt[,srid]) Konstruiert einen POLYGON-Wert unter Verwendung seiner WKT-Darstellung und SRID. MPointFromText(wkt[,srid]) MultiPointFromText(wkt[,srid]) Konstruiert einen MULTIPOINT-Wert unter Verwendung seiner WKT-Darstellung und SRID. MLineFromText(wkt[,srid]) MultiLineStringFromText(wkt[,srid]) Konstruiert einen MULTILINESTRING-Wert unter Verwendung seiner WKT-Darstellung und SRID. MPolyFromText(wkt[,srid]) MultiPolygonFromText(wkt[,srid]) Konstruiert einen MULTIPOLYGON-Wert unter Verwendung seiner WKT-Darstellung und SRID. GeomCollFromText(wkt[,srid]) GeometryCollectionFromText(wkt[,srid]) Konstruiert einen GEOMETRYCOLLECTION-Wert unter Verwendung seiner WKT-Darstellung und SRID.

            Die OpenGIS-Spezifikation beschreibt auch optionale Funktionen zum Konstruieren von Polygon- oder MultiPolygon-Werten basierend auf der WKT-Darstellung einer Sammlung von Ringen oder geschlossenen LineString-Werten. Diese Werte können sich überschneiden. MySQL implementiert diese Funktionen noch nicht:

            BdPolyFromText(wkt,srid) Konstruiert einen Polygon-Wert aus einem MultiLineString-Wert im WKT-Format, der eine beliebige Sammlung geschlossener LineString-Werte enthält. BdMPolyFromText(wkt,srid) Konstruiert einen MultiPolygon-Wert aus einem MultiLineString-Wert im WKT-Format, der eine beliebige Sammlung geschlossener LineString-Werte enthält.

            MySQL bietet eine Reihe von Funktionen, die als Eingabeparameter ein BLOB mit einer Well-Known-Binary-Darstellung (und optional einen Spatial Reference System Identifier (SRID)) verwenden und die entsprechende Geometrie zurückgeben.

            GeomFromWKT() akzeptiert eine WKB eines beliebigen Geometrietyps als erstes Argument. Eine Implementierung stellt auch typspezifische Konstruktionsfunktionen zum Konstruieren von Geometriewerten jedes Geometrietyps bereit.

            GeomFromWKB(wkb[,srid]) GeometryFromWKB(wkt[,srid]) Konstruiert einen Geometriewert eines beliebigen Typs unter Verwendung seiner WKB-Darstellung und SRID. PointFromWKB(wkb[,srid]) Konstruiert einen POINT-Wert unter Verwendung seiner WKB-Darstellung und SRID. LineFromWKB(wkb[,srid]) LineStringFromWKB(wkb[,srid]) Konstruiert einen LINESTRING-Wert unter Verwendung seiner WKB-Darstellung und SRID. PolyFromWKB(wkb[,srid]) PolygonFromWKB(wkb[,srid]) Konstruiert einen POLYGON-Wert unter Verwendung seiner WKB-Darstellung und SRID. MPointFromWKB(wkb[,srid]) MultiPointFromWKB(wkb[,srid]) Konstruiert einen MULTIPOINT-Wert unter Verwendung seiner WKB-Darstellung und SRID. MLineFromWKB(wkb[,srid]) MultiLineStringFromWKB(wkb[,srid]) Konstruiert einen MULTILINESTRING-Wert unter Verwendung seiner WKB-Darstellung und SRID. MPolyFromWKB(wkb[,srid]) MultiPolygonFromWKB(wkb[,srid]) Konstruiert einen MULTIPOLYGON-Wert unter Verwendung seiner WKB-Darstellung und SRID. GeomCollFromWKB(wkb[,srid]) GeometryCollectionFromWKB(wkt[,srid]) Konstruiert einen GEOMETRYCOLLECTION-Wert unter Verwendung seiner WKB-Darstellung und SRID.

            Die OpenGIS-Spezifikation beschreibt auch optionale Funktionen zum Konstruieren von Polygon- oder MultiPolygon-Werten basierend auf der WKB-Darstellung einer Sammlung von Ringen oder geschlossenen LineString-Werten. Diese Werte können sich überschneiden. MySQL implementiert diese Funktionen noch nicht:

            BdPolyFromWKB(wkb,srid) Konstruiert einen Polygon-Wert aus einem MultiLineString-Wert im WKB-Format, der eine beliebige Sammlung geschlossener LineString-Werte enthält. BdMPolyFromWKB(wkb,srid) Konstruiert einen MultiPolygon-Wert aus einem MultiLineString-Wert im WKB-Format, der eine beliebige Sammlung geschlossener LineString-Werte enthält.

            Notiz: MySQL implementiert die in diesem Abschnitt aufgeführten Funktionen noch nicht.

            MySQL bietet eine Reihe nützlicher Funktionen zum Erstellen von Geometrie-WKB-Darstellungen. Die in diesem Abschnitt beschriebenen Funktionen sind MySQL-Erweiterungen der OpenGIS-Spezifikationen. Die Ergebnisse dieser Funktionen sind BLOB-Werte, die WKB-Darstellungen von Geometriewerten ohne SRID enthalten. Die Ergebnisse dieser Funktionen können als erstes Argument für jede Funktion in der GeomFromWKB()-Funktionsfamilie ersetzt werden.

            Point(x,y) Konstruiert einen WKB-Punkt anhand seiner Koordinaten. MultiPoint(pt1,pt2. ) Konstruiert einen WKB-MultiPoint-Wert unter Verwendung von WKB-Point-Argumenten. Wenn ein Argument kein WKBPoint ist, ist der Rückgabewert NULL. LineString(pt1,pt2. ) Konstruiert einen WKB-LineString-Wert aus einer Reihe von WKB-Point-Argumenten. Wenn ein Argument kein WKB-Punkt ist, ist der Rückgabewert NULL. Wenn die Anzahl der Point-Argumente weniger als zwei beträgt, ist der Rückgabewert NULL . MultiLineString(ls1,ls2. ) Konstruiert einen WKB-MultiLineString-Wert unter Verwendung von WBK-LineString-Argumenten. Wenn ein Argument kein LineString ist, ist der Rückgabewert NULL. Polygon(ls1,ls2. ) Konstruiert einen WKB-Polygon-Wert aus einer Reihe von WKB-LineString-Argumenten.Wenn ein Argument nicht die WKB eines LinearRing darstellt (d. h. kein geschlossener und einfacher LineString ), ist der Rückgabewert NULL . MultiPolygon(poly1,poly2. ) Konstruiert einen WKB-MultiPolygon-Wert aus einem Satz von WKB-Polygon-Argumenten. Wenn ein Argument kein WKB-Polygon ist, ist der Wiederholungswert NULL. GeometryCollection(g1,g2. ) Erstellt eine WKB GeometryCollection . Wenn ein Argument keine wohlgeformte WKB-Darstellung einer Geometrie ist, ist der Rückgabewert NULL .

            MySQL bietet eine Standardmethode zum Erstellen räumlicher Spalten für Geometrietypen, beispielsweise mit CREATE TABLE oder ALTER TABLE . Derzeit werden räumliche Spalten nur für MyISAM-Tabellen unterstützt.

            • Verwenden Sie die CREATE TABLE-Anweisung, um eine Tabelle mit einer räumlichen Spalte zu erstellen:
            • Verwenden Sie die Anweisung ALTER TABLE, um einer vorhandenen Tabelle eine räumliche Spalte hinzuzufügen oder daraus zu löschen:

            Nachdem Sie räumliche Spalten erstellt haben, können Sie diese mit räumlichen Daten füllen.

            Werte sollten im internen Geometrieformat gespeichert werden, Sie können sie jedoch entweder aus dem Well-Known-Text (WKT) oder Well-Known Binary (WKB) Format in dieses Format konvertieren. Die folgenden Beispiele zeigen, wie Sie Geometriewerte in eine Tabelle einfügen, indem Sie WKT-Werte in ein internes Geometrieformat konvertieren.

            Sie können die Konvertierung direkt in der INSERT-Anweisung durchführen:

            Oder die Konvertierung kann vor dem INSERT erfolgen:

            Die folgenden Beispiele fügen komplexere Geometrien in die Tabelle ein:

            Die vorhergehenden Beispiele verwenden alle GeomFromText(), um Geometriewerte zu erstellen. Sie können auch typspezifische Funktionen verwenden:

            Beachten Sie, dass, wenn ein Client-Anwendungsprogramm WKB-Darstellungen von Geometriewerten verwenden möchte, es dafür verantwortlich ist, korrekt gebildete WKB in Abfragen an den Server zu senden. Es gibt jedoch mehrere Möglichkeiten, diese Anforderung zu erfüllen. Beispielsweise:

            • Einfügen eines POINT(1 1)-Werts mit Hex-Literal-Syntax:
            • Eine ODBC-Anwendung kann eine WKB-Darstellung senden und sie mit einem Argument vom Typ BLOB an einen Platzhalter binden: Andere Programmierschnittstellen unterstützen möglicherweise einen ähnlichen Platzhaltermechanismus.
            • In einem C-Programm können Sie einen Binärwert mit mysql_real_escape_string() maskieren und das Ergebnis in einen Abfragestring einschließen, der an den Server gesendet wird. Siehe Abschnitt 19.1.3.44 mysql_real_escape_string() .

            In einer Tabelle gespeicherte Geometriewerte können mit Konvertierung in ein internes Format geholt werden. Sie können sie auch in das WKT- oder WKB-Format konvertieren.

            Das Abrufen von Geometriewerten im internen Format kann bei Tabellen-zu-Tabelle-Übertragungen nützlich sein:

            Die Funktion AsText() bietet textuellen Zugriff auf Geometriewerte. Es konvertiert eine Geometrie aus dem internen Format in einen WKT-String.

            Die Funktion AsBinary() bietet binären Zugriff auf Geometriewerte. Es konvertiert eine Geometrie aus dem internen Format in ein BLOB, das den WKB-Wert enthält.

            Nachdem Sie räumliche Spalten mit Werten gefüllt haben, können Sie sie abfragen und analysieren. MySQL bietet eine Reihe von Funktionen zum Ausführen verschiedener Operationen mit räumlichen Daten. Diese Funktionen können je nach Art der von ihnen ausgeführten Operation in vier Hauptkategorien eingeteilt werden:

            • Funktionen, die Geometrien zwischen verschiedenen Formaten konvertieren
            • Funktionen, die den Zugriff auf qualitative oder quantitative Eigenschaften einer Geometrie ermöglichen
            • Funktionen, die Beziehungen zwischen zwei Geometrien beschreiben
            • Funktionen, die aus bestehenden Geometrien neue Geometrien erstellen

            Räumliche Analysefunktionen können in vielen Kontexten verwendet werden, wie zum Beispiel:

            • Jedes interaktive SQL-Programm wie mysql oder MySQLCC
            • Anwendungsprogramme, die in einer beliebigen Sprache geschrieben sind, die eine MySQL-Client-API unterstützt

            MySQL unterstützt die folgenden Funktionen zum Konvertieren von Geometriewerten zwischen internem Format und entweder WKT- oder WKB-Format:

            GeomFromText(wkt[,srid]) Konvertiert einen Zeichenfolgenwert aus seiner WKT-Darstellung in ein internes Geometrieformat und gibt das Ergebnis zurück. Außerdem werden eine Reihe typspezifischer Funktionen unterstützt, wie zB PointFromText() und LineFromText() siehe Abschnitt 17.4.2.1 Geometriewerte mit WKT-Funktionen erzeugen. GeomFromWKB(wkb[,srid]) Konvertiert einen Binärwert aus seiner WKB-Darstellung in ein internes Geometrieformat und gibt das Ergebnis zurück. Außerdem werden eine Reihe typspezifischer Funktionen unterstützt, wie zB PointFromWKB() und LineFromWKB() siehe Abschnitt 17.4.2.2 Geometriewerte mit WKB-Funktionen erzeugen. AsText(g) Konvertiert einen Wert im internen Geometrieformat in seine WKT-Darstellung und gibt den resultierenden String zurück. AsBinary(g) Konvertiert einen Wert im internen Geometrieformat in seine WKB-Darstellung und gibt den resultierenden Binärwert zurück.

            Jede Funktion, die zu dieser Gruppe gehört, nimmt einen Geometriewert als Argument und gibt eine quantitative oder qualitative Eigenschaft der Geometrie zurück. Einige Funktionen schränken ihren Argumenttyp ein. Solche Funktionen geben NULL zurück, wenn das Argument einen falschen Geometrietyp hat. Area() gibt beispielsweise NULL zurück, wenn der Objekttyp weder Polygon noch MultiPolygon ist.

            Die in diesem Abschnitt aufgeführten Funktionen schränken ihre Argumente nicht ein und akzeptieren Geometriewerte jeglichen Typs.

            GeometryType(g) Gibt als String den Namen des Geometrietyps zurück, zu dem die Geometrieinstanz g gehört. Der Name entspricht einer der instanziierbaren Geometry-Unterklassen. Dimension(g) Gibt die inhärente Dimension des Geometriewertes g zurück. Das Ergebnis kann -1, 0, 1 oder 2 sein. (Die Bedeutung dieser Werte wird in Abschnitt 17.2.2 Klassengeometrie angegeben.) SRID(g) Gibt eine ganze Zahl zurück, die die räumliche Referenzsystem-ID für den Geometriewert g angibt. Envelope(g) Gibt das Minimum Bounding Rectangle (MBR) für den Geometriewert g zurück. Das Ergebnis wird als Polygonwert zurückgegeben. Das Polygon wird durch die Eckpunkte der Bounding Box definiert:

            Die OpenGIS-Spezifikation definiert außerdem die folgenden Funktionen, die MySQL noch nicht implementiert:

            Boundary(g) Gibt eine Geometrie zurück, die die kombinatorische Grenze des Geometriewerts g abschließt. IsEmpty(g) Gibt 1 zurück, wenn der Geometriewert g die leere Geometrie ist, 0, wenn sie nicht leer ist, und -1, wenn das Argument NULL ist. Wenn die Geometrie leer ist, stellt sie die leere Punktmenge dar. IsSimple(g) Derzeit ist diese Funktion ein Platzhalter und sollte nicht verwendet werden. Wenn implementiert, wird sein Verhalten wie im nächsten Absatz beschrieben sein. Gibt 1 zurück, wenn der Geometriewert g keine anomalen geometrischen Punkte hat, wie z. B. Selbstschnitt oder Selbsttangential. IsSimple() gibt 0 zurück, wenn das Argument nicht einfach ist, und -1, wenn es NULL ist. Die Beschreibung jeder instanziierbaren geometrischen Klasse weiter oben in diesem Kapitel enthält die spezifischen Bedingungen, die dazu führen, dass eine Instanz dieser Klasse als nicht einfach klassifiziert wird.

            Ein Punkt besteht aus seinen X- und Y-Koordinaten, die mit den folgenden Funktionen erhalten werden können:

            X(p) Gibt den X-Koordinatenwert für den Punkt p als Zahl mit doppelter Genauigkeit zurück. Y(p) Gibt den Y-Koordinatenwert für den Punkt p als Zahl mit doppelter Genauigkeit zurück.

            Ein LineString besteht aus Point-Werten. Sie können bestimmte Punkte eines LineString extrahieren, die Anzahl der darin enthaltenen Punkte zählen oder seine Länge abrufen.

            EndPoint(ls) Gibt den Point zurück, der der Endpunkt des LineString-Werts ls ist. GLength(ls) Gibt die Länge des LineString-Werts ls im zugehörigen Raumbezug als Zahl mit doppelter Genauigkeit zurück. IsClosed(ls) Gibt 1 zurück, wenn der LineString-Wert ls geschlossen ist (dh seine StartPoint()- und EndPoint()-Werte sind gleich). Gibt 0 zurück, wenn ls nicht geschlossen ist, und -1, wenn es NULL ist. NumPoints(ls) Gibt die Anzahl der Punkte im LineString-Wert ls zurück. PointN(ls,n) Gibt den n-ten Punkt im Linestring-Wert ls zurück. Punktnummern beginnen bei 1. StartPoint(ls) Gibt den Point zurück, der der Startpunkt des LineString-Werts ls ist.

            Die OpenGIS-Spezifikation definiert außerdem die folgende Funktion, die MySQL noch nicht implementiert:

            IsRing(ls) Gibt 1 zurück, wenn der LineString-Wert ls geschlossen ist (dh seine StartPoint()- und EndPoint()-Werte sind gleich) und einfach ist (durchläuft denselben Punkt nicht mehr als einmal). Gibt 0 zurück, wenn ls kein Ring ist, und -1, wenn es NULL ist.

            Die OpenGIS-Spezifikation definiert außerdem die folgenden Funktionen, die MySQL noch nicht implementiert:

            Centroid(poly) Gibt den mathematischen Schwerpunkt für den Polygonwert poly als Point zurück. Es kann nicht garantiert werden, dass das Ergebnis auf dem Polygon liegt. PointOnSurface(poly) Gibt einen Point-Wert zurück, der sich garantiert auf dem Polygon-Wert poly befindet.

            Die OpenGIS-Spezifikation definiert außerdem die folgenden Funktionen, die MySQL noch nicht implementiert:

            Centroid(mpoly) Gibt den mathematischen Schwerpunkt für den MultiPolygon-Wert mpoly als Point zurück. Es wird nicht garantiert, dass das Ergebnis auf dem MultiPolygon angezeigt wird. PointOnSurface(mpoly) Gibt einen Point-Wert zurück, der sich garantiert auf dem MultiPolygon-Wert mpoly befindet.

            Im Abschnitt 17.5.2 Geometriefunktionen haben wir bereits einige Funktionen besprochen, die neue Geometrien aus den bestehenden konstruieren können:

            • Umschlag (g)
            • Startpunkt(ls)
            • Endpunkt(e)
            • PunktN(ls,n)
            • Außenring(poly)
            • InnenringN(poly,n)
            • GeometrieN(gc,n)

            OpenGIS bietet eine Reihe weiterer Funktionen, die Geometrien erzeugen können. Sie wurden entwickelt, um räumliche Operatoren zu implementieren.

            Diese Funktionen sind in MySQL noch nicht implementiert. Sie sollten in zukünftigen Versionen erscheinen.

            Intersection(g1,g2) Gibt eine Geometrie zurück, die den Punktmengen-Schnittpunkt der Geometriewerte g1 mit g2 darstellt. Union(g1,g2) Gibt eine Geometrie zurück, die die Punktmengenvereinigung der Geometriewerte g1 und g2 darstellt. Difference(g1,g2) Gibt eine Geometrie zurück, die die Punktmengendifferenz des Geometriewerts g1 mit g2 darstellt. SymDifference(g1,g2) Gibt eine Geometrie zurück, die die punktmengensymmetrische Differenz des Geometriewertes g1 mit g2 darstellt. Buffer(g,d) Gibt eine Geometrie zurück, die alle Punkte repräsentiert, deren Abstand vom Geometriewert g kleiner oder gleich einem Abstand von d ist. ConvexHull(g) Gibt eine Geometrie zurück, die die konvexe Hülle des Geometriewerts g darstellt.

            Die in diesen Abschnitten beschriebenen Funktionen verwenden zwei Geometrien als Eingabeparameter und geben eine qualitative oder quantitative Beziehung zwischen ihnen zurück.

            MySQL bietet einige Funktionen, die Beziehungen zwischen minimalen Begrenzungsrechtecke zweier Geometrien g1 und g2 testen können. Sie beinhalten:

            MBRContains(g1,g2) Gibt 1 oder 0 zurück, um anzugeben, ob das minimale Begrenzungsrechteck von g1 das minimale Begrenzungsrechteck von g2 enthält oder nicht. MBRWithin(g1,g2) Gibt 1 oder 0 zurück, um anzugeben, ob das minimale Begrenzungsrechteck von g1 innerhalb des minimalen Begrenzungsrechtecks ​​von g2 liegt oder nicht. MBRDisjoint(g1,g2) Gibt 1 oder 0 zurück, um anzugeben, ob die minimalen Begrenzungsrechte der beiden Geometrien g1 und g2 disjunkt sind (keine Schnittmengen). MBREquals(g1,g2) Gibt 1 oder 0 zurück, um anzugeben, ob die minimalen Begrenzungsrechte der beiden Geometrien g1 und g2 gleich sind oder nicht. MBRIntersects(g1,g2) Gibt 1 oder 0 zurück, um anzugeben, ob sich die minimalen Begrenzungsrechte der beiden Geometrien g1 und g2 schneiden oder nicht. MBROverlaps(g1,g2) Gibt 1 oder 0 zurück, um anzugeben, ob sich die minimalen Begrenzungsrechte der beiden Geometrien g1 und g2 überlappen oder nicht. MBRTouches(g1,g2) Gibt 1 oder 0 zurück, um anzugeben, ob sich die minimalen Begrenzungsrechte der beiden Geometrien g1 und g2 berühren oder nicht.

            Die OpenGIS-Spezifikation definiert die folgenden Funktionen, die MySQL noch nicht implementiert. Sie sollten in zukünftigen Versionen erscheinen. Wenn sie implementiert sind, werden sie die räumliche Analyse vollständig unterstützen, nicht nur die MBR-basierte Unterstützung.

            Die Funktionen arbeiten mit zwei Geometriewerten g1 und g2.

            • Die beiden Geometrien schneiden sich
            • Ihre Schnittmenge führt zu einer Geometrie, deren Dimension um eins kleiner ist als die maximale Dimension der beiden gegebenen Geometrien
            • Ihr Schnittpunkt ist keiner der beiden gegebenen Geometrien gleich

            Es ist bekannt, dass Suchoperationen in nicht-räumlichen Datenbanken mit Hilfe von Indizes optimiert werden können. Dies gilt auch für räumliche Datenbanken. Mit Hilfe verschiedenster bereits konzipierter mehrdimensionaler Indexierungsmethoden ist es möglich, die räumliche Suche zu optimieren. Die typischsten davon sind:

            • Punktabfragen, die nach allen Objekten suchen, die einen bestimmten Punkt enthalten
            • Regionsabfragen, die nach allen Objekten suchen, die eine bestimmte Region überlappen

            MySQL verwendet R-Bäume mit quadratischer Aufteilung um räumliche Spalten zu indizieren. Ein räumlicher Index wird unter Verwendung des MBR einer Geometrie erstellt. Bei den meisten Geometrien ist der MBR ein minimales Rechteck, das die Geometrien umgibt. Bei einer horizontalen oder vertikalen Linienfolge ist der MBR ein in die Linienfolge degeneriertes Rechteck. Für einen Punkt ist der MBR ein zum Punkt degeneriertes Rechteck.

            MySQL kann räumliche Indizes erstellen, indem eine Syntax verwendet wird, die der für die Erstellung regulärer Indizes ähnlich ist, jedoch um das Schlüsselwort SPATIAL erweitert wird. Derzeit indizierte räumliche Spalten müssen als NOT NULL deklariert werden. Die folgenden Beispiele veranschaulichen, wie räumliche Indizes erstellt werden.

            Um räumliche Indizes zu löschen, verwenden Sie ALTER TABLE oder DROP INDEX :

            Beispiel: Angenommen, ein Tabellengeom enthält mehr als 32000 Geometrien, die in der Spalte g vom Typ GEOMETRY gespeichert sind. Die Tabelle hat auch eine AUTO_INCREMENT-Spalte fid zum Speichern von Objekt-ID-Werten.

            Um einen räumlichen Index für die Spalte g hinzuzufügen, verwenden Sie diese Anweisung:

            Der Optimierer untersucht, ob verfügbare räumliche Indizes in die Suche nach Abfragen einbezogen werden können, die eine Funktion wie MBRContains() oder MBRWithin() in der WHERE-Klausel verwenden. Angenommen, wir möchten alle Objekte finden, die sich in dem angegebenen Rechteck befinden:

            Lassen Sie uns nun mit EXPLAIN überprüfen, wie diese Abfrage ausgeführt wird:

            Sehen wir uns nun an, was passieren würde, wenn wir keinen räumlichen Index hätten:

            Lassen Sie uns die obige Abfrage ausführen und den räumlichen Schlüssel ignorieren, den wir haben:

            Wenn der Index nicht verwendet wird, erhöht sich die Ausführungszeit für diese Abfrage von 0,00 Sekunden auf 0,46 Sekunden.

            In zukünftigen Releases werden räumliche Indizes auch zur Optimierung anderer Funktionen verwendet. Siehe Abschnitt 17.5.4 Funktionen zum Testen räumlicher Beziehungen zwischen geometrischen Objekten.


            Leere Geometrien in GEOMETRYCOLLECTION - Geographische Informationssysteme

            In Release 4.1 führt MySQL räumliche Erweiterungen ein, die das Generieren, Speichern und Analysieren von geografischen Merkmalen ermöglichen.

            Ein geografisches Merkmal ist alles auf der Welt, das einen Standort hat.

            • Eine Entität. Zum Beispiel ein Berg, ein Teich, eine Stadt.
            • Ein Leerzeichen. Zum Beispiel ein Postleitzahlengebiet, die Tropen.
            • Ein definierbarer Standort. Zum Beispiel eine Kreuzung, als ein bestimmter Ort, an dem sich zwei Straßen kreuzen.

            Sie können auch Dokumente finden, die den Begriff Geodatenelement verwenden, um auf geografische Merkmale zu verweisen.

            Geometrie ist ein anderes Wort, das ein geografisches Merkmal bezeichnet. Die ursprüngliche Bedeutung des Wortes Geometrie bezeichnet einen Zweig der Mathematik. Eine andere Bedeutung kommt aus der Kartographie und bezieht sich auf die geometrischen Merkmale, die Kartographen verwenden, um die Welt zu kartieren.

            Mit all diesen Begriffen meinen wir dasselbe, ein geografisches Feature oder ein Geodaten-Feature oder ein Feature oder eine Geometrie, wobei Geometrie in dieser Dokumentation am häufigsten verwendet wird.

            Lassen Sie uns eine Geometrie definieren als ein Punkt oder eine Ansammlung von Punkten, die alles auf der Welt darstellen, das einen Standort hat.

            MySQL implementiert räumliche Erweiterungen gemäß den OpenGIS-Spezifikationen.

            Das OpenGIS Consortium (OGC) ist ein internationales Konsortium von mehr als 250 Unternehmen, Agenturen und Universitäten, die an der Entwicklung öffentlich verfügbarer konzeptioneller Lösungen beteiligt sind, die bei allen Arten von Anwendungen zur Verwaltung von Geodaten nützlich sein können. Siehe http://www.opengis.org/.

            1997 veröffentlichte das OpenGIS-Konsortium die OpenGIS (r) Simple Features Specifications For SQL , die mehrere konzeptionelle Möglichkeiten zur Erweiterung eines SQL-RDBMS zur Unterstützung räumlicher Daten vorschlagen. MySQL implementiert eine Teilmenge der von OGC vorgeschlagenen SQL with Geometry Types-Umgebung. Dieser Begriff bezieht sich auf eine SQL-Umgebung, die um eine Reihe von Geometrietypen erweitert wurde. Eine SQL-Spalte mit Geometriewerten wird als Spalte eines Geometrietyps implementiert. Die Spezifikationen beschreiben eine Reihe von SQL-Geometrietypen sowie Funktionen für diese Typen zum Erstellen und Analysieren von Geometriewerten.

            Der Satz von Geometrietypen, der von der SQL with Geometry Types-Umgebung von OGC vorgeschlagen wird, basiert auf OpenGIS Geometry Model . In diesem Modell hat jedes geometrische Objekt:

            • ist einem räumlichen Bezugssystem zugeordnet, das den Koordinatenraum beschreibt, in dem das Objekt definiert ist.
            • gehört zu einer Geometrieklasse.
            • Geometrie
              • Punkt
              • Kurve
                • LineString
                  • Linie
                  • LinearRing
                  • Polygon
                  • MultiPoint
                  • MultiCurve
                    • MultiLineString
                    • MultiPolygon

                    Geometrie ist die Basisklasse. Es ist eine abstrakte (nicht instanziierbare) Klasse. Die instanziierbaren Unterklassen von Geometry sind auf null, eins und zweidimensionale geometrische Objekte beschränkt, die im zweidimensionalen Koordinatenraum existieren. Alle instanziierbaren Geometrieklassen sind so definiert, dass gültige Instanzen einer Geometrieklasse topologisch abgeschlossen sind (d. h. alle definierten Geometrien beinhalten ihre Begrenzung).

                    Die Basisklasse Geometry hat Unterklassen für Point , Curve , Surface und GeometryCollection .

                    Curve steht für 1-dimensionale Objekte und hat die Unterklasse LineString mit den Unterklassen Line und LinearRing .

                    Surface ist für zweidimensionale Objekte konzipiert und hat die Unterklasse Polygon .

                    GeometryCollection verfügt über spezialisierte 0-, 1- und zweidimensionale Sammlungsklassen namens MultiPoint , MultiLineString und MultiPolygon zum Modellieren von Geometrien, die Sammlungen von Points , LineStrings bzw. Polygons entsprechen. MultiCurve und MultiSurface werden als abstrakte Oberklassen eingeführt, die die Sammlungsschnittstellen verallgemeinern, um Kurven und Flächen zu behandeln.

                    Geometry , Curve , Surface , MultiCurve und MultiSurface sind als nicht instanziierbare Klassen definiert, es ist nicht möglich, ein Objekt dieser Klassen zu erstellen. Sie definieren einen gemeinsamen Methodensatz für seine Unterklassen und sind aus Gründen der Erweiterbarkeit enthalten.

                    Point, LineString, Polygon, GeometryCollection, MultiPoint, MultiLineString, MultiPolygon sind instanziierbare Klassen (im Hierarchiebaum fett markiert).

                    Geometrie ist die Wurzelklasse der Hierarchie. Jede Geometrie wird durch eine Reihe ihrer Eigenschaften beschrieben. Bestimmte Unterklassen der Wurzelklasse Geometrie haben ihre eigenen spezifischen Eigenschaften. Eigenschaften, die allen Geometrieunterklassen gemeinsam sind, werden in der folgenden Liste beschrieben. Geometrie ist eine nicht instanziierbare Klasse.

                    • Der Typ, zu dem eine Geometrie gehört. Jede Geometrie gehört zu einer der instanziierbaren Klassen in der Hierarchie.
                    • Seine SRID , der Bezeichner des einer Geometrie zugeordneten räumlichen Bezugssystems, der den Koordinatenraum beschreibt, in dem das Geometrieobjekt definiert ist.
                    • Die Koordinaten der Geometrie in ihrem räumlichen Bezugssystem, dargestellt als Zahlen mit doppelter Genauigkeit (8 Byte). Alle nicht leeren Geometrien enthalten mindestens ein Paar von (X,Y)-Koordinaten. Leere Geometrien enthalten keine Koordinaten.
                    • Sein Inneres, seine Grenze und sein Äußeres. Alle Geometrien nehmen irgendeine Position im Raum ein. Das Äußere einer Geometrie ist der gesamte Raum, der nicht von der Geometrie eingenommen wird. Das Innere ist der Raum, den die Geometrie einnimmt. Die Grenze ist die Schnittstelle zwischen dem Inneren und Äußeren der Geometrie.
                    • Sein MBR oder Envelope, das minimale Begrenzungsrechteck der Geometrie. Dies ist die Begrenzungsgeometrie, gebildet aus den minimalen und maximalen (X,Y)-Koordinaten:
                    • Die Qualität, einfach oder nicht einfach zu sein. Geometriewerte einiger Typen (LineString, MultyPoint, MultiLineString) sind entweder einfach oder nicht einfach. Jeder Typ bestimmt seine eigenen Behauptungen, ob er einfach oder nicht einfach ist.
                    • Die Qualität des Geschlossenseins oder Nicht-Geschlossenseins. Geometriewerte einiger Typen (LineString, MultiString) sind entweder geschlossen oder nicht geschlossen. Jeder Typ bestimmt seine eigenen Zusicherungen, ob sie geschlossen oder nicht geschlossen sind.
                    • Die Eigenschaft, leer oder nicht leer zu sein Eine Geometrie ist leer, wenn sie keine Punkte hat. Äußeres, Inneres und Begrenzung einer leeren Geometrie sind nicht definiert, d. h. sie werden durch einen NULL-Wert dargestellt. Eine leere Geometrie wird als immer einfach definiert. Eine leere Geometrie hat eine Fläche von 0.
                    • Ihre Dimension Eine Geometrie kann eine Dimension von -1, 0, 1 oder 2 haben.
                      • -1 steht für leere Geometrien.
                      • 0 steht für Geometrien ohne Länge und ohne Fläche.
                      • 1 steht für Geometrien mit einer Länge ungleich Null und einer Fläche von Null.
                      • 2 steht für Geometrien mit Nicht-Null-Bereich.

                      Ein Punkt ist eine Geometrie, die eine einzelne Position im Koordinatenraum darstellt.

                      9.2.5 Punktebeispiele

                      • Stellen Sie sich eine großformatige Weltkarte mit vielen Städten vor. Ein Punkt könnte jede Stadt darstellen.
                      • Auf einem Stadtplan könnte ein Punkt eine Bushaltestelle darstellen.

                      9.2.6 Punkteigenschaften

                      • X-Koordinatenwert.
                      • Y-Koordinatenwert.
                      • Die Grenze eines Punktes ist eine leere Menge.
                      • Ein Punkt ist als nulldimensionale Geometrie definiert.

                      Eine Kurve ist eine eindimensionale Geometrie, die normalerweise durch eine Folge von Punkten dargestellt wird. Bestimmte Unterklassen von Curve spezifizieren die Form der Interpolation zwischen Punkten. Curve ist eine nicht instanziierbare Klasse.

                      9.2.8 Kurveneigenschaften

                      • Koordinaten seiner Punkte.
                      • Kurve ist als eindimensionale Geometrie definiert.
                      • Eine Kurve ist einfach, wenn sie nicht zweimal durch denselben Punkt verläuft.
                      • Eine Kurve ist geschlossen, wenn ihr Startpunkt gleich ihrem Endpunkt ist.
                      • Der Rand einer geschlossenen Kurve ist leer.
                      • Die Begrenzung einer nicht geschlossenen Kurve besteht aus ihren beiden Endpunkten.
                      • Eine einfache und geschlossene Kurve ist Ring.

                      Ein LineString ist eine Kurve mit linearer Interpolation zwischen Punkten.

                      9.2.10 LineString-Beispiele

                      • Auf einer Weltkarte könnten LineStrings Flüsse darstellen.
                      • In einem Stadtplan könnte ein LineStrings Straßen darstellen.

                      9.2.11 LineString-Eigenschaften

                      • Koordinaten von LineString-Segmenten, definiert durch jedes aufeinanderfolgende Punktpaar.
                      • Ein LineString ist eine Line, wenn er aus genau zwei Punkten besteht.
                      • Ein LineString ist ein LinearRing, sowohl geschlossen als auch einfach.

                      Eine Oberfläche ist ein zweidimensionales geometrisches Objekt.

                      9.2.13 Oberflächeneigenschaften

                      • Eine Fläche ist als zweidimensionale Geometrie definiert.
                      • Die OpenGIS-Spezifikation definiert eine einfache Oberfläche als bestehend aus einem einzelnen 'Patch', der mit einer 'äußeren Grenze' und null oder mehr 'inneren' Grenzen verbunden ist.
                      • Die Grenze einer einfachen Fläche ist der Satz geschlossener Kurven, die ihren äußeren und inneren Grenzen entsprechen.

                      Die einzige instanziierbare Unterklasse von Surface, die in der OpenGIS-Spezifikation definiert ist, ist Polygon.

                      Ein Polygon ist eine ebene Fläche, die eine mehrseitige Geometrie darstellt, die durch eine äußere Begrenzung und null oder mehr innere Begrenzungen definiert wird. Jede innere Begrenzung definiert ein Loch im Polygon.

                      9.2.15 Polygon-Beispiele

                      1. Die Begrenzung eines Polygons besteht aus einer Reihe von LinearRings (d. h. Linienfolgen, die sowohl einfach als auch geschlossen sind), die seine äußeren und inneren Begrenzungen bilden.
                      2. Keine zwei Ringe in der Grenze kreuzen sich, die Ringe in der Grenze eines Polygons dürfen sich in einem Punkt schneiden, aber nur als Tangente.
                      3. Ein Polygon darf keine Schnittlinien, Spitzen oder Einstiche aufweisen.
                      4. Das Innere jedes Polygons ist eine verbundene Punktmenge.
                      5. Das Äußere eines Polygons mit einem oder mehreren Löchern ist nicht verbunden. Jedes Loch definiert eine verbundene Komponente des Äußeren.

                      In den obigen Behauptungen sind Polygone einfache Geometrien.

                      Eine GeometryCollection ist eine Geometrie, die eine Sammlung von einer oder mehreren Geometrien einer beliebigen Klasse ist.

                      Alle Elemente in einer GeometryCollection müssen sich im selben Raumbezug befinden (d. h. im selben Koordinatensystem). GeometryCollection legt seinen Elementen keine weiteren Einschränkungen auf.

                      • Elementtypen
                      • Abmessungen.
                      • Andere Einschränkungen bezüglich des Grads der räumlichen Überlappung zwischen Elementen.

                      Ein MultiPoint ist eine Sammlung, deren Elemente auf Points beschränkt sind. Die Punkte sind in keiner Weise verbunden oder geordnet.

                      9.2.18 MultiPoint-Beispiele

                      9.2.19 MultiPoint-Eigenschaften

                      • MultiPoint ist als nulldimensionale Geometrie definiert.
                      • Ein MultiPoint ist einfach, wenn keine zwei Punkte im MultiPoint gleich sind (identische Koordinatenwerte haben).
                      • Die Grenze eines MultiPoints ist eine leere Menge.

                      Eine MultiCurve ist eine Geometriesammlung, deren Elemente Curves sind. MultiCurve ist eine nicht instanziierbare Klasse.

                      9.2.21 MultiCurve-Eigenschaften

                      • Eine MultiCurve ist genau dann einfach, wenn alle ihre Elemente einfach sind. Die einzigen Schnittpunkte zwischen zwei beliebigen Elementen treten an Punkten auf, die auf den Grenzen beider Elemente liegen.
                      • Die Grenze einer MultiCurve wird durch Anwendung der "mod 2 union rule" ermittelt: Ein Punkt liegt in der Grenze einer MultiCurve, wenn er in den Grenzen einer ungeraden Anzahl von Elementen der MultiCurve liegt.
                      • Eine MultiCurve ist als eindimensionale Geometrie definiert.
                      • Eine MultiCurve ist geschlossen, wenn alle ihre Elemente geschlossen sind.
                      • Die Begrenzung einer geschlossenen MultiCurve ist immer leer.

                      Ein MultiLineString ist eine MultiCurve, deren Elemente LineStrings sind.

                      9.2.23 MultiLineString-Beispiele

                      Eine MultiSurface ist eine geometrische Sammlung, deren Elemente Oberflächen sind. MultiSurface ist eine nicht instanziierbare Klasse.

                      9.2.25 MultiSurface-Assertionen

                      1. Die Innenräume von zwei beliebigen Oberflächen in einer MultiSurface dürfen sich nicht überschneiden.
                      2. Die Grenzen von zwei beliebigen Elementen in einem MultiSurface dürfen sich höchstens an einer endlichen Anzahl von Punkten schneiden.

                      Die einzige instanziierbare Unterklasse von MultiSurface ist MultiPolygon.

                      Ein MultiPolygon ist ein MultiSurface, dessen Elemente Polygone sind.

                      9.2.27 MultiPolygon-Beispiele

                      9.2.28 Die Aussagen für MultiPolygons sind:

                      1. Die Innenräume zweier Polygone, die Elemente eines MultiPolygons sind, dürfen sich nicht überschneiden.
                      2. Die Grenzen von zwei beliebigen Polygonen, die Elemente eines MultiPolygons sind, dürfen sich nicht kreuzen und dürfen sich nur an einer endlichen Anzahl von Punkten berühren. (Beachten Sie, dass das Überqueren bereits durch die erste Behauptung verboten ist.)
                      3. Ein MultiPolygon darf keine Schnittlinien, Spitzen oder Einstiche aufweisen. Ein MultiPolygon ist ein regulärer, geschlossener Punktsatz.
                      4. Das Innere eines MultiPolygons mit mehr als einem Polygon ist nicht verbunden, die Anzahl der verbundenen Komponenten des Inneren eines MultiPolygons ist gleich der Anzahl der Polygone im MultiPolygon.

                      9.2.29 MultiPolygon-Eigenschaften

                      • MultiPolygon ist als zweidimensionale Geometrie definiert.
                      • Die Begrenzung eines MultiPolygons ist ein Satz geschlossener Kurven (LineStrings), die den Begrenzungen seines Elements Polygons entsprechen.
                      • Jede Curve in der Begrenzung des MultiPolygon befindet sich in der Begrenzung von genau einem Element Polygon, und jede Kurve in der Begrenzung eines Elements Polygon liegt in der Begrenzung des MultiPolygon.

                      In diesem Abschnitt werden die standardmäßigen räumlichen Datenformate beschrieben, die zum Speichern von Geometrieobjekten verwendet werden.

                      Die Well-Known Text (WKT)-Darstellung von Geometrie dient zum Austausch von Geometriedaten in ASCII-Form.

                      Beispiele für WKT-Darstellungen von Geometrieobjekten sind:

                      PUNKT(10 10) Ein Punkt. LINESTRING(10 10, 20 20, 30 40) Ein LineString mit drei Punkten. POLYGON((10 10, 10 20, 20 20, 20 15, 10 10)) Ein Polygon mit einem äußeren Ring und null inneren Ringen. MULTIPOINT(10 10, 20 20) Ein MultiPoint mit zwei Punkten. MULTILINESTRING((10 10, 20 20), (15 15, 30 15)) Ein MultiLineString mit zwei LineStrings. MULTIPOLYGON((((10 10, 10 20, 20 20, 20 15, 10 10)), ((60 60, 70 7, 80 60, 60 60 ))) Ein MultiPolygon mit zwei Polygonen. GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20)) Eine GeometryCollection bestehend aus zwei Punkten und einem LineString.

                      Die Textdarstellung der implementierten instanziierbaren geometrischen Typen entspricht dieser Grammatik:

                      • Die Notation <>* bezeichnet null oder mehr Wiederholungen der Token innerhalb der geschweiften Klammern
                      • Die geschweiften Klammern erscheinen nicht in der Ausgabetokenliste.

                      Well-Known Binary (WKB)-Darstellung wird durch die OpenGIS-Spezifikationen definiert. Es ist auch im ISO-Standard "SQL/MM Teil 3: Spatial" definiert.

                      WKB wird verwendet, um Geometriedaten als binäre Ströme, die durch BLOB-Werte dargestellt werden, die geometrische Informationen enthalten, gemäß den unten beschriebenen Strukturen auszutauschen.

                      WKB verwendet die folgenden grundlegenden Typdefinitionen:

                      Ein WKB, das POINT(1,1) entspricht, sieht wie folgt aus: 21 Bytes:

                      MySQL stellt eine Hierarchie von Datentypen bereit, die dem OpenGIS-Geometriemodell entspricht.

                      • GEOMETRIE
                      • PUNKT
                      • LINIENSTRING
                      • POLYGON
                      • MEHRPUNKT
                      • MULTILINESTRING
                      • MULTIPOLYGON
                      • GEOMETRIEKOLLEKTION

                      Der Typ GEOMETRY kann Geometrien jeglichen Typs speichern, andere Typen beschränken ihre Werte auf einen bestimmten Geometrietyp. GEOMETRYCOLLECTION kann eine Sammlung von Objekten jeglichen Typs speichern, andere Sammlungstypen beschränken den Typ der Sammlungsmitglieder auf einen bestimmten Geometrietyp.

                      MySQL bietet eine Reihe von Funktionen, die eine Well-Known-Text-Darstellung und optional einen Bezeichner des räumlichen Bezugssystems als Eingabeparameter verwenden und die entsprechende Geometrie zurückgeben.

                      GeomFromText() akzeptiert eine WKT eines beliebigen Geometrietyps als erstes Argument.

                      Für die Konstruktion von auf einen bestimmten Typ beschränkten Geometriewerten stellt eine Implementierung auch eine typspezifische Konstruktionsfunktion für jeden Geometrietyp bereit.

                      Als optionale Funktion kann eine Implementierung auch das Erstellen von Polygon- oder MultiPolygon-Werten unterstützen, wenn eine beliebige Sammlung von sich möglicherweise überschneidenden Ringen oder geschlossenen LineString-Werten vorhanden ist. Implementierungen, die diese Funktion unterstützen, sollten die folgenden Funktionen enthalten (Notiz: MySQL implementiert diese noch nicht):

                      BdPolyFromText(multiLineStringTaggedText String, SRID Integer):Polygon Konstruiert ein Polygon mit einer beliebigen Sammlung geschlossener Linienfolgen als MultiLineString-Textdarstellung. BdMPolyFromText(multiLineStringTaggedText String, SRID Integer):MultiPolygon Konstruiert ein MultiPolygon mit einer beliebigen Sammlung geschlossener Linestrings als MultiLineString-Textdarstellung.

                      MySQL bietet eine Reihe von Funktionen, die ein BLOB mit einer Well-Known-Binary-Darstellung und optional einen Spatial Reference System Identifier (SRID) als Eingabeparameter verwenden und die entsprechende Geometrie zurückgeben.

                      GeomFromWKB kann eine WKB eines beliebigen Geometrietyps als erstes Argument akzeptieren. Für die Konstruktion von Geometriewerten, die auf einen bestimmten Typ beschränkt sind, stellt eine Implementierung auch eine spezifische Konstruktionsfunktion für jeden Geometrietyp bereit, wie in der obigen Liste beschrieben.

                      Als optionale Funktion kann eine Implementierung auch das Erstellen von Polygon- oder MultiPolygon-Werten unterstützen, wenn eine beliebige Sammlung sich möglicherweise schneidender Ringe oder geschlossener LineString-Werte gegeben ist. Implementierungen, die diese Funktion unterstützen, sollten die folgenden Funktionen enthalten (Notiz: MySQL implementiert diese noch nicht):

                      BdPolyFromWKB(WKBMultiLineString Binary,SRID Integer): Polygon Konstruiert ein Polygon mit einer beliebigen Sammlung geschlossener Linienfolgen als MultiLineString-Binärdarstellung. BdMPolyFromWKB(WKBMultiLineString Binary, SRID Integer):MultiPolygon Konstruiert ein MultiPolygon anhand einer beliebigen Sammlung geschlossener Linienfolgen als MultiLineString-Binärdarstellung.

                      Notiz: Die in diesem Abschnitt aufgeführten Funktionen sind in der aktuellen Version noch nicht implementiert.

                      MySQL bietet eine Reihe nützlicher Funktionen zum Erstellen von Geometrie-WKB-Darstellungen. Die in diesem Abschnitt beschriebenen Funktionen sind MySQL-Erweiterungen der OpenGIS-Spezifikationen. Die Ergebnisse dieser Funktionen sind BLOBs, die Geometrie-WKB-Darstellungen enthalten. Die Ergebnisse dieser Funktionen können als erstes Argument für die GeomFromWKB()-Funktionsfamilie ersetzt werden.

                      Point(x,y) Konstruiert einen WKBPoint anhand seiner Koordinaten. MultiPoint(WKBPoint,WKBPoint. WKBPoint) Erstellt einen WKBMultiPoint mit WKBPoints. Wenn ein Argument nicht WKBPoint ist, ist der Rückgabewert NULL. LineString(WKBPoint,WKBPoint. WKBPoint) Konstruiert einen WKBLineString aus mehreren WKBPoints. Wenn ein Argument nicht WKBPoint ist, ist der Rückgabewert NULL. Wenn die Anzahl der WKBPoints weniger als zwei beträgt, ist der Rückgabewert NULL. MultiLineString(WKBLineString,WKBLineString. WKBLineString) Erstellt einen WKBMultiLineString mithilfe von WKBLineStrings. Wenn ein Argument nicht WKBLineString ist, ist der Rückgabewert NULL. Polygon(WKBLineString,WKBLineString. WKBLineString) Konstruiert ein Polygon aus mehreren WKBLineStrings. Wenn ein Argument keine WKB eines LinearRings darstellt (d. h. kein geschlossener und einfacher LineString), ist der Rückgabewert NULL. MultiPolygon(WKBPolygon,WKBPolygon. WKBPolygon) Konstruiert ein WKBMultiPolygon aus einer Menge von WKBPolygons. Wenn ein Argument kein WKBPolygon ist, ist der Wiederholungswert NULL. GeometryCollection(WKBGeometry,WKBGeometry. WKBGeometry) Erstellt eine GeometryCollection. Wenn ein Argument keine wohlgeformte WKB-Darstellung einer Geometrie ist, ist der Rückgabewert NULL.

                      MySQL bietet eine Standardmethode zum Erstellen von räumlichen Spalten für Geometrietypen.

                      CREATE TABLE Verwenden Sie die Anweisung CREATE TABLE, um eine Tabelle mit einer räumlichen Spalte zu erstellen: ALTER TABLE Verwenden Sie die Anweisung ALTER TABLE, um einer vorhandenen Tabelle eine räumliche Spalte hinzuzufügen:

                      Nachdem Sie räumliche Spalten erstellt haben, können Sie diese mit Ihren räumlichen Daten füllen.

                      Um räumlich aktivierte Spalten zu füllen, unterstützt MySQL zwei räumliche Formate (vorher beschrieben), Well Known Text (WKT) und Well-Known Binary (WKB).

                      Beachten Sie, dass ein Client-Anwendungsprogramm, das die WKB-Darstellung von Geometriewerten verwenden möchte, dafür verantwortlich ist, korrekt gebildete WKB in Abfragen an den Server zu senden.

                      Einfügen von Point(1,1) mit binärer Literal-Syntax: Eine ODBC-Anwendung kann eine WKB-Darstellung senden und sie als Argument vom Typ BLOB binden: Inserting Point(1,1) mit dem Ergebnis von mysql_escape_string() in libmysqlclient-Anwendungen.

                      Geometriewerte, die zuvor in einer Tabelle gespeichert wurden, können entweder in WKT- oder WKB-Darstellung abgerufen werden.

                      Die Funktion AsText() bietet textuellen Zugriff auf Geometriewerte, indem sie diese in einen WKT-String konvertiert.

                      Die Funktionen AsBinary() und AsWKB() bieten binären Zugriff auf Geometriewerte, indem sie in ein BLOB umgewandelt werden, das WKB enthält.

                      AsBinary() und AsWKB() geben ein BLOB mit einer Geometrie in seiner WKB-Darstellung zurück.

                      • Jedes interaktive SQL-Programm wie mysql oder MySQLCC .
                      • Anwendungsprogramme in allen Sprachen, die eine MySQL-Client-API unterstützen.
                      • Funktionen, die Geometrien zwischen verschiedenen Formaten konvertieren.
                      • Funktionen, die qualitative oder quantitative Eigenschaften einer Geometrie beschreiben.
                      • Funktionen, die Beziehungen zwischen zwei Geometrien beschreiben.
                      • Funktionen, die aus bestehenden Geometrien neue Geometrien erstellen.

                      Wie besprochen (siehe Abschnitt 9.4.1 Räumliche MySQL-Datentypen, siehe Abschnitt 9.4.4 Auffüllen von räumlichen Spalten), versteht MySQL Well-Known Text (WKT) und Well-Known Binary (WKB) Geometriedarstellungen durch die Unterstützung dieser Funktionen:

                      GeomFromWKT(string wkt [,integer srid]): Geometrie Konvertiert die WKT-Darstellung in das interne Geometrieformat. Außerdem werden eine Reihe typspezifischer Funktionen unterstützt. GeomFromWKB(binary wkb [,integer srid]): Geometrie Konvertiert die WKB-Darstellung in das interne Geometrieformat Eine Reihe typspezifischer Funktionen werden ebenfalls unterstützt. AsWKT(geometry g): string Konvertiert das interne Geometrieformat in eine WKT-Darstellung. AsWKB(geometry g): binär Konvertiert das interne Geometrieformat in eine WKB-Darstellung.

                      Funktionen, die zu dieser Gruppe gehören, nehmen einen Geometriewert als Argument und geben eine quantitative oder qualitative Eigenschaft dieser Geometrie zurück. Einige Funktionen schränken ihren Argumenttyp ein.

                      Diese Funktionen schränken ihre Argumente nicht ein und akzeptieren Geometrien jeglichen Typs.

                      GeometryType(geometry g):string Gibt als String den Namen des Geometrie-Untertyps zurück, zu dem diese Geometrieinstanz gehört. Dimension(geometry g):integer Die inhärente Dimension dieses Geometry-Objekts, die -1, 0, 1 oder 2 sein kann. SRID(geometry g):integer Gibt die räumliche Referenzsystem-ID für diese Geometrie zurück. Envelope(geometry g):geometry Das als Polygon zurückgegebene Minimum Bounding Rectangle (MBR) für diese Geometrie. Das Polygon wird durch die Eckpunkte der Bounding Box definiert:

                      Notiz: MySQL implementiert die folgenden Funktionen noch nicht:

                      Boundary(g:Geometry):Geometry Gibt den Abschluss der kombinatorischen Grenze dieser Geometrie zurück. IsEmpty(geometry g):Integer Gibt 1 (TRUE) zurück, wenn diese Geometrie die leere Geometrie ist. Wenn wahr, dann repräsentiert diese Geometrie die leere Punktmenge. IsSimple(geometry g):Integer Gibt 1 (TRUE) zurück, wenn diese Geometrie keine anomalen geometrischen Punkte wie Selbstschnittpunkt oder Selbsttangential aufweist. Die Beschreibung jeder instanziierbaren geometrischen Klasse enthält die spezifischen Bedingungen, die bewirken, dass eine Instanz dieser Klasse als nicht einfach klassifiziert wird.

                      Notiz: MySQL implementiert die folgenden Funktionen noch nicht:

                      IsRing(LineString l):Integer Gibt 1 (TRUE) zurück, wenn dieser LineString geschlossen ist (StartPoint ( ) = EndPoint ( )) und dieser LineString einfach ist (durch denselben Punkt nicht mehr als einmal hindurchgeht). IsClosed(LineString l):Integer Gibt 1 (TRUE) zurück, wenn dieser LineString geschlossen ist (StartPoint() == EndPoint()).

                      Notiz: MySQL implementiert die folgenden Funktionen noch nicht:

                      Centroid(Polygon p):Point Der mathematische Schwerpunkt für dieses Polygon als Punkt. Es wird nicht garantiert, dass das Ergebnis auf diesem Polygon angezeigt wird. PointOnSurface(p:Polygon):Point Ein Punkt, der sich garantiert auf diesem Polygon befindet.

                      Notiz: MySQL implementiert die folgenden Funktionen noch nicht:

                      Centroid(MultyPolygon p):Point Der mathematische Schwerpunkt für dieses MultiPolygon als Punkt.Es kann nicht garantiert werden, dass das Ergebnis auf diesem MultiPolygon angezeigt wird. PointOnSurface(MultiPolygon m):Punkt Ein Punkt befindet sich garantiert auf diesem MultiPolygon.

                      Notiz: Funktionen für einen bestimmten Geometrietyp geben NULL zurück, wenn die übergebene Geometrie vom falschen Geometrietyp ist. Area() gibt beispielsweise NULL zurück, wenn der Objekttyp weder Polygon noch MultiPolygon ist.

                      Im Abschnitt (siehe Abschnitt 9.5.2 Funktionen zum Analysieren von Geometrieeigenschaften) haben wir bereits einige Funktionen besprochen, die neue Geometrien aus den bestehenden konstruieren können:

                      • Hüllkurve (Geometrie g): Geometrie
                      • StartPoint(LineString l):Punkt
                      • EndPoint(LineString l):Punkt
                      • PointN(LineString l,integer n):Punkt
                      • ExteriorRing(Polygon p):LineString
                      • InteriorRingN(Polygon p, Integer N):LineString
                      • GeometrieN(GeometryCollection g,integer N):Geometry

                      OpenGIS bietet eine Reihe weiterer Funktionen, die Geometrien erzeugen können. Sie wurden entwickelt, um räumliche Operatoren zu implementieren.

                      Notiz: Diese Funktionen sind noch nicht implementiert. Sie sollten in den zukünftigen Versionen erscheinen.

                      Intersection(Geometry g1,g2):Geometry Eine Geometrie, die den Punktmengen-Schnittpunkt von g1 mit g2 darstellt. Union(Geometry g1,g2):Geometry Eine Geometrie, die die Punktmengenvereinigung von g1 mit g2 darstellt. Difference(Geometry g1,g2):Geometry Eine Geometrie, die die Punktmengendifferenz von g1 zu g2 darstellt. SymDifference(Geometry g1,g2):Geometry Eine Geometrie, die die symmetrische Punktmengendifferenz von g1 zu g2 darstellt. Buffer(Geometry g, double d):Geometry Eine Geometrie, die alle Punkte repräsentiert, deren Abstand von g kleiner oder gleich dem Abstand von d ist. ConvexHull(Geometry g):Geometry Eine Geometrie, die die konvexe Hülle von g darstellt.

                      Die in diesen Abschnitten beschriebenen Funktionen verwenden zwei Geometrien als Eingabeparameter und geben eine qualitative oder quantitative Beziehung zwischen ihnen zurück.

                      Die aktuelle Version bietet einige Funktionen, mit denen Beziehungen zwischen minimalen Begrenzungsrechtecke zweier Geometrien getestet werden können. Sie beinhalten:

                      MBRContains(geom1,geom2) Gibt 1 zurück, wenn das minimale Begrenzungsrechteck von geom1 das minimale Begrenzungsrechteck von geom2 enthält. Andernfalls wird 0 zurückgegeben. MBRWithin(geom1,geom2) Gibt 1 zurück, wenn das minimale Begrenzungsrechteck von geom1 innerhalb des minimalen Begrenzungsrechtecks ​​von geom2 liegt. Andernfalls wird 0 zurückgegeben. MBRDisjoint(geom1,geom2) Gibt 1 zurück, wenn sich die minimalen Begrenzungsrechte der beiden Geometrien nicht schneiden. Andernfalls wird 0 zurückgegeben. MBREqual(geom1,geom2) Gibt 1 zurück, wenn die minimalen Begrenzungsrechte der beiden Geometrien gleich sind. Andernfalls wird 0 zurückgegeben. MBRIntersects(geom1,geom2) Gibt 1 zurück, wenn sich die minimalen Begrenzungsrechte der beiden Geometrien schneiden. Andernfalls wird 0 zurückgegeben. MBROverlaps(geom1,geom2) Gibt 1 zurück, wenn sich die minimalen Begrenzungsrechte der beiden Geometrien überlappen. Andernfalls wird 0 zurückgegeben. MBRTouches(geom1,geom2) Gibt 1 zurück, wenn sich die minimalen Begrenzungsrechte der beiden Geometrien überlappen. Andernfalls wird 0 zurückgegeben.

                      Notiz: Die in der folgenden Liste aufgeführten Funktionen sind noch nicht implementiert. Diese Funktionen bieten volle (nicht nur MBR-basierte) Unterstützung für räumliche Analysen.

                      Enthält(geom1,geom2) Gibt 1 zurück, wenn geom1 vollständig geom2 enthält, andernfalls wird 0 zurückgegeben. Crosses(geom1,geom2) Gibt 1 zurück, wenn geom1 geom2 räumlich kreuzt. Wenn geom1 ein Polygon oder ein Multipolygon ist, wird NULL zurückgegeben. Wenn geom2 ein Punkt oder ein Multipunkt ist, wird NULL zurückgegeben. Andernfalls wird 0 zurückgegeben. Der Begriff räumlich kreuzt bezeichnet eine räumliche Beziehung, wenn sich zwei gegebene Geometrien schneiden und ihr Schnitt zu einer Geometrie führt, deren Dimension um eins kleiner als die maximale Dimension der beiden gegebenen Geometrien ist und die Schnittmenge keiner der beiden gleich ist gegebene Geometrien. Disjoint(geom1,geom2) Gibt 1 zurück, wenn geom1 von geom2 räumlich disjunkt ist, d.h. wenn sich die gegebenen Geometrien nicht schneiden. Andernfalls wird 0 zurückgegeben. Equal(geom1,geom2) Gibt 1 zurück, wenn geom1 räumlich gleich geom2 ist, andernfalls wird 0 zurückgegeben. Intersects(geom1,geom2) Gibt 1 zurück, wenn geom1 geom2 räumlich schneidet, andernfalls wird 0 zurückgegeben. Overlaps(geom1,geom2) Gibt 1 zurück, wenn geom1 geom2 räumlich überlappt, andernfalls wird 0 zurückgegeben. Der Begriff räumliche Überlappung wird verwendet, wenn sich zwei Geometrien schneiden und ihr Schnitt zu einer Geometrie derselben Dimension führt, die jedoch keiner der gegebenen Geometrien entspricht. Touches(geom1,geom2) Gibt 1 zurück, wenn geom1 geom2 räumlich berührt, andernfalls wird 0 zurückgegeben. Zwei Geometrien berühren sich räumlich, wenn sich das Innere beider Geometrien nicht schneidet, aber die Grenze einer der Geometrien entweder die Grenze oder das Innere der Geometrien schneidet. Within(geom1,geom2) Gibt 1 zurück, wenn geom1 räumlich innerhalb von geom2 liegt, andernfalls wird 0 zurückgegeben. Distance(geom1:Geometry,geom2:Geometry):Double Der kürzeste Abstand zwischen zwei beliebigen Punkten in den beiden Geometrien.

                      Es ist bekannt, dass Suchoperationen in üblichen Datenbanken mit Hilfe von Indizes optimiert werden können. Dies gilt nach wie vor für räumliche Datenbanken. Mit Hilfe einer Vielzahl von mehrdimensionalen Indexierungsmethoden, die bereits weltweit entwickelt wurden, ist es möglich, räumliche Suchen zu optimieren, von denen die typischsten sind:

                      • Eine Punktabfrage. Suche nach allen Objekten, die einen bestimmten Punkt enthalten.
                      • Eine Regionsabfrage. Suche nach allen Objekten, die einen bestimmten Bereich überlappen.

                      MySQL verwendet R-Trees mit quadratischer Aufteilung, um räumliche Spalten zu indizieren. Ein räumlicher Index wird unter Verwendung des MBR einer Geometrie erstellt. Bei den meisten Geometrien ist der MBR ein minimales Rechteck, das die Geometrien umgibt. Für einen horizontalen oder vertikalen Linienzug sowie für einen Punkt ist der MBR ein degeneriertes Rechteck, in den Linienzug bzw. den Punkt.

                      MySQL kann räumliche Indizes auf die gleiche Weise erstellen wie reguläre Indizes. Die normale Syntax zum Erstellen von Indizes wird um das Schlüsselwort SPATIAL erweitert:

                      Mit CREATE TABLE : Mit CREATE INDEX : Mit ALTER TABLE :

                      Nehmen wir an, wir haben eine Datenbank mit mehr als 32000 Geometrien. Geometrien werden im Feld g vom Typ GEOMETRY gespeichert. Die Tabelle hat auch ein Feld fid , das Objekt-IDs mit dem Attribut AUTO_INCREMENT speichert.

                      Der Optimierer untersucht, ob verfügbare räumliche Indizes in die Suche einbezogen werden können, wenn eine Abfrage mit einer Funktion wie MBRContains() oder MBRWithin() in der WHERE-Klausel ausgeführt wird.

                      Angenommen, wir möchten alle Objekte finden, die sich in dem angegebenen Rechteck befinden:

                      Lassen Sie uns nun mit EXPLAIN überprüfen, wie diese Abfrage ausgeführt wird:

                      Sehen wir uns nun an, was passieren würde, wenn wir keinen räumlichen Index hätten:

                      Lassen Sie uns die obige Abfrage ausführen und den räumlichen Schlüssel ignorieren, den wir haben:

                      Die Ausführungszeit für diese Abfrage steigt von 0,00 Sekunden auf 0,46 Sekunden, wenn der Index nicht verwendet wird.

                      In zukünftigen Releases werden räumliche Indizes auch zur Optimierung anderer Funktionen verwendet. Siehe Abschnitt 9.5.4 Funktionen zum Testen räumlicher Beziehungen zwischen geometrischen Objekten.


                      2 Antworten 2

                      Ich habe das Shapefile überprüft, das Sie in die Dropbox hochgeladen haben. Es stellt sich heraus, dass das Shapefile nicht richtig gelesen wird.

                      wenn ich die Aufzeichnungen für die ausdrucke MAR_locations_v2.shp, das bekomme ich

                      Datensatz(MULTIPOLYGON ((((386523.5418971451 6432084.711430285, 386523.5418971451 6432184.711430287, 386573.541897146 6432184.711430287, 386573.541897146 6432084.711430285, 386523.5418971451 643208'>,')

                      Datensatz(MULTIPOLYGON ((((386405.7078714892 6438043.356735789, 386405.7078714892 6438143.356735789, 386505.7078714911 6438143.356735789, 386505.7078714911 6438043.356735789, 386405.7078714892 6438043.356735789))''''Name

                      und wenn ich die aufzeichnungen für die drucke AdditionalPumping_south_v2_test.shp, Ich bekomme

                      Dies ist keine vollständige Antwort auf die Frage, aber es beantwortet den Teil, warum Sie die Handlung nicht erhalten. Möglicherweise möchten Sie Ihr Shapefile anders speichern, damit es geplottet werden kann.


                      Bedingte Funktionen

                      Bewertet ausdruck: gibt den ersten Wert aus dem . zurück Werte Liste, deren entsprechende Übereinstimmung aus dem Streichhölzer Liste ist gleich ausdruck kehrt zurück value_if_no_match Wenn ausdruck ist keinem der Übereinstimmungen in der gleich Streichhölzer aufführen

                      EIN Null kann weder für eine Übereinstimmung noch für einen Wert verwendet werden, aber value_if_no_match kann null sein.

                      ParameterBeschreibung
                      ausdruckein beliebiger Ausdruck, der mit der Liste von abgeglichen werden soll Streichhölzer
                      Streichhölzereine durch Kommas getrennte Liste von zu vergleichenden Konstanten ausdruck gegen muss vom gleichen Datentyp sein wie ausdruck und haben die gleiche Anzahl von Listenelementen wie die Werte aufführen
                      Werteeine durch Kommas getrennte Liste von Konstanten, von denen eine zurückgegeben wird, falls ausdruck stimmt mit einem Element in der überein Streichhölzer list muss vom gleichen Datentyp sein wie value_if_no_match und haben die gleiche Anzahl von Listenelementen wie die Streichhölzer aufführen
                      value_if_no matchJeder Wert, der im Falle einer Übereinstimmung zurückgegeben werden soll, muss denselben Datentyp haben wie die Listenelemente in Werte

                      Bewertet ausdruck: Wenn Stimmt, kehrt zurück value_if_true ansonsten, wenn falsch oder Null, kehrt zurück value_if_false Siehe Kurzschluss für Details zur Fehlerprüfung

                      Wenn eine Integer-Spalte direkt verwendet wird, interpretiert diese Funktion Werte ungleich Null als Stimmt und Nullwerte als falsch.

                      Konvertierungsfunktionen

                      Für die WERFEN() und KONVERTIEREN() Funktionen, gültige Zieltypen sind:

                      • bool
                      • int8
                      • int16
                      • int
                      • lang
                      • schweben
                      • doppelt
                      • Dezimal
                      • Schnur
                      • char1
                      • char2
                      • char4
                      • char8
                      • char16
                      • char32
                      • char64
                      • char128
                      • char256
                      • Zeitstempel
                      • Datum
                      • Zeit
                      • Terminzeit
                      • Geometrie

                      Gibt das Äquivalent von zurück Originalwert umgewandelt in die Zieltyp. Das Stil Parameter ist derzeit nur anwendbar, wenn die Zieltyp ist Schnur und das Originalwert ist von Zeitstempel oder Terminzeit Typ.

                      Zu den gültigen Stilcodes gehören:

                      Konvertiert das angegebene Datum/die angegebene Uhrzeit ausdruck zu einem String, der dem angegebenen entspricht Format. Das Format muss ein Zeichenfolgenliteral sein - Ausdrücke werden derzeit nicht unterstützt. Beliebiger Text kann mit doppelten Anführungszeichen in die Formatzeichenfolge eingefügt werden.

                      Die zurückgegebene Zeichenfolge wird auf 32 Zeichen abgeschnitten.

                      Gültige Formatcodes sind:

                      FormatBeschreibung
                      YYYY4-stelliges Jahr
                      YY2-stelliges Jahr
                      mMonatszahl im Jahr, ohne führende Null [1 - 12]
                      MMZahl des Monats im Jahr, mit führender Null [01 - 12]
                      MO3-stellige Abkürzung des Monats im Titelfall, z. B. Jan
                      MONATVollständiger Name des Monats, z. B. Januar
                      CZahl des Tages im Monat, ohne führende Null [1 - 31]
                      DDZahl des Tages im Monat, mit führender Null [01 - 31]
                      DY3-stellige Abkürzung des Wochentags, z. B. Freitag
                      TAGVollständiger Name des Wochentags, z. B. Freitag
                      hAlias ​​für H12
                      HHAlias ​​für HH12
                      H12Tagesstunde im 12-Stunden-Format, ohne führende Null [0 - 11]
                      HH12Tagesstunde im 12-Stunden-Format mit führender Null [00 - 11]
                      H24Tagesstunde im 24-Stunden-Format, ohne führende Null [0 - 23]
                      HH24Tagesstunde im 24-Stunden-Format, mit führender Null [00 - 23]
                      MIMinute der Stunde [00 - 59]
                      SSSekunde der Minute [00 - 59]
                      BINVor- oder Nachmittags-Bezeichner [BIN, PN]
                      PNAlias ​​für AM

                      Datum/Uhrzeit-Funktionen

                      Dieser Abschnitt umfasst die folgenden Funktionen:

                        , die Teile von Datums-/Uhrzeitausdrücken extrahieren, zwischen Datentypen hin- und herkonvertieren und das aktuelle Datum/die aktuelle Uhrzeit zurückgeben kann, wodurch komplexere Datums-/Typkonvertierungen durchgeführt werden können

                      Funktionen der Datums-/Zeitbasis

                      Ganze Zahl Felder werden als Sekunden seit der Epoche angenommen lang/Zeitstempel Felder werden als Millisekunden seit der Epoche angenommen.

                      Extrahiert den Wochentag aus ausdruck [1 - 7]

                      Gibt das Datum des nächsten Wochentages zurück, das als Tagesname in bereitgestellt wird ausdruck, das nach dem gegebenen auftritt Datum

                      Einige Beispiele, da 2000-10-10 ist ein Dienstag:

                      Extrahiert das Quartal des Jahres aus ausdruck [1 - 4]

                      Berechnet die Differenz zwischen zwei Datums-/Uhrzeitausdrücken und gibt das Ergebnis als ganzzahlige Differenz in den genauer spezifizierten Einheiten zurück, wie viele ganze Datums-/Uhrzeitintervalle vom Typ Einheit muss addiert (oder abgezogen) werden Start gleichziehen Ende bis zur Präzision der Einheit spezifizierten, unter Verwendung der in angegebenen Einheitentypen und Regeln ZEITSTEMPELADD.

                      Zum Beispiel, wenn Einheit war MONAT, nur das Jahr und den Monat von Start und Ende würde in der Berechnung verwendet werden, wenn Einheit war TAG, jederzeit Portion ab Start & Ende würde fallen gelassen werden und so weiter. Das ist anders ZEITSTEMPELDIFF, die die Gesamtheit von beiden berücksichtigt Start & Ende bei der Berechnung.

                      Dies ist symmetrisch mit ZEITSTEMPELADD in allen Fällen als Zugabe 1 MONAT zu 31. März ergibt sich 30. April, und das ZEITGRENZEDIFF In MONAT Einheiten zwischen diesen beiden Daten ist 1.

                      FunktionsaufrufErgebnis
                      ZEITGRENZEDIFF(MONAT, DATUM('2000-10-10'), DATUM('2000-12-31'))2
                      ZEITGRENZEDIFF(MONAT, DATUM('2000-03-31'), DATUM('2000-04-30'))1
                      ZEITGRENZEDIFF(MONAT, DATUM('2000-12-31'), DATUM('2000-10-10')) -2
                      TIMEBOUNDARYDIFF(STUNDE, 978222896000, DATETIME('2000-10-10 12:34:56')) -1956

                      Diese Funktion funktioniert nicht mit Zeichenfolgen-Literal-Datumsstempeln (z. B. 2000-12-31 12:34:56), um Zeichenfolgenliterale in dieser Funktion zu verwenden, wandeln Sie sie zuerst in den entsprechenden Datums-/Uhrzeittyp um (z. B. DATUMZEIT('JJJJ-MM-TT HH24:MI:SS'))

                      Addiert das positive oder negative Integral Menge von Einheit Datum/Uhrzeit-Intervalle zum Datum/Uhrzeit in ausdruck

                      Die folgenden Datums-/Zeitintervalle werden unterstützt für Einheit:

                      KonstanteBeschreibung
                      JAHRJahr wird durch Intervallbetrag geändert (nicht beeinflusst von Schaltjahr usw.) Überlauf/Unterlauf tritt auf
                      MONATMonat wird durch Intervallbetrag und Datum angepasst, wenn ein Überlauf/Unterlauf auftritt. Tag wird auf den letzten Tag des berechneten Monats angepasst, wenn kein gültiger Tag für diesen Monat ist (z. 31. April -> 30. April)
                      TAGTag wird durch Intervallbetrag geändert (Zeit wird nicht von Sommerzeit beeinflusst usw.) Datum wird angepasst, wenn Überlauf/Unterlauf auftritt
                      STUNDEDie Stunden werden durch den Intervallbetrag geändert (Zeit wird nicht von Sommerzeit beeinflusst usw.) Datum wird angepasst, wenn Überlauf/Unterlauf auftritt
                      MINUTEMinuten werden nach Intervallbetrag geändert Datum/Uhrzeit werden angepasst, wenn Überlauf/Unterlauf auftritt
                      ZWEITESekunden werden durch Intervallbetrag geändert Datum/Uhrzeit werden angepasst, wenn Überlauf/Unterlauf auftritt
                      MILLISEKUNDEMillisekunden werden durch Intervallbetrag geändert Datum/Uhrzeit werden angepasst, wenn Überlauf/Unterlauf auftritt
                      QUARTALDer Monat wird um das Dreifache des Intervallbetrags geändert, unabhängig von der Anzahl der Tage in den Monaten zwischen den Tagen MONAT Beschreibung, aber nur im letzten Monat (z. B. 31. Januar + 1 Viertel wird sein 30. April, nicht 28. April durch Februar)
                      WOCHETag wird um das 7-fache des Intervallbetrags geändert (Zeit, die nicht von Sommerzeit beeinflusst wird usw.) Monat und Jahr werden angepasst, wenn Überlauf/Unterlauf auftritt

                      Irgendwas davon Einheit Typen können a . haben SQL_TSI_ Präfix vorangestellt, z. B. beide TAG und SQL_TSI_DAY sind gültig Einheit Typen zum Angeben eines Tagesintervalls. Sie können auch einfach zitiert oder nicht zitiert werden.

                      FunktionsaufrufErgebnis (im String-Format)
                      TIMESTAMPADD(JAHR, 1, '2000-10-10') 2001-10-10
                      TIMESTAMPADD(MONAT, 1, '2000-01-31') 2000-02-29
                      TIMESTAMPADD(TAG, 1, '2000-12-31') 2001-01-01
                      TIMESTAMPADD(STUNDE, 12, '2000-10-10 12:34:56') 2000-10-11 00:34:56.000
                      TIMESTAMPADD(MINUTE, 1, '2000-10-10 12:34:56') 2000-10-10 12:35:56.000
                      TIMESTAMPADD(SECOND, 1, '2000-12-31 23:59:59') 2001-01-01 00:00:00.000
                      TIMESTAMPADD(MILLISEKUNDE, 1, '2000-10-10 12:34:56') 2000-10-10 12:34:56.001
                      TIMESTAMPADD(VIERTEL, 1, '2000-11-30') 2001-02-28
                      TIMESTAMPADD(WOCHE, 53, '2000-01-01') 2001-01-06

                      Um das Ergebnis in eine für den Datums-/Uhrzeittyp geeignete Zeichenfolge umzuwandeln (z. B. JJJJ-MM-TT HH24:MI:SS), übergeben Sie das Ergebnis an die STRING Funktion (z.B. STRING(TIMESTAMPADD(STUNDE, 12, '2000-10-10 12:34:56')) )

                      Berechnet die Differenz zwischen zwei Datums-/Uhrzeitausdrücken und gibt das Ergebnis als ganzzahlige Differenz in den genauer spezifizierten Einheiten zurück, wie viele ganze Datums-/Uhrzeitintervalle vom Typ Einheit muss addiert (oder abgezogen) werden Start gleichziehen Ende (oder so nah wie möglich kommen ohne darüber hinaus) unter Verwendung der Einheitentypen und Regeln, die in angegeben sind ZEITSTEMPELADD.

                      nicht wie ZEITGRENZEDIFF, alle Datums-/Uhrzeitkomponenten von beiden Start & Ende werden bei der Berechnung berücksichtigt, nicht nur solche, die der Genauigkeit von entsprechen Einheit.

                      Dies ist nicht symmetrisch mit ZEITSTEMPELADD in allen Fällen als Zugabe 1 MONAT zu 31. März ergibt sich 30. April, aber die ZEITSTEMPELDIFF In MONAT Einheiten zwischen diesen beiden Daten ist 0.

                      FunktionsaufrufErgebnis
                      TIMESTAMPDIFF(MONAT, DATUM('2000-10-10'), DATUM('2000-12-31'))2
                      ZEITSTEMPELDIFF(MONAT, DATUM('2000-03-31'), DATUM('2000-04-30'))0
                      TIMESTAMPDIFF(MONAT, DATUM('2000-12-31'), DATUM('2000-10-10')) -2
                      TIMESTAMPDIFF(STUNDE, 978222896000, DATETIME('2000-10-10 12:34:56')) -1956

                      Diese Funktion funktioniert nicht mit String-Literal-Datumsstempeln (z. B. 2000-12-31 12:34:56), um Zeichenfolgenliterale in dieser Funktion zu verwenden, wandeln Sie sie zuerst in den entsprechenden Datums-/Uhrzeittyp um (z. B. DATETIME('YYYY-MM-DD HH24:MI:SS'))

                      Komplexe Konvertierungsfunktionen für Datum/Uhrzeit

                      Wandelt das vollständige Datum in die Anzahl der Millisekunden um, seit die negativen Werte der Epoche akzeptiert werden

                      Wandelt das vollständige Datum in die Anzahl der Sekunden um, seit die negativen Werte der Epoche akzeptiert werden

                      Konvertiert den Zeitstempel in die Anzahl der Millisekunden seit der Epoche

                      Konvertiert das angegebene Datum und die Uhrzeit in einen zusammengesetzten Zeitstempel in Millisekunden seit der Epoche

                      Wandelt das Jahr und die Wochennummer in die Anzahl der Millisekunden um, seit die negativen Werte der Epoche akzeptiert werden

                      Konvertiert das Jahr und die Wochennummer in die Anzahl der Sekunden seit der Epoche. Negative Werte werden akzeptiert. Jede neue Woche beginnt am Sonntag um Mitternacht.

                      Fehlerprüffunktionen

                      Fehler werden nur erfolgreich abgefangen, wenn es sich bei den Ausdrücken um Gleitkommatypen handelt (d. h. doppelt und schweben).

                      Bewertet das Gegebene ausdruck und wenn es sich in unendlich auflöst oder NaN, Rückkehr val

                      Vom Konzept her ist diese Funktion die gleiche wie IF_INF(IF_NAN(Ausdruck, Wert), Wert)

                      Bewertet das Gegebene ausdruck und wenn es sich in unendlich auflöst, kehre zurück val

                      Bewertet das Gegebene ausdruck und wenn es sich auflöst NaN, Rückkehr val

                      Geodaten-/Geometriefunktionen

                      • Benutzen ST_ISVALID um zu bestimmen, ob ein Geometrieobjekt gültig ist. Die folgenden Funktionen funktionieren am besten mit gültigen Geometrieobjekten.
                      • Verwenden Sie die REMOVE_NULLABLEFunktion um alle zu entfernen nullable Spaltentypen, die sich aus der Berechnung einer abgeleiteten Spalte (z. B. wie in Projektionen) mit einer der folgenden Funktionen ergeben könnten.

                      Verbesserte leistungsskalare Funktionen

                      Die unten aufgeführten Funktionen vergleichen alle x und ja Koordinaten zu Geometrieobjekten (oder umgekehrt) und erhöht so deren Leistung bei Abfragen. Für jede dieser Funktionen gibt es eine Geometrie-zu-Geometrie-Version, die im nächsten Abschnitt aufgeführt ist.

                      Berechnet den Mindestabstand zwischen den gegebenen x und ja koordinieren und geom den angegebenen Lösungstyp verwenden. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch gibt den 2-D-euklidischen Abstand zurück
                      • 1 - Haversine gibt den minimalen Kugelabstand in Metern zurück
                      • 2 - Vincenty gibt den minimalen Sphäroidabstand in Metern zurück, genauer als Haversine, aber langsamere Leistung

                      Notiz: Wenn die x und ja koordinieren und geom schneiden (überprüfen mit ST_INTERSECTS), wird der Abstand immer sein 0.

                      Kehrt zurück 1 (wahr) wenn die x und ja Koordinate liegt innerhalb der angegebenen Distanz aus geom den angegebenen Lösungstyp verwenden. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
                      • 1 - Sphere verwendet Meter, um die Distanz der Kugel zu berechnen
                      • 2 - Sphäroid verwendet Meter, um den Sphäroidabstand zu berechnen

                      Kehrt zurück 1 (wahr) wenn die x und ja Koordinate liegt innerhalb der angegebenen Distanz aus der Begrenzungsbox von geom den angegebenen Lösungstyp verwenden. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
                      • 1 - Sphere verwendet Meter, um die Entfernung zu berechnen

                      Skalare Funktionen

                      Gibt die Fläche der gegebenen Geometrie zurück geom wenn es sich um ein POLYGON oder MULTIPOLYGON handelt, das den angegebenen Lösungstyp verwendet. Kehrt zurück 0 wenn der Eingabegeometrietyp (MULTI)POINT oder (MULTI)LINESTRING ist. Verfügbare Lösungstypen:

                      • 0 (Standard) - 2D euklidischer Bereich
                      • 1 - gekrümmte Oberfläche auf einer Kugel in Quadratmetern
                      • 2 - gekrümmte Oberfläche auf einem Sphäroid in Quadratmetern

                      Gibt eine Geometrie zurück, die alle Punkte darstellt, deren Abstand von der gegebenen Geometrie geom kleiner oder gleich dem angegebenen Abstand ist Radius. Das Radius Einheiten können durch die Lösung Typ (Standard ist in Grad) und die Radius wird im bereitgestellten erstellt Stil. Das Stil Optionen werden als Liste von durch Leerzeichen getrennten Schlüssel-Wert-Paaren angegeben, z. B. 'quad_segs=8 endcap=rund'. Wenn ein leerer Stil aufführen ('') bereitgestellt wird, werden die Standardeinstellungen verwendet. Das Stil Parameter muss angegeben werden, um a . bereitzustellen Lösung Typ.

                      • quad_segs -- die Anzahl der Segmente, die verwendet werden, um einen Viertelkreis anzunähern (Standard ist 8)
                      • Endkappe -- der Endcap-Stil des Puffers (Standard ist runden) Optionen sind runden, Wohnung (oder Hintern), und Platz
                      • beitreten -- der Join-Stil des Puffers (Standard ist runden) Optionen sind runden, Gehrung (oder Gehrung), und Fase
                      • mitre_limit -- die Grenze des Gehrungsverhältnisses, ausgedrückt als Gleitkommazahl (miter_limit ist auch akzeptabel)
                      • 0 (Standard) - 2D-Euklidischer Radiusabstand in Grad
                      • 1 - Radiusabstand der gekrümmten Oberfläche auf einer Kugel in Metern
                      • 2 - Radiusabstand der gekrümmten Oberfläche auf einem Sphäroid in Metern

                      Um einen 5-Meter-Puffer herum zu schaffen geom Verwenden der Standardstile: ST_BUFFER(geom, 5, '', 1). So erstellen Sie einen 5-Fuß-Puffer (umrechnen von Fuß in Meter) um geom mit den folgenden Stilen: ST_BUFFER(geom, 5*0.3048,'quad_segs=4 endcap=flach', 1)

                      Berechnet das 2-D PUNKT In geom1 das ist am nächsten geom2 den angegebenen Lösungstyp verwenden. Ob geom1 oder geom2 ist leer, a Null ist zurück gekommen. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch berechnet den nächsten Punkt unter Verwendung der 2-D-Euklidischen Distanz
                      • 1 - Haversine berechnet den nächsten Punkt anhand der Kugelentfernung in Metern
                      • 2 - Vincenty gibt den minimalen Sphäroidabstand in Metern zurück, genauer als Haversine, aber langsamere Leistung

                      Gibt nur die angegebenen zurück Typ aus der gegebenen Geometrie Sammlung. Typ ist eine Zahl, die folgendem zugeordnet ist:

                      Berechnet den Mindestabstand zwischen den gegebenen Geometrien, geom1 und geom2, unter Verwendung des angegebenen Lösungstyps. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch gibt den 2-D-euklidischen Abstand zurück
                      • 1 - Haversine gibt den minimalen Kugelabstand in Metern zurück
                      • 2 - Vincenty gibt den minimalen Sphäroidabstand in Metern zurück, genauer als Haversine, aber langsamere Leistung

                      Notiz: Ob geom1 und geom2 schneiden (überprüfen mit ST_INTERSECTS), wird der Abstand immer sein 0.

                      Berechnet den Mindestabstand zwischen den gegebenen Punkten, x1, y1 und x2, y2, unter Verwendung des angegebenen Lösungstyps. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch gibt den 2-D-euklidischen Abstand zurück
                      • 1 - Haversine gibt den minimalen Kugelabstand in Metern zurück
                      • 2 - Vincenty gibt den minimalen Sphäroidabstand in Metern zurück, genauer als Haversine, aber langsamere Leistung

                      Kehrt zurück 1 (wahr) wenn der maximale Abstand zwischen den Geometrien geom1 und geom2 ist kleiner oder gleich dem angegebenen Distanz voneinander mit dem angegebenen Lösungstyp. Ob geom1 oder geom2 ist Null, 0 (falsch) wird zurückgegeben. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
                      • 1 - Sphere verwendet Meter, um die Entfernung zu berechnen
                      • 2 - Sphäroid verwendet Meter, um die Entfernung zu berechnen, genauer als Kugel, aber langsamere Leistung

                      Kehrt zurück 1 (wahr) wenn der Mindestabstand zwischen den Geometrien geom1 und geom2 liegt innerhalb der angegebenen Distanz voneinander mit dem angegebenen Lösungstyp. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
                      • 1 - Sphere verwendet Meter, um die Entfernung zu berechnen
                      • 2 - Sphäroid verwendet Meter, um die Entfernung zu berechnen, genauer als Kugel, aber langsamere Leistung

                      Gibt eine Ellipse mit den folgenden Werten zurück:

                      • Zentrumx -- die x-Koordinate oder der Längengrad, der verwendet wird, um die Ellipse zu zentrieren
                      • zentriert -- die y-Koordinate oder der Breitengrad, der verwendet wird, um die Ellipse zu zentrieren
                      • Höhe -- die Höhe der Ellipse (in Grad)
                      • Breite -- die Breite der Ellipse (in Grad)

                      Kehrt zurück 1 (wahr) wenn geom1 liegt innerhalb der angegebenen Distanz der Begrenzungsbox von geom2 den angegebenen Lösungstyp verwenden. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch verwendet Grad, um die Entfernung zu berechnen
                      • 1 - Sphere verwendet Meter, um die Entfernung zu berechnen

                      Gibt die dreidimensionale Version (z. B. X-, Y- und Z-Koordinaten) von . zurück geom, eine bereitgestellte Geometrie oder ein Satz von Geometrien (z. B. über GEOMETRYCOLLECTION oder WKT-Spaltenname), mit z als neuer Z-Wert der Geometrie. Die bereitgestellten Z-Werte können auch aus einer numerischen Spalte abgeleitet werden. Wenn nein z bereitgestellt wird, a 0 Wird angewendet werden.

                      Wenn eine WKT-Spalte vorgesehen ist für geom und eine numerische Spalte ist vorgesehen für z, werden die Z-Werte zeilenweise in der Quelltabelle mit den bereitgestellten Geometrien abgeglichen. Wenn eine singuläre Geometrie vorgesehen ist geom und eine Spalte ist vorgesehen für z, werden dreidimensionale Versionen der bereitgestellten Geometrie für jeden Z-Wert zurückgegeben, der in der bereitgestellten gefunden wird z Säule. Wenn Spalten für beide vorgesehen sind geom und z und Nullwerte in beiden Spalten vorhanden sind, wird die Zeile mit Nullwerten in den Ergebnissen übersprungen.

                      Gibt eine Hash-String-Darstellung der gegebenen Geometrie zurück geom mit angegebenem Präzision (die Länge des Geohash-Strings). Je länger die Präzision, desto genauer ist der Hash. Standardmäßig, Präzision ist eingestellt auf 20 das Maximum für Präzision ist 32. Kehrt zurück Null Wenn geom ist eine leere Geometrie.

                      Der zurückgegebene Wert wird nicht sei ein Geohash der exakten Geometrie, aber ein Geohash des Schwerpunkts der gegebenen Geometrie

                      Gibt die Typ-ID von from . zurück geom. Typ- und ID-Zuordnungen:

                      • PUNKT = 0
                      • LINESTRING = 1
                      • POLYGON = 3
                      • MEHRPUNKT = 4
                      • MULTILINESTRING = 5
                      • MULTIPOLYGON = 6
                      • GEOMETRIESAMMLUNG = 7

                      Erstellt ein MULTIPOLYGON, das ein Gitter aus Sechsecken zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens enthält. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Die Größe (in Metern) der Seiten der einzelnen Sechsecke wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

                      • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
                      • 0 (Standard) - 100 Millionen Zellen
                      • <n> - Benutzerdefiniertes Limit von n Zellen

                      Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.

                      Gibt die Länge der Geometrie zurück, wenn es sich um einen LINESTRING oder MULTILINESTRING handelt. Kehrt zurück 0 wenn ein anderer Geometrietyp, z. B. POINT, MULTIPOINT usw., auch GEOMETRYCOLLECTIONs unterstützt werden, aber die oben genannte Typbeschränkung weiterhin gilt, wird die Sammlung rekursiv nach LINESTRINGs und MULTILINESTRINGs durchsucht und die Summe aller unterstützten Geometrietypen wird zurückgegeben (nicht unterstützte Typen werden ignoriert .) ). Verfügbare Lösungstypen:

                      • 0 (Standard) - 2D-euklidische Länge
                      • 1 - Länge auf einer Kugel in Metern
                      • 2 - Länge auf einem Sphäroid in Metern

                      Gibt den LINESTRING zurück, der die längste Punktlinie zwischen den beiden Geometrien darstellt. Wenn mehrere längste Zeilen gefunden werden, wird nur die erste gefundene Zeile zurückgegeben. Ob geom1 oder geom2 ist leer, Null ist zurück gekommen. Verfügbare Lösungstypen:

                      • 0 (Standard) - Euklidisch verwendet Grad, um die längste Linie zu berechnen
                      • 1 - Sphere verwendet Meter, um die längste Linie zu berechnen
                      • 2 - Sphäroid verwendet Meter, um die längste Linie zu berechnen, genauer als Kugel, aber langsamere Leistung

                      Erstellt einen LINESTRING aus geom wenn es ein MULTIPOINT ist. Ob geom ein POINT ist, muss es mindestens einen weiteren POINT geben, um einen LINESTRING zu erstellen. Ob geom ein LINESTRING ist, muss er mindestens zwei Punkte haben. Kehrt zurück Null Wenn geom ist kein POINT, MULTIPOINT oder LINESTRING

                      Diese Funktion kann in Bezug auf die Leistung ziemlich kostspielig sein

                      Erzeugt einen POINT an der angegebenen Koordinate

                      Diese Funktion kann in Bezug auf die Leistung ziemlich kostspielig sein

                      Erstellt ein POLYGON aus geom. Eingaben müssen geschlossene LINESTRINGs sein

                      Diese Funktion kann in Bezug auf die Leistung ziemlich kostspielig sein

                      Gibt den maximalen Abstand zwischen den angegebenen geom1 und geom2 Geometrien mit dem angegebenen Lösungstyp. Ob geom1 oder geom2 ist leer, Null ist zurück gekommen. Verfügbare Lösungstypen:

                      • 0 (Standard) - gibt den maximalen 2D-euklidischen Abstand zurück
                      • 1 - Die Kugel gibt die maximale Entfernung in Metern zurück
                      • 2 - Sphäroid gibt die maximale Entfernung in Metern zurück, genauer als Kugel, aber langsamere Leistung

                      Erstellt mehrere Puffer an den angegebenen Distanz um das gegebene geom Geometrie. Mehrere Abstände werden als durch Kommas getrennte Werte in einem Array angegeben, z. B. [10,20,30]. Gültige Werte für draußen sind:

                      • VOLL -- zeigt an, dass sich Puffer überlappen oder das Gegebene abdecken geom Geometrie. Dies ist die Standardeinstellung.
                      • OUTSIDE_ONLY -- zeigt an, dass Puffer Ringe um das Gegebene sein werden geom Geometrie.

                      Gibt den Umfang der Geometrie zurück, wenn es sich um ein POLYGON oder MULTIPOLYGON handelt. Kehrt zurück 0 wenn ein anderer Geometrietyp, z. B. POINT, MULTIPOINT, LINESTRING oder MULTILINESTRING. GEOMETRYCOLLECTIONs werden ebenfalls unterstützt, aber die oben genannte Typbeschränkung gilt weiterhin. Die Sammlung wird rekursiv nach POLYGONs und MULTIPOLYGONs durchsucht und die Summe aller unterstützten Geometrietypen wird zurückgegeben (nicht unterstützte Typen werden ignoriert). Verfügbare Lösungstypen:

                      • 0 (Standard) - 2D-euklidische Länge
                      • 1 - Länge auf einer Kugel in Metern
                      • 2 - Länge auf einem Sphäroid in Metern

                      Gibt einen POINT mit dem angegebenen zurück Geohash mit einer durch die ganze Zahl festgelegten Genauigkeit Präzision. Ob Präzision angegeben ist, verwendet die Funktion so viele Zeichen im Hash wie Präzision um die Geometrie zu erstellen. Wenn nein Präzision angegeben ist, wird die volle Länge des Geohash wird genutzt.

                      Der zurückgegebene POINT repräsentiert die Mitte des Begrenzungsrahmens des Geohash

                      Erstellt ein MULTIPOLYGON mit einem quadratischen Punktraster zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Der Abstand zwischen den Punkten (in Metern) wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

                      • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
                      • 0 (Standard) - 100 Millionen Zellen
                      • <n> - Benutzerdefiniertes Limit von n Zellen

                      Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.

                      Gibt das Gegebene zurück geom aber segmentiert n oft, je nachdem, wie max_segment_length Entfernung (in Einheiten basierend auf der Lösung type) teilt die ursprüngliche Geometrie auf. Das neue geom hat garantiert Segmente, die kleiner als die angegebenen sind max_segment_length. Beachten Sie, dass POINTs nicht segmentiert werden können. Sammlungsgeometrien (GEOMETRYCOLLECTION, MULTILINESTRING, MULTIPOINT usw.) können segmentiert werden, jedoch werden nur die einzelnen Teile segmentiert, nicht die Sammlung als Ganzes. Verfügbare Lösungstypen:

                      • 0 - Euklidisch verwendet Grad, um die Entfernung zu berechnen
                      • 1 (Standard) - Sphere verwendet Meter, um die Entfernung zu berechnen

                      Gibt eine vereinfachte Version des angegebenen zurück geom Verwenden eines Algorithmus zum Reduzieren der Anzahl von Punkten, die eine gegebene Geometrie umfassen, während versucht wird, die ursprüngliche Form am besten beizubehalten. Das Gegebene Toleranz bestimmt, wie stark die Geometrie vereinfacht werden soll. Je höher die Toleranz, desto einfacher ist die zurückgegebene Geometrie. Einige Löcher werden möglicherweise entfernt und einige ungültige Polygone (z. B. sich selbst überschneidend usw.) können in der zurückgegebenen Geometrie vorhanden sein. Nur (MULTI)LINESTRINGs und (MULTI)POLYGONs können vereinfacht werden, einschließlich derer, die in GEOMETRYCOLLECTIONs gefunden werden, alle anderen Geometrieobjekte werden nicht vereinfacht zurückgegeben.

                      Das Toleranz sollten in den gleichen Einheiten wie die Daten angegeben werden. Als Faustregel gilt a Toleranz von 0.00001 würde etwa einem Meter entsprechen.

                      Gibt eine vereinfachte Version des angegebenen zurück geom Verwenden eines Algorithmus zum Reduzieren der Anzahl von Punkten, die eine gegebene Geometrie umfassen, während versucht wird, die ursprüngliche Form am besten beizubehalten. Das Gegebene Toleranz bestimmt, wie stark die Geometrie vereinfacht werden soll. Je höher die Toleranz, desto einfacher ist die zurückgegebene Geometrie. In der zurückgegebenen Geometrie werden keine Löcher entfernt und keine ungültigen Polygone (z. B. sich selbst überschneidend usw.) vorhanden. Nur (MULTI)LINESTRINGs und (MULTI)POLYGONs können vereinfacht werden, einschließlich derer, die in GEOMETRYCOLLECTIONs gefunden werden, alle anderen Geometrieobjekte werden nicht vereinfacht zurückgegeben.

                      Das Toleranz sollten in den gleichen Einheiten wie die Daten angegeben werden. Als Faustregel gilt a Toleranz von 0.00001 würde etwa einem Meter entsprechen.

                      Erstellt ein MULTIPOLYGON, das ein Gitter aus Quadraten zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens enthält. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Die Größe (in Metern) der Seiten der einzelnen Quadrate wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

                      • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
                      • 0 (Standard) - 100 Millionen Zellen
                      • <n> - Benutzerdefiniertes Limit von n Zellen

                      Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.

                      Erstellt ein MULTIPOLYGON, das ein Gitter aus Dreiecken zwischen den gegebenen minimalen und maximalen Punkten eines Begrenzungsrahmens enthält. Der Minimalpunkt darf nicht größer oder gleich dem Maximalpunkt sein. Die Größe (in Metern) der Seiten der einzelnen Dreiecke wird bestimmt durch cell_side. Das cell_side darf nicht größer als die Breite oder Höhe des Begrenzungsrahmens sein. Die maximal produzierbare Zellzahl wird bestimmt durch Grenze, eine positive ganze Zahl. Unterstützte Werte für Grenze:

                      • -1 - Keine Begrenzung der Anzahl der generierten Zellen (effektiv durch den Systemspeicher begrenzt)
                      • 0 (Standard) - 100 Millionen Zellen
                      • <n> - Benutzerdefiniertes Limit von n Zellen

                      Wenn die benutzerdefinierte Grenzwertanforderung mehr Zellen angibt (basierend auf dem Begrenzungsrahmen und der cell_side) als die Systemgrenze, a Null ist zurück gekommen.

                      Gibt die binäre Form (WKB) von a . zurück geom (WKT)

                      Diese Funktion kann nur in Abfragen für eine einzelne Tabelle verwendet werden.

                      Aggregationsfunktionen

                      FunktionBeschreibung
                      ST_AGGREGATE_COLLECT(geom)Alias ​​für ST_COLLECT_AGGREGATE()
                      ST_AGGREGATE_INTERSECTION(geom)Alias ​​für ST_INTERSECTION_AGGREGATE()
                      ST_COLLECT_AGGREGATE(geom)Gibt eine GEOMETRYCOLLECTION zurück, die alle Geometrien enthält, die im gefunden wurden geom einstellen. Alle MULTI*-Geometrien werden in separate singuläre Geometrien unterteilt, zB würde MULTIPOINT((0 0), (1 1)) in POINT(0 0) und POINT(1 1) aufgeteilt. Das gleiche gilt für Elemente einer GEOMETRYCOLLECTION gefunden in geom, wo eine GEOMETRYSAMMLUNG innerhalb der bereitgestellten geom set wird ebenfalls geparst, wodurch es effektiv abgeflacht wird und die einzelnen Geometrien zu der resultierenden GEOMETRYCOLLECTION hinzugefügt werden. Beliebige leere Geometrien in geom werden ignoriert, auch wenn sie Teil einer GEOMETRYCOLLECTION sind. Alle doppelten WKTs werden aufbewahrt.
                      ST_DISSOLVE(geom)Löst alle Geometrien innerhalb eines bestimmten Satzes in eine einzige Geometrie auf. Beachten Sie, dass die resultierende einzelne Geometrie immer noch eine Gruppe nicht zusammenhängender Geometrien sein kann, aber als einzelne Gruppe dargestellt wird, z. B. eine GEOMETRYCOLLECTION. Beste Leistung in Verbindung mit angrenzenden Geometrien
                      ST_DISSOLVEOVERLAPPING(geom)Löst alle Geometrien innerhalb eines bestimmten Satzes in eine einzige Geometrie auf.Beachten Sie, dass die resultierende einzelne Geometrie immer noch eine Gruppe nicht zusammenhängender Geometrien sein kann, aber als einzelne Gruppe dargestellt wird, z. B. eine GEOMETRYCOLLECTION. Beste Leistung in Verbindung mit überlappenden Geometrien
                      ST_INTERSECTION_AGGREGATE(geom)Gibt ein POLYGON oder MULTIPOLYGON zurück, das den gemeinsamen Anteil aller Geometrien im geom einstellen. Gibt eine leere GEOMETRYCOLLECTION zurück, wenn kein gemeinsamer Teil zwischen allen Geometrien vorhanden ist. Funktionell äquivalent zu ST_INTERSECTION(ST_INTERSECTION(ST_INTERSECTION(geom1, geom2), geom3), . geomN).
                      ST_LINESTRINGFROMORDEREDPOINTS(x, y, t)Gibt einen LINESTRING zurück, der eine "Spur" der angegebenen Punkte darstellt (x, ja) sortiert nach der angegebenen Sortierspalte T (z. B. ein Zeitstempel oder eine Sequenznummer). Wenn einer der Werte in den angegebenen Spalten Null, wird der Nullpunkt aus dem resultierenden LINESTRING weggelassen. Wenn es in der Quelltabelle nur einen von Null verschiedenen "Punkt" gibt, wird ein POINT zurückgegeben. Wenn es in der Quelltabelle keine "Punkte" ungleich Null gibt, a Null ist zurück gekommen
                      ST_LINESTRINGFROMORDEREDPOINTS3D(x, y, z, t)Gibt einen LINESTRING zurück, der eine "Spur" der angegebenen 3D-Punkte darstellt (x, ja, z) sortiert nach der angegebenen Sortierspalte T (z. B. ein Zeitstempel oder eine Sequenznummer). Wenn einer der Werte in den angegebenen Spalten Null, wird der Nullpunkt aus dem resultierenden LINESTRING weggelassen. Wenn es in der Quelltabelle nur einen von Null verschiedenen "Punkt" gibt, wird ein POINT zurückgegeben. Wenn es in der Quelltabelle keine "Punkte" ungleich Null gibt, a Null ist zurück gekommen
                      ST_POLYGONIZE(geom)Gibt eine GEOMETRYCOLLECTION zurück, die POLYGONs enthält, die die bereitgestellten (MULTI)LINESTRING(s) umfassen. (MULTI)POINT und (MULTI)POLYGON Geometrien werden bei der Berechnung der resultierenden GEOMETRYCOLLECTION ignoriert. Wenn aus den bereitgestellten (MULTI)LINESTRING(s) kein gültiges POLYGON erstellt werden kann, wird eine leere GEOMETRYCOLLECTION zurückgegeben.

                      Mathematische Funktionen

                      Runden ausdruck auf die nächste Dezimalzahl mit Skala Nachkommastellen, wenn Skala ist eine positive Zahl, die auf die nächste Zahl gerundet wird, so dass das Ergebnis -(Skala) Nullen links vom Dezimalpunkt, wenn Skala ist negativer gebrauch Skala von 0 auf die nächste ganze Zahl runden. Beispiele:

                      Bestimmt, ob eine Zahl positiv, negativ oder null ist, gibt einen der folgenden drei Werte zurück:

                      Runden ausdruck bis auf die nächste Dezimalzahl mit Skala Dezimalstellen, nach den gleichen Regeln wie RUNDEN. Beispiele:

                      Nullfunktionen

                      Beachten Sie, dass kein Fehler ausgegeben wird, wenn Kinetica versucht, verschiedene Datentypen in die Null Funktionen unten. Wenn die Ausgabe also unerwartet ist, kann es sein, dass die Typen gebraucht sind nicht gleich Typ.

                      FunktionBeschreibung
                      IS_NULL(ausdruck)Kehrt zurück 1 (wahr) wenn ausdruck ist Null andernfalls kehrt zurück 0 (falsch)
                      NULLIF(ausdr_a, ausdr_b)Kehrt zurück Null Wenn expr_a gleich expr_b gibt andernfalls den Wert von zurück expr_a. Beide Ausdrücke sollten denselben konvertierbaren Datentyp haben
                      NVL(ausdr_a, ausdr_b)Kehrt zurück expr_a wenn es das nicht ist Null andernfalls kehrt zurück expr_b. Beide Ausdrücke sollten vom gleichen konvertierbaren Datentyp sein, siehe Short-Circuiting für Details zur Fehlerprüfung
                      NVL2(ausdr, value_if_not_null, value_if_null)Bewertet ausdruck: Wenn ausdruck kehrt nicht zurück Null, value_if_not_null ist zurück gekommen. Ob ausdruck kehrt zurück a Null, value_if_null ist zurück gekommen. Beide value_if_not_null und value_if_null sollte vom gleichen Datentyp sein wie ausdruck oder implizit konvertierbar siehe Short-Circuiting für Details zur Fehlerprüfung
                      REMOVE_NULLABLE(ausdruck)Alias ​​für NULLNULL
                      ZEROIFNULL(ausdruck)Ersetzt Null Werte mit entsprechenden Werten basierend auf dem Spaltentyp (z. B. 0 if numerische Spalte, eine leere Zeichenfolge if charN Spalte usw.). Entfernt auch die nullable Spalteneigenschaft, wenn sie zum Berechnen einer abgeleiteten Spalte verwendet wird.

                      String-Funktionen

                      Diese Funktionen funktionieren nur mit Zeichenfolgenfeldern mit fester Breite (char1 - char256).

                      Führt eine String-Verkettung von durch expr_a & expr_b verschachtelt verwenden CONCAT Aufrufe zum Verketten von mehr als zwei Zeichenfolgen

                      Die resultierende Feldgröße von any CONCAT wird ein ... sein charN Feld groß genug, um die verketteten Felder aufzunehmen, z. B. Verketten a char32 Spalte und a char64 Spalte ergibt a char128 Säule. Spalten des Typs char256 nicht verwendbar mit CONCAT.

                      Gibt die Verkettung von zurück expr_a und expr_b, abgeschnitten auf die maximale Größe von expr_a. Für Spalten ist diese Größe explizit für String-Konstanten, dies ist die kleinste charN Typ, der die halten kann expr_a Schnur.

                      (char8 ist das Minimum Größe, die zum Halten erforderlich ist das ABC123 Wert, also das Ergebnis wird bei 8 . abgeschnitten Figuren)

                      (char8 ist das Minimum Größe, die zum Halten erforderlich ist das ABCD1234 Wert, also nein zusätzliche Zeichen kann verkettet werden)

                      Gibt das Oktett der in . angegebenen IP-Adresse zurück ausdruck an der durch . angegebenen Position part_num. Gültig part_num Werte sind Konstanten von 1 zu 4.

                      Gibt zurück, ob ref_expr stimmt mit dem Gegebenen überein match_expr. Die Übereinstimmung ist ein String-Literal mit den folgenden Ausnahmen:

                      Linke Pads das Gegebene base_expr String mit dem pad_expr String zum gegebenen Länge von Charakteren. Ob base_expr ist länger als Länge, der Rückgabewert wird auf gekürzt Länge Figuren. Ob Länge größer als 256 ist, wird auf 256 gekürzt.

                      Kehrt zurück ausdruck mit umgekehrter Zeichenreihenfolge.

                      Rechte Pads das Gegebene base_expr String mit dem pad_expr String zum gegebenen Länge von Charakteren. Ob base_expr ist länger als Länge, der Rückgabewert wird auf gekürzt Länge Figuren. Ob Länge größer als 256 ist, wird auf 256 gekürzt.

                      Gibt einen Soundex-Wert von . zurück ausdruck. Nur das erste Wort in der Zeichenfolge wird bei der Berechnung berücksichtigt.

                      Notiz: Dies ist der Algorithmus, der von den meisten Programmiersprachen verwendet wird

                      Splits ausdruck in Gruppen eingeteilt durch die delim Zeichen und gibt das . zurück group_num Gruppe aufgeteilt. Ob group_num positiv ist, werden Gruppen von Anfang an gezählt ausdruck falls negativ, werden die Gruppen ab dem Ende gezählt ausdruck rückwärts gehen. Zwei aufeinanderfolgende Trennzeichen führen dazu, dass der Liste der auswählbaren Gruppen eine leere Zeichenfolge hinzugefügt wird. Wenn keine Instanzen von delim existiert in ausdruck, die gesamte Zeichenfolge ist unter Gruppe verfügbar 1 (und -1 ). Gruppe 0 gibt nichts zurück.

                      Vergleicht expr_a zu expr_b in einer lexikographischen Art

                      Benutzer-/Sicherheitsfunktionen

                      Gibt zurück, ob der aktuelle Benutzer (oder der angegebene Nutzer, falls angegeben) wurde die angegebene Rolle entweder direkt oder indirekt zugewiesen:

                      Masken Länge Charaktere von ausdruck, beginnend an der mit gekennzeichneten Position starten, mit * Zeichen (oder das in angegebene Zeichen) verkohlen):


                      Leere Geometrien in GEOMETRYCOLLECTION - Geographische Informationssysteme

                      Designziele

                      1. (sehr) schneller Abruf von Daten aus einer Datenbank im WKB-Format,
                      2. (sehr) schnelle Konvertierung von WKB-Rohdaten in ein geografisches Toolkit,
                      3. Kompatibilität mit mehreren verschiedenen geografischen Toolkits.

                      Es gibt viele geographische Toolkits, von denen jedes die gleichen Dinge auf leicht unterschiedliche Weise modelliert: Punkte, Linien, Polygone. Einige sind aufgrund ihrer persönlichen Vorgeschichte dem WKB-Format sehr nahe (zB JTS), während andere weiter weg sind (OpenMap). Das Ziel von WKB4J ist es, dem Autor jedes Toolkits zu ermöglichen, WKB4J einfach in sein eigenes Toolkit zu integrieren und gleichzeitig eine starke Leistung aufrechtzuerhalten.

                      Gesamtkonzept

                      Dies wurde erreicht, indem der Treiber in drei Teile aufgeteilt wurde: , WKBReader, WKBParser und WKBfactories.

                      Der WKBReader ruft Rohdaten aus einer Datenquelle ab. Die Daten werden dann an den WKBParser übergeben. Im Moment ist die einzige mögliche Datenquelle eine PostgreSQL-Datenbank, aber es ist trivial, Daten aus Dateien oder anderen Datenbanken zu holen.

                      Der WKBParser verarbeitet sequentiell den WKB-Stream und gibt Aufrufe aus, wenn er auf Elemente im Datenstrom trifft.

                      Diese Aufrufe werden auf einer vom Benutzer bereitgestellten WKBFactory durchgeführt. Diese Architektur stützt sich sowohl auf das Strategy-Muster (die WKBFactory wird vom Benutzer bereitgestellt, sodass es wirklich alles sein kann) als auch auf die SAX-API (eine API auf Basis einer Evenmental-Base für die XML-Verarbeitung). Eine WKBFactory kann Anrufe nach eigenem Ermessen annehmen, einschließlich des Ignorierens von Anrufen. Dies ermöglicht es dem Autor jeder WKBFactory, den effizientesten Verarbeitungscode für sein eigenes Toolkit zu implementieren. Einige Toolkits verarbeiten beispielsweise nur unveränderliche Objekte, während andere die inkrementelle Konstruktion von Objekten ermöglichen.

                      • ZusammenfassungWKBWerk: Diese Factory enthält Code, der den Ereignisfluss überwacht und schreit, wenn etwas nicht stimmt (z. B. wenn der WKB-Stream versucht, eine GeometryCollection in einen LineString einzufügen). Es kann als "validierende" WKBFactory angesehen werden. Wenn Sie sicher sind, dass mit Ihren Daten nichts falsch ist, können Sie diese Klasse nicht ableiten und einfach die Geschwindigkeit genießen. Dennoch ist der Overhead dieser Klasse sehr gering.
                      • ProtokollierungWKBWerk: ein Decorator um eine AbstractWKBFactory, der jeden Aufruf an ein Log4J-System protokolliert. Während der Entwicklung einer neuen WKBFactory können Sie LoggingWKBFactory unterordnen, um den Anruffluss zu visualisieren. Sobald Sie sich einigermaßen sicher sind, dass Ihre WKBFactory korrekt ist, können Sie LoggingWKBFactory umgehen, indem Sie AbstractWKBFactory erweitern. Normale Anrufereignisse werden in der Info-Ebene protokolliert. Auch hier ist der Overhead dieser Klasse gering.
                      • LeerWKBWerk: Diese Fabrik ist nur leer, damit der Autor die Lücken füllen kann. Der Autor einer neuen WKBfactory sollte diese nicht erweitern, sondern einfach in eine eigene Anwendung kopieren.

                      3D-Unterstützung

                      Derzeit werden Höheninformationen in der Simple Features Specification nicht unterstützt, aber es scheint, dass viele Projekte (einschließlich PostGIS) die Zweieinhalb-D-Erweiterungen für Simple Features-Vorschlag implementieren. Ein wichtiger Punkt: Es ist möglich, 2D-Geometrien mit 3D-Geometrien in "Container"-Geometrien (GeometryCollection, MultiPolygon, MultiLineString, MultiPoint) zu mischen, aber Sie können 2D-Punkte nicht mit 3D-Punkten in denselben Geometrien mischen da Punktlisten eigentlich Arrays von Doubles ohne Begrenzung sind.

                      Da es kein Standard ist, ist es in den normalen WKBfactories und WKBParser nicht implementiert. Stattdessen wird es in den WKBFactories3D-Schnittstellen und dem WKBParser3D angegeben. Fabriken, die diese Spezifikation unterstützen möchten, sollten die WKBFactories3D-Schnittstelle implementieren. JTSFactories und PostGISFactory tun dies, OpenMapFactory jedoch nicht, da OpenMap standardmäßig keine Höheninformationen unterstützt. Wenn Ihre Daten 3D-Punkte enthalten, sollten Sie WKBParser3D anstelle von WKBParser verwenden.

                      Die Implementierung war unkompliziert, erforderte jedoch einige Änderungen am WKBParser, um ihn allgemeiner zu machen.

                      Moot-Punkte

                      Einige Designentscheidungen liegen im Ermessen.

                      Wie entscheidet der Fahrer, dass er alle Daten für eine bestimmte Geometrie gesehen hat und zu einer anderen Geometrie wechseln soll.

                      Wir können entweder die WKBFactory selbst entscheiden lassen, indem sie den Tiefenzähler hält, oder wir können den Treiber aufrufen, um zu signalisieren, wann Geometrien beginnen und wo sie enden. Der Tiefenzähler fügt überall einen Vergleich hinzu, sodass der Entwickler der Fabrik mehr belastet wird. Zusatzaufrufe, naja, die Entwickler müssen sie implementieren, also ist es nicht viel besser. Ich habe mich für die Lösung der zusätzlichen Aufrufe entschieden, weil sie tatsächlich den WKB-Datenstrom darstellen, während Tiefenzähler nur vorhersagen, was als nächstes kommen sollte.

                      SRIDs sind eigentlich nicht Teil des WKB-Formats. Dennoch können einige Toolkits erfordern, dass ihre Objekte mit einem (JTS) erstellt werden.


                      Beim Typ "MultiPolygon" muss das Member "coordinates" ein Array von Polygon-Koordinatenarrays sein.

                      Beim Typ "LineString" muss das Member "coordinates" ein Array mit zwei oder mehr Positionen sein. Ein LinearRing ist ein geschlossener LineString mit 4 oder mehr Positionen. Die erste und letzte Position sind gleichwertig (sie stellen gleichwertige Punkte dar). Obwohl ein LinearRing nicht explizit als GeoJSON-Geometrietyp dargestellt wird, wird auf ihn in der Polygon-Geometrietypdefinition Bezug genommen.

                      Im Rasen : lawn_linestring(list(c(-2, 52), c(-3, 54), c(-2, 53)))


                      st_buffer berechnet einen Puffer um diese Geometrie/jede Geometrie. Wenn endCapStyle , joinStyle oder mitreLimit auf Nicht-Standardwerte ('ROUND', 'ROUND' bzw. 1.0) gesetzt sind, wird die zugrunde liegende GEOS-Funktion 'buffer with style' verwendet. Weitere Informationen finden Sie unter postgis.net/docs/ST_Buffer.html.

                      st_boundary gibt die Grenze einer Geometrie zurück

                      st_convex_hull erzeugt die konvexe Hülle einer Menge von Punkten

                      st_simplify vereinfacht Linien durch das Entfernen von Scheitelpunkten

                      st_triangulate trianguliert eine Menge von Punkten (nicht eingeschränkt). st_triangulate erfordert GEOS Version 3.4 oder höher

                      st_inscribed_circle gibt den maximal eingeschriebenen Kreis für Polygongeometrien zurück. Für st_inscribed_circle wird, wenn nQuadSegs 0 ist, ein 2-Punkt-LINESTRING mit dem Mittelpunkt und einem Grenzpunkt jedes Kreises zurückgegeben, andernfalls wird ein Kreis (Puffer) zurückgegeben, wobei nQuadSegs die Anzahl der Punkte pro Quadrant steuert, um den Kreis anzunähern. st_inscribed_circle erfordert GEOS Version 3.9 oder höher

                      st_voronoi erstellt Voronoi-Tesselation. st_voronoi erfordert GEOS Version 3.5 oder höher

                      st_polygonize erstellt Polygone aus Linien, die einen geschlossenen Ring bilden. Im Fall von st_polygonize muss x ein Objekt der Klasse LINESTRING oder MULTILINESTRING sein oder ein sfc-Geometrie-Listenspaltenobjekt, das diese enthält

                      st_line_merge führt Zeilen zusammen. Im Fall von st_line_merge muss x ein Objekt der Klasse MULTILINESTRING oder ein sfc-Geometrie-Listenspaltenobjekt sein, das diese enthält

                      st_centroid gibt den Schwerpunkt einer Geometrie an

                      st_point_on_surface gibt einen Punkt zurück, der sich garantiert auf der (Multi-)Oberfläche befindet.

                      st_reverse kehrt die Knoten in einer Linie um

                      st_node fügt Knoten zu linearen Geometrien an Schnittpunkten ohne Knoten hinzu und funktioniert nur bei einzelnen linearen Geometrien


                      Schau das Video: Simple feature sf geometry objects