簡介
- WKT(Well-known text)是開放地理空間聯盟OGC(Open GIS Consortium )制定的一種文本標記語言,用於表示矢量幾何對象、空間參照系統及空間參照系統之間的轉換。
- WKB(well-known binary) 是WKT的二進制表示形式,解決了WKT表達方式冗余的問題,便於傳輸和在數據庫中存儲相同的信息
- GeoJSON 一種JSON格式的Feature信息輸出格式,它便於被JavaScript等腳本語言處理,OpenLayers等地理庫便是采用GeoJSON格式。此外,TopoJSON等更精簡的擴展格式
幾何對象
- WKT可以表示的對象包括以下幾種:
- Point, MultiPoint
- LineString, MultiLineString
- Polygon, MultiPolygon
- GeometryCollection
- 可以由多種Geometry組成,如:GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)
示例:
Type |
Shape |
WKT |
GeoJSON |
Point |
![]() |
POINT (30 10) |
{ "type": "Point", "coordinates": [30, 10] } |
LineString |
![]() |
LINESTRING (30 10, 10 30, 40 40) |
{ "type": "LineString", "coordinates": [ [30, 10], [10, 30], [40, 40] ] } |
Polygon |
![]() |
POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)) |
{ "type": "Polygon", "coordinates": [ [[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]] ] } |
![]() |
POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10), |
{ "type": "Polygon", "coordinates": [ [[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]] ] } |
|
MultiPoint |
![]() |
MULTIPOINT ((10 40), (40 30), (20 20), (30 10)) |
{ "type": "MultiPoint", "coordinates": [ [10, 40], [40, 30], [20, 20], [30, 10] ] } |
MULTIPOINT (10 40, 40 30, 20 20, 30 10) |
|||
MultiLineString |
![]() |
MULTILINESTRING ((10 10, 20 20, 10 40), |
{ "type": "MultiLineString", "coordinates": [ [[10, 10], [20, 20], [10, 40]], [[40, 40], [30, 30], [40, 20], [30, 10]] ] } |
MultiPolygon |
![]() |
MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), |
{ "type": "MultiPolygon", "coordinates": [ [ [[30, 20], [45, 40], [10, 40], [30, 20]] ], [ [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]] ] ] } |
![]() |
MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), |
{ "type": "MultiPolygon", "coordinates": [ [ [[40, 40], [20, 45], [45, 30], [40, 40]] ], [ [[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], [[30, 20], [20, 15], [20, 25], [30, 20]] ] ] } |
WKB格式
WKB采用二進制進行存儲,更方便於計算機處理,因此廣泛運用於數據的傳輸與存儲,以二位點Point(1 1)為例,
其WKB表達如下:
01 0100 0020 E6100000 000000000000F03F 000000000000F03F
- byteOrder
-
表示編碼方式,00為使用big-endian編碼(XDR),01為使用little-endian編碼(NDR)。他們的不同僅限於在內存中放置字節的順序,比如我們將0x1234abcd寫入到以0×0000開始的內存中,則結果如下表:
-
Address
big-endian
little-endian
0×0000
0x12
0xcd
0×0001
0x34
0xab
0×0002
0xab
0x34
0×0003
0xcd
0x12
-
- webTypd
- 第二到第九字節對矢量數據基本信息進行了定義
-
第二與第三個字節規定了矢量數據的類型,如例子中的0100代表Point;
-
第三與第四個字節規定了矢量數據的維數,如例子中的0020代表該點是二位的;
- 第五到第九個字節規定了矢量數據的空間參考SRID,如例子中的E6100000是4326的整數十六位進制表達
-
- 第二到第九字節對矢量數據基本信息進行了定義
- srid
- 第五到第九個字節規定了矢量數據的空間參考SRID,如例子中的E6100000是4326的整數十六位進制表達
- structPoint
- 第十個字節開始,每16個字節就代表一個坐標對,如例子中的000000000000F03F是浮點型1的十六進制表達