Comprendre WKT et WKB |
|
Février 2011 |
SpatiaLite supporte les données géométrique (Geometry
data) conformément au standard OGC-SFS (Open Geospatial
Consortium - Simple Feature
SQL). |
Sub-Class |
Exemple |
POINT |
|
LINESTRING |
|
POLYGON |
|
MULTIPOINT |
|
MULTILINESTRING |
|
MULTIPOLYGON |
|
GEOMETRYCOLLECTION |
Collection de géométries (toutes les combinaisons possibles
des sous-classes précédentes.
C'est pourquoi elle est très peu répandue dans le monde des SIG. Evitons donc de l'utiliser... |
les notations WKT et WKT Geometry est un type de donnée complexe: c'est pourquoi OGC-SFS a défini deux notations standards différentes pour représenter les valeurs géométriques:
|
Dimension: XY (2D)
le plus commun ...
Geometry Type |
WKT exemple |
POINT |
POINT(123.45 543.21) |
LINESTRING |
LINESTRING(100.0 200.0,
201.5 102.5, 1234.56 123.89)
|
POLYGON |
POLYGON((101.23
171.82, 201.32 101.5, 215.7 201.953, 101.23 171.82))
POLYGON((10 10, 20 10,
20 20, 10 20, 10 10), |
MULTIPOINT |
MULTIPOINT(1234.56
6543.21, 1 2, 3 4, 65.21 124.78)
|
MULTILINESTRING |
MULTILINESTRING((1 2, 3
4), (5 6, 7 8, 9 10), (11 12, 13 14))
|
MULTIPOLYGON |
MULTIPOLYGON(((0 0,10
20,30 40,0 0),(1 1,2 2,3 3,1 1)), |
GEOMETRYCOLLECTION |
GEOMETRYCOLLECTION(POINT(1
1), |
XYZ (3D)
Geometry Type |
WKT example |
POINT |
POINTZ(13.21 47.21 0.21) |
LINESTRING |
LINESTRINGZ(15.21 57.58 0.31, 15.81 57.12 0.33) |
POLYGON |
... |
MULTIPOINT |
MULTIPOINTZ(15.21 57.58 0.31, 15.81 57.12 0.33) |
MULTILINESTRING |
... |
MULTIPOLYGON |
... |
GEOMETRYCOLLECTION |
GEOMETRYCOLLECTIONZ(POINTZ(13.21
47.21 0.21), |
Dimension: XYM (2D +
Mesure)
Attention: ceci n'est pas de la 3D.
M
signifie mesure , et non une dimension géométrique.
Geometry Type |
WKT example |
POINT |
POINTM(13.21 47.21 1000.0) |
LINESTRING |
LINESTRINGM(15.21 57.58 1000.0, 15.81 57.12 1100.0) |
POLYGON |
... |
MULTIPOINT |
MULTIPOINTM(15.21 57.58 1000.0, 15.81 57.12 1100.0) |
MULTILINESTRING |
... |
MULTIPOLYGON |
... |
GEOMETRYCOLLECTION |
GEOMETRYCOLLECTIONM(POINTM(13.21
47.21 1000.0), |
XYZM (3D + Mesure)
Geometry Type |
WKT example |
POINT |
POINTZM(13.21 47.21 0.21 1000.0) |
LINESTRING |
LINESTRINGZM(15.21 57.58 0.31 1000.0, 15.81 57.12 0.33 1100.0) |
POLYGON |
... |
MULTIPOINT |
MULTIPOINTZM(15.21 57.58 0.31 1000.0, 15.81 57.12 0.33 1100.0) |
MULTILINESTRING |
... |
MULTIPOLYGON |
... |
GEOMETRYCOLLECTION |
GEOMETRYCOLLECTIONZM(POINTZM(13.21
47.21 0.21 1000.0), |
Plusieurs fonctions spatiales utilisent WKT
et WKB; |
SELECT Hex(ST_GeomFromText('POINT(1.2345 2.3456)')); |
0001FFFFFFFF8D976E1283C0F33F16FBCBEEC9C302408D976E1283C0F33F16FBCBEEC9C302407C010000008D976E1283C0F33F16FBCBEEC9C30240FE |
|
SELECT ST_AsText(x'0001FFFFFFFF8D976E1283C0F33F16FBCBEEC9C302408D976E1283C0F33F16FBCBEEC9C302407C010000008D976E1283C0F33F16FBCBEEC9C30240FE'); |
POINT(1.2345 2.3456) |
|
SELECT Hex(ST_AsBinary(x'0001FFFFFFFF8D976E1283C0F33F16FBCBEEC9C302408D976E1283C0F33F16FBCBEEC9C302407C010000008D976E1283C0F33F16FBCBEEC9C30240FE')); |
01010000008D976E1283C0F33F16FBCBEEC9C30240 |
|
SELECT Hex(ST_AsBinary(ST_GeomFromText('POINT(1.2345 2.3456)'))); |
01010000008D976E1283C0F33F16FBCBEEC9C30240 |
|
SELECT ST_AsText(ST_GeomFromWKB(x'01010000008D976E1283C0F33F16FBCBEEC9C30240')); |
POINT(1.2345 2.3456) |
Attention: les deux notations WKT et WKB
permettent un échange standard des données (import/export);
De
toute façon, le format de stockage utilisé par SpatiaLite est
différent: BLOB Geometry.
Cependant, vous ne serez jamais
dérangés par ce format interne: tout est géré de
façon transparente.
Vous devrez simplement utiliser les fonctions
permettant de traiter WKT
ou WKB.
La fonction spatiale ST_GeomFromText() converti toute expression WKT valide en BLOB Geometry.
ST_GeomFromWKB()converti toute expression WKB valide en BLOB Geometry.
ST_AsText() converti une valeur BLOB Geometry en l'expression WKT correspondante.
ST_AsBinary() converti une valeur BLOB Geometry en l'expression WKB correspondante.
SELECT ST_GeometryType(ST_GeomFromText('POINT(1.2345 2.3456)')); |
POINT |
|
SELECT ST_GeometryType(ST_GeomFromText('POINTZ(1.2345 2.3456 10)')); |
POINT Z |
|
SELECT ST_GeometryType(ST_GeomFromText('POINT ZM(1.2345 2.3456 10 20)')); |
POINT ZM |
ST_GeometryType() retournera le type de géométrie d'une valeur BLOB Geometry.
Attention: quand vous utilisez des données non-2D, déclarer 'POINTZ' or 'POINT Z' est exactement le même. SpatiaLite identifie de la même manière les deux notations.
SELECT ST_Srid(ST_GeomFromText('POINT(1.2345 2.3456)')); |
-1 |
|
SELECT ST_Srid(ST_GeomFromText('POINT(1.2345 2.3456)', 4326)); |
4326 |
ST_Srid() retourne le SRID (EPSG) de la valeur BLOB Geometry.
Attention: ST_GeomFromText()
et ST_GeomFromWKB()
acceptent un argument optionnel SRID
.
Si le SRID
n'est pas spécifié (mauvaise pratique), sa valeur par
défaut est -1.
Erreurs fréquentes "J'ai déclaré une colonne géométrie de type
MULTIPOINT; |
SELECT ST_GeometryType(ST_GeomFromText('MULTIPOINT(1.2345 2.3456)')); |
MULTIPOINT |
|
SELECT ST_AsText(CastToMultiLineString(ST_GeomFromText('LINESTRING(1.2345 2.3456, 12.3456 23.4567)'))); |
MULTILINESTRING((1.2345 2.3456, 12.3456 23.4567)) |
|
SELECT ST_AsText(CastToXYZM(ST_GeomFromText('POINT(1.2345 2.3456)'))); |
POINT ZM(1.2345 2.3456 0 0) |
|
SELECT ST_AsText(CastToXY(ST_GeomFromText('POINT ZM(1.2345 2.3456 10 20)'))); |
POINT(1.2345 2.3456) |
|
Author: Alessandro Furieri a.furieri@lqt.it |
This work is licensed under the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. |
|
|
|
Permission is granted to copy, distribute and/or modify this
document under the terms of the |