ST_AsX3D — 返回X3DXML节点元素格式的几何图形:ISO-IEC-19776-1.2-X3DEncoding-xml
text ST_AsX3D(
geometry g1, integer maxdecimaldigits=15, integer options=0)
;
将几何作为X3D XML格式的节点元素返回 http://www.web3d.org/standards/number/19776-1 。如果 maxdecimaldigits
(精度)未指定,则默认为15。
![]() | |
将PostGIS几何图形转换为X3D有多种选择,因为X3D几何图形类型不直接映射到PostGIS几何图形类型和一些较新的X3D类型,这些类型可能是我们避免的更好的映射,因为大多数渲染工具目前不支持它们。这些是我们已经确定的映射。如果您对我们的想法或方法有任何想法,或者我们可以让人们指明他们喜欢的映射,请随时发布错误罚单。 下面是我们当前如何将PostGIS 2D/3D类型映射到X3D类型 |
‘Options’参数是一个位字段。对于PostGIS 2.2+,这用于指示是否使用X3D地理坐标地理空间节点来表示坐标,以及是否翻转x/y轴。默认情况下, ST_AsX3D
数据库形式的输出(Long,Lat或X,Y),但X3D默认的经度/经度,y/x可能是首选。
0:数据库顺序中的X/Y(例如,LONG/LAT=X,Y是标准数据库顺序)、默认值和非空间坐标(只是常规的旧坐标标记)。
1:翻转X和Y。如果与地理坐标选项开关一起使用,则输出将是默认的“Latitude_First”,坐标也将被翻转。
2:以地理空间地理坐标形式输出坐标。如果几何图形不在WGS 84 Long Late(SRID:4326)中,则此选项将引发错误。这是目前唯一受支持的地理坐标类型。 请参考指定空间参考系的X3D等级库。 。默认输出将为 GeoCoordinate geoSystem='"GD" "WE" "longitude_first"'
。如果您更喜欢X3D缺省值 GeoCoordinate geoSystem='"GD" "WE" "latitude_first"'
使用 (2 + 1)
= 3
邮政编码类型 | 2D X3D类型 | 3D X3D类型 |
---|---|---|
LINESTRING | 尚未实施-将为PolyLine2D | LineSet |
MULTILINESTRING | 尚未实施-将为PolyLine2D | IndexedLineSet |
MULTIPOINT | 多点二维 | PointSet |
POINT | 输出以空格分隔的坐标 | 输出以空格分隔的坐标 |
(多)多边形、多面体曲面 | 无效的X3D标记 | IndexedFaceSet(内环当前作为另一个面输出) |
TIN | TriangleSet2D(尚未实现) | IndexedTriangleSet |
![]() | |
二维几何图形支持尚未完成。内环当前仅绘制为单独的多边形。我们正在努力解决这些问题。 |
在3D空间中发生了许多进步,特别是 X3D与HTML5的集成
还有一个很好的开源X3D查看器,可以用来查看渲染的几何图形。免费WRL http://freewrl.sourceforge.net/ 可用于Mac、Linux和Windows的二进制文件。使用打包的FreeWRL_Launcher查看几何图形。
还可以结账 PostGIS极简主义X3D查看器 利用此函数并 X3dDom html/js开源工具包 。
可用性:2.0.0:ISO-IEC-19776-1.2-X3D编码-可扩展标记语言
增强:2.2.0:支持地理坐标和轴(x/y,经度/经度)翻转。请查看选项以了解详细信息。
This function supports 3d and will not drop the z-index.
This function supports Polyhedral surfaces.
This function supports Triangles and Triangulated Irregular Network Surfaces (TIN).
SELECT '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd"> <X3D> <Scene> <Transform> <Shape> <Appearance> <Material emissiveColor=''0 0 1''/> </Appearance> ' || ST_AsX3D( ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) || '</Shape> </Transform> </Scene> </X3D>' As x3ddoc; x3ddoc -------- <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd"> <X3D> <Scene> <Transform> <Shape> <Appearance> <Material emissiveColor='0 0 1'/> </Appearance> <IndexedFaceSet coordIndex='0 1 2 3 -1 4 5 6 7 -1 8 9 10 11 -1 12 13 14 15 -1 16 17 18 19 -1 20 21 22 23'> <Coordinate point='0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1' /> </IndexedFaceSet> </Shape> </Transform> </Scene> </X3D>
将此查询的输出复制并粘贴到 X3D场景查看器 然后单击显示
SELECT string_agg('<Shape>' || ST_AsX3D(ST_Extrude(geom, 0,0, i*0.5)) || '<Appearance> <Material diffuseColor="' || (0.01*i)::text || ' 0.8 0.2" specularColor="' || (0.05*i)::text || ' 0 0.5"/> </Appearance> </Shape>', '') FROM ST_Subdivide(ST_Letters('PostGIS'),20) WITH ORDINALITY AS f(geom,i);
由PostGIS细分和拉伸形成的建筑物
SELECT ST_AsX3D( ST_Translate( ST_Force_3d( ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0, 3) ,6) As x3dfrag; x3dfrag -------- <IndexedFaceSet coordIndex="0 1 2 3 4 5 6 7"> <Coordinate point="15 10 3 13.535534 6.464466 3 10 5 3 6.464466 6.464466 3 5 10 3 6.464466 13.535534 3 10 15 3 13.535534 13.535534 3 " /> </IndexedFaceSet>
SELECT ST_AsX3D(ST_GeomFromEWKT('TIN ((( 0 0 0, 0 0 1, 0 1 0, 0 0 0 )), (( 0 0 0, 0 1 0, 1 1 0, 0 0 0 )) )')) As x3dfrag; x3dfrag -------- <IndexedTriangleSet index='0 1 2 3 4 5'><Coordinate point='0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0'/></IndexedTriangleSet>
SELECT ST_AsX3D( ST_GeomFromEWKT('MULTILINESTRING((20 0 10,16 -12 10,0 -16 10,-12 -12 10,-20 0 10,-12 16 10,0 24 10,16 16 10,20 0 10), (12 0 10,8 8 10,0 12 10,-8 8 10,-8 0 10,-8 -4 10,0 -8 10,8 -4 10,12 0 10))') ) As x3dfrag; x3dfrag -------- <IndexedLineSet coordIndex='0 1 2 3 4 5 6 7 0 -1 8 9 10 11 12 13 14 15 8'> <Coordinate point='20 0 10 16 -12 10 0 -16 10 -12 -12 10 -20 0 10 -12 16 10 0 24 10 16 16 10 12 0 10 8 8 10 0 12 10 -8 8 10 -8 0 10 -8 -4 10 0 -8 10 8 -4 10 ' /> </IndexedLineSet>