WKT(well-known text)是一種文本標記語言,該格式由開放地理空間聯盟(OGC)制定,用於表示矢量數據中的幾何對象,在數據傳輸與數據庫存儲時,常
用到它的二進制形式,即WKB(well-known binary)。WKT與WKB在GIS中的重要作用在於,他們能利用文本簡潔明了的表達矢量空間要素的幾何信息,使得幾
何信息能以字段的形式存儲於數據庫中。
WKT相比WKB更方便人們理解,具有很高的可讀性,下圖以點線面3種基礎矢量數據類型為例,簡單說明點構線、線構面的構建關系。WKT中所有的數據類
型都以點數據為基礎,點坐標的XY值用空格隔開,坐標之間用逗號隔開:
目前,PostGIS中無論是WKT還是WKB,所支持的矢量數據類型都是相同的7種,除去以上3種簡單要素類型外,還有如下4種復合類型:
• MULTIPOINT
• MULTILINESTRING
• MULTIPOLYGON
• GEOMETRYCOLLECTION
多點多線與多面的性質相信大家都能理解,GEOMETRYCOLLECTION其實就是多種簡單要素類型的集合,比如GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4)
說明這個幾何集合對象中包含了點(2,3)與線(2 3,3 4),打破了ArcGIS等軟件中的同記錄同類型的限制。
WKB采用二進制進行存儲,更方便於計算機處理,因此廣泛運用於數據的傳輸與存儲,以二位點Point(1 1)為例,其WKB表達如下:
01 0100 0020 E6100000 000000000000F03F 000000000000F03F
第一個字節表示編碼方式,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 |
第二到第九字節對矢量數據基本信息進行了定義。第二與第三個字節規定了矢量數據的類型,如例子中的0100代表Point;第三與第四個字節規定了矢量數據的維數,如例子中的0020代表該點是二位的;第五到第九個字節規定了矢量數據的空間參考SRID,如例子中的E6100000是4326的整數十六位進制表達;第十個字節開始,每16個字節就代表一個坐標對,如例子中的000000000000F03F是浮點型1的十六進制表達。