Ganos表面模型支持以文本的方式進行表達,方便閱讀理解,稱為Well-Known Text(簡稱WKT)。
幾何結構
Ganos表面模型中除了支持OGC Simple Feature模型外,還支持以下幾何結構的WKT的表達,對應幾何結構請參見表面網格模型數據模型。
INDEXSURFACE
IndexSurface WKT表述時由類型關鍵字INDEXSURFACE、頂點坐標關鍵字VERTEX以及索引關鍵字INDEX表示。VERTEX點坐標之間使用','
進行分隔,維度之間使用" "
進行分隔;面索引每個面使用"()"
進行包裹,索引間使用","
進行分隔,形式如下:
INDEXSURFACE(
VERTEX(x1 y1 z1,
x2 y2 z2,
...
),
INDEX(
(i1,i2,i3,...),
(j1,j2,j3,...),
....
)
)
示例如下:
INDEXSURFACE(
VERTEX(201755.424609375 241700.688720703 7025.00027160645,201755.424609375 241700.688720703 6774.9998336792,202255.431298828 241700.688720703 6774.9998336792,202255.431298828 241700.688720703 7025.00027160645,202255.431298828 243149.418896484 6774.9998336792,201755.424609375 243149.418896484 6774.9998336792,201755.424609375 243149.418896484 7025.00027160645,202255.431298828 243149.418896484 7025.00027160645),
INDEX((0,1,2),(2,3,0),(4,5,6),(6,7,4),(2,1,5),(5,4,2),(3,2,7),(4,7,2),(0,3,7),(7,6,0),(1,0,5),(6,5,0))
)
IndexSurface同樣支持Z和M維度信息:
INDEXSURFACE Z(
VERTEX(201755.424609375 241700.688720703 7025.00027160645,201755.424609375 241700.688720703 6774.9998336792, 202255.431298828 241700.688720703 6774.9998336792,202255.431298828 241700.688720703 7025.00027160645,202255.431298828 243149.418896484 6774.9998336792,201755.424609375 243149.418896484 6774.9998336792,201755.424609375 243149.418896484 7025.00027160645,202255.431298828 243149.418896484 7025.00027160645),
INDEX((0,1,2),(2,3,0),(4,5,6),(6,7,4),(2,1,5),(5,4,2),(3,2,7),(4,7,2),(0,3,7),(7,6,0),(1,0,5),(6,5,0)))
INDEXSURFACE M(
VERTEX(201755.424609375 241700.688720703 7025.00027160645,201755.424609375 241700.688720703 6774.9998336792, 202255.431298828 241700.688720703 6774.9998336792,202255.431298828 241700.688720703 7025.00027160645,202255.431298828 243149.418896484 6774.9998336792,201755.424609375 243149.418896484 6774.9998336792,201755.424609375 243149.418896484 7025.00027160645,202255.431298828 243149.418896484 7025.00027160645),
INDEX((0,1,2),(2,3,0),(4,5,6),(6,7,4),(2,1,5),(5,4,2),(3,2,7),(4,7,2),(0,3,7),(7,6,0),(1,0,5),(6,5,0)))
TRIANGLESTRIP
TRIANGLESTRIP WKT由TriangleStrip關鍵字構成,后續包含所有的坐標串信息,示例如下:
TRIANGLESTRIP(0 0 1 1,0 10 2 2,10 10 3 3,10 0 4 4)
同樣支持Z和M值:
TRIANGLESTRIP Z(0 0 1,0 10 2,10 10 3,10 0 4)
TRIANGLESTRIP M(0 0 1,0 10 2,10 10 3,10 0 4)
TRIANGLESTRIP ZM(0 0 1 1,0 10 2 2,10 10 3 3,10 0 4 4)
TRIANGLEFAN
TRIANGLEFAN WKT由TriangleStrip關鍵字構成,后續包含所有的坐標串信息,示例如下:
TRIANGLEFAN(0 0 1 1,0 10 2 2,10 10 3 3,10 0 4 4)
同樣支持Z和M值:
TRIANGLEFAN Z(0 0 1,0 10 2,10 10 3,10 0 4)
TRIANGLEFAN M(0 0 1,0 10 2,10 10 3,10 0 4)
TRIANGLEFAN ZM(0 0 1 1,0 10 2 2,10 10 3 3,10 0 4 4)
MESHGEOM
MeshGeom WKT由關鍵字MESHGEOM構成,包含PATCH、NORMAL和TEXCOORD三類關鍵字:
PATCH
存儲幾何類型以及坐標信息。可以有一個或多個子對象構成,每個子對象之間使用
","
進行分隔。允許的子對象幾何類型如下:Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon、IndexSurface、TriangleStrip、TriangleFan。
示例如下:
PATCH(POINT(0 0 1)) PATCH( POINT(0 0 1), TRIANGLESTRIP(0 0 1,0 10 2,10 10 3,10 0 4) )
NORMAL
包含法向量信息,類型為三維點坐標,坐標串間使用
","
進行分隔;使用"()"
對每一個子對象進行包裹;坐標點數必須與Patch子對象中頂點個數一致。示例如下:
NORMAL( (0 0 0, 1 1 1,2 2 2, 3 3 3) ) NORMAL( (0 0 0, 1 1 1,2 2 2, 3 3 3), (1 2 1, 3 3 4) )
TEXCOORD
包含紋理坐標信息,類型為二維點坐標,坐標串間使用
","
進行分隔;使用"()"
對每一個子對象進行包裹;坐標點數必須與Patch對應子對象頂點個數一致。示例如下:
TEXCOORD( (0 0, 1 1, 2 2, 3 3) ) TEXCOORD( (0 0, 1 1, 2 2, 3 3), (1 1, 0 0, 2 2, 3 3) )
Meshgeom示例
以下示例展示了Meshgeom的WKT的表示方法:
2個patch
MESHGEOM( PATCH( POINT(0 0 1), INDEXSURFACE(VERTEX(0 0 1,0 10 2,10 10 3,10 0 4), INDEX((0,1,2),(1,2,3))) ) )
帶有NORMAL和TEXCOORD
MESHGEOM( PATCH( TRIANGLESTRIP(0 0 1,0 10 2,10 10 3,10 0 4) ), NORMAL( (0 0 0, 1 1 1,2 2 2, 3 3 3) ), TEXCOORD( (0 0, 1 1, 2 2, 3 3) ) )
Meshgeom同樣支持Z和M維度,要求Meshgeom中所有patch的維度必須一致。
MESHGEOM( PATCH( POINT M(0 0 1), INDEXSURFACE M( VERTEX(0 0 1,0 10 2,10 10 3,10 0 4), INDEX((0,1,2),(1,2,3)) ) ) )
引用對象
Meshgeom支持對其他meshgeom對象的引用,包含schema, table,column和key四個關鍵字,其中后三個為必須的內容,字符串使用"@"
進行包裹,具體格式如下:
MESHGEOM(
schema(@schema_name@),
table(@table_name@),
column(@column_name@),
key(@where_clause@)
)
示例如下:
MESHGEOM(
schema(@public@),
table(@mytable@),
column(@mycolumn@),
key(@id=1@)
)
SFMESH
sfmesh使用JSON作為WKT的表示方法,包含以下節點信息:
version:sfmesh的版本,目前為1。
srid:空間參考ID。
lod:LOD的層級信息。
root:Node的根目錄ID,默認為0。
meshgeoms:所有引用到的meshgeom對象的數組,可以為引用對象,采用meshgeom的WKT表示方法。
meshes:所有基于Node引用到的sfmesh對象的數組,可以為引用對象,采用sfmesh的WKT表示方法。
textures:所用的texture的對象數組。
materials:所有材質的對象數組。
primitives:所有的元組信息的數組,元組包含兩種:meshgeom和mesh。 其中meshgeom可以帶材質信息,通過material關鍵字進行綁定。
nodes:通過Node可以定義樹狀結構,進行組織構建。可以包含以下屬性:
primitive:對應的primitive的信息。
children:子對象數組。
id:對象關聯的ID信息。
matrix:變換矩陣,采用以下方式進行描述。
/ a b c xoff \ | d e f yoff | | g h i zoff | \ 0 0 0 1 /
Sfmesh示例
以下為一個典型的JSON表示sfmesh對象的示例:
{
"version": 1,
"root": 0,
"meshgeoms": ["MESHGEOM(PATCH(TRIANGLESTRIP(0 0,0 10,10 10,10 0)))"],
"meshes": [
"MESH(schema(@public@), table(@t_mesh@), column(@the_mesh@), key(@num=1@))"
],
"primitives": [
{
"mesh": 0
},
{
"meshgeom": 0
}
],
"nodes": [
{
"children": [1, 2],
"id": 100
},
{
"primitive": 0
},
{
"primitive": 1,
"matrix": [2, 0, 0, 1, 0, 2, 0, 3, 0, 0, 2, 4, 0, 0, 0, 1],
"id": 10
}
],
"materials": [
{
"type": "db",
"attributes": {
"schema": "public",
"table": "t_material",
"column": "the_material",
"key": "num=1"
}
}
],
"textures": [
{
"compressionType": "None",
"format": "JPEG",
"wrap": "Wrap",
"type": "Url",
"depth": 3,
"width": 256,
"height": 256,
"size": 15,
"data": "http://aaa.png"
}
]
}
引用對象
sfmesh支持對其他sfmesh對象的引用,包含schema, table,column和key四個關鍵字,其中后三個為必須的內容,字符串使用"@"
進行包裹,格式如下:
MESH(
schema(@schema_name@),
table(@table_name@),
column(@column_name@),
key(@where_clause@)
)
示例如下:
MESH(
schema(@public@),
table(@mytable@),
column(@mycolumn@),
key(@id=1@)
)
EWKT
EWKT在WKT的基礎上增加了SRID和SOLID信息,每一段使用;
進行分隔:
SRID表示空間參考信息,具體請參見空間參考。
SOLID表示內部是否填充。取值如下:
true:表示內部填充。
false(默認):表示內部不填充。
示例如下:
SRID=4326;MESHGEOM(PATCH(INDEXSURFACE M(VERTEX(0 0 1,0 10 2,10 10 3,10 04), INDEX((0,1,2),(1,2,3)))))
SRID=4326;SOLID=true;MESHGEOM(PATCH(INDEXSURFACE M(VERTEX(0 0 1,0 10 2,1010 3,10 0 4), INDEX((0,1,2),(1,2,3)))))