Ce face ST_AsBinary()
WKB este forma binară standard a unei geometrii, înțeleasă de PostGIS, QGIS sau bibliotecile de hărți. ST_AsBinary() și sinonimul ei ST_AsWKB() returnează acești octeți; ca să-i vezi, folosește HEX().
Un punct în WKB are 21 de octeți: 1 octet pentru ordinea octeților (01 = little-endian), 4 octeți pentru tip (01000000 = punct) și câte 8 octeți pentru fiecare coordonată. Formatul intern MySQL este același WKB precedat de 4 octeți cu SRID-ul, de aceea are 25 de octeți. WKB nu conține SRID-ul.
Ca la ST_AsText(), pentru SRID 4326 se poate alege ordinea axelor cu 'axis-order=long-lat'. Dacă scrii WKB în ordinea long-lat și îl citești înapoi fără aceeași opțiune, latitudinea și longitudinea se inversează.
Parametri
| Parametru | Descriere |
|---|---|
geometrie |
Valoarea spațială. |
optiuni |
Opțional: ordinea axelor, de exemplu 'axis-order=long-lat'. |
Ce returnează
Un șir binar (WKB).
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE orase (
id INT PRIMARY KEY,
nume VARCHAR(20),
loc POINT NOT NULL SRID 4326,
SPATIAL INDEX (loc)
);
INSERT INTO orase VALUES
(1, 'Iași', ST_GeomFromText('POINT(47.1585 27.6014)', 4326)),
(2, 'Cluj-Napoca', ST_GeomFromText('POINT(46.7712 23.6236)', 4326)),
(3, 'București', ST_GeomFromText('POINT(44.4268 26.1025)', 4326)),
(4, 'Timișoara', ST_GeomFromText('POINT(45.7489 21.2087)', 4326)),
(5, 'Constanța', ST_GeomFromText('POINT(44.1598 28.6348)', 4326));
Exemplul 1: Octeții unui punct
SELECT HEX(ST_AsBinary(Point(1, 2))) AS wkb,
LENGTH(ST_AsWKB(Point(1, 2))) AS octeti_wkb,
LENGTH(Point(1, 2)) AS octeti_intern;
Rezultat
+--------------------------------------------+------------+---------------+
| wkb | octeti_wkb | octeti_intern |
+--------------------------------------------+------------+---------------+
| 0101000000000000000000F03F0000000000000040 | 21 | 25 |
+--------------------------------------------+------------+---------------+
Exemplul 2: Dus și întors: aceeași ordine a axelor la scriere și la citire
SELECT nume,
ST_AsText(ST_GeomFromWKB(ST_AsWKB(loc), 4326)) AS refacut,
ST_AsText(ST_GeomFromWKB(ST_AsWKB(loc, 'axis-order=long-lat'), 4326)) AS ordine_amestecata
FROM orase
WHERE id = 1;
Rezultat
+-------+------------------------+------------------------+
| nume | refacut | ordine_amestecata |
+-------+------------------------+------------------------+
| Iași | POINT(47.1585 27.6014) | POINT(27.6014 47.1585) |
+-------+------------------------+------------------------+
Greșeli frecvente
- Crezi că WKB păstrează SRID-ul. Nu îl păstrează: când citești înapoi cu
ST_GeomFromWKB(), dă SRID-ul ca al doilea argument.
Comenzi înrudite
ST_GeomFromWKB(): Creează o geometrie de orice tip din reprezentarea ei binară WKB, opțional cu SRID.ST_AsText(): Transformă o geometrie în text WKT, ușor de citit: POINT(1 2), LINESTRING(…), POLYGON(…).HEX() și UNHEX(): HEX() transformă un număr sau un text în hexazecimal; UNHEX() face conversia inversă.