ST_PointFromWKB() și celelalte funcții WKB pe tip în MySQL

Citesc WKB, ca ST_GeomFromWKB(), dar acceptă un singur tip de geometrie (punct, linie, poligon, Multi..., colecție).

Sintaxă
ST_PointFromWKB(wkb [, srid [, optiuni]])
ST_LineFromWKB(wkb [, srid [, optiuni]])
ST_PolyFromWKB(wkb [, srid [, optiuni]])
ST_MPointFromWKB(wkb [, srid [, optiuni]])
ST_MLineFromWKB(wkb [, srid [, optiuni]])
ST_MPolyFromWKB(wkb [, srid [, optiuni]])
ST_GeomCollFromWKB(wkb [, srid [, optiuni]])

Ce face ST_PointFromWKB() și celelalte funcții WKB pe tip

Aceste funcții verifică tipul geometriei din WKB: dacă octeții descriu alt tip, primești eroarea „WKB value is a geometry of unexpected type”. Sunt utile când știi sigur ce tip trebuie să conțină datele importate.

Sinonime: ST_LineStringFromWKB(), ST_PolygonFromWKB(), ST_MultiPointFromWKB(), ST_MultiLineStringFromWKB(), ST_MultiPolygonFromWKB() și ST_GeometryCollectionFromWKB(). Ca la ST_GeomFromWKB(), din MySQL 8.4 argumentul trebuie să fie WKB, nu o geometrie.

Parametri

Parametru Descriere
wkb Șirul binar WKB.
srid Opțional: sistemul de coordonate.
optiuni Opțional: ordinea axelor.

Ce returnează

Geometria de tipul cerut.

Exemple

Exemplul 1: Funcțiile simple: punct, linie, poligon

SET @p = ST_AsWKB(Point(2, 6));
SET @l = ST_AsWKB(ST_GeomFromText('LINESTRING(0 0,3 0,3 4)'));
SET @poli = ST_AsWKB(ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))'));

SELECT ST_AsText(ST_PointFromWKB(@p)) AS punct,
       ST_Length(ST_LineFromWKB(@l)) AS lungime,
       ST_Length(ST_LineStringFromWKB(@l)) AS lungime_sinonim,
       ST_Area(ST_PolyFromWKB(@poli)) AS arie,
       ST_Area(ST_PolygonFromWKB(@poli)) AS arie_sinonim;

Rezultat

+------------+---------+-----------------+------+--------------+
| punct      | lungime | lungime_sinonim | arie | arie_sinonim |
+------------+---------+-----------------+------+--------------+
| POINT(2 6) |       7 |               7 |   16 |           16 |
+------------+---------+-----------------+------+--------------+

Exemplul 2: Geometriile compuse

SET @mp = ST_AsWKB(ST_GeomFromText('MULTIPOINT(1 1,2 6,5 3)'));
SET @ml = ST_AsWKB(ST_GeomFromText('MULTILINESTRING((0 0,3 0),(3 4,6 4))'));
SET @mpo = ST_AsWKB(ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 0)),((10 0,12 0,12 2,10 0)))'));
SET @gc = ST_AsWKB(ST_GeomFromText('GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(1 1,5 3))'));

SELECT ST_AsText(ST_MPointFromWKB(@mp)) AS mpoint,
       ST_NumGeometries(ST_MultiPointFromWKB(@mp)) AS nr_puncte,
       ST_Length(ST_MLineFromWKB(@ml)) AS lungime,
       ST_Length(ST_MultiLineStringFromWKB(@ml)) AS lungime2;

SELECT ST_Area(ST_MPolyFromWKB(@mpo)) AS arie,
       ST_Area(ST_MultiPolygonFromWKB(@mpo)) AS arie2,
       ST_AsText(ST_GeomCollFromWKB(@gc)) AS colectie,
       ST_NumGeometries(ST_GeometryCollectionFromWKB(@gc)) AS elemente;

Rezultat

+-------------------------------+-----------+---------+----------+
| mpoint                        | nr_puncte | lungime | lungime2 |
+-------------------------------+-----------+---------+----------+
| MULTIPOINT((1 1),(2 6),(5 3)) |         3 |       6 |        6 |
+-------------------------------+-----------+---------+----------+
+------+-------+----------------------------------------------------+----------+
| arie | arie2 | colectie                                           | elemente |
+------+-------+----------------------------------------------------+----------+
|   10 |    10 | GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(1 1,5 3)) |        2 |
+------+-------+----------------------------------------------------+----------+

Greșeli frecvente

  • Folosești ST_LineFromWKB() pe un punct. Interogarea se oprește cu eroare; dacă nu știi tipul, folosește ST_GeomFromWKB() și verifică apoi cu ST_GeometryType().

Comenzi înrudite