├── .gitignore ├── LICENSE ├── README.md ├── doc ├── 0.0-前言.md ├── 0.1-引言.md ├── 1.0-范围.md ├── 10.0-可视化参数模块.md ├── 11.0-元数据模块.md ├── 12.0-基础数据结构模块.md ├── 2.0-规范性引用文件.md ├── 3.0-术语和定义.md ├── 4.0-缩略语和符号.md ├── 5.0-Geo3DML构成.md ├── 6.0-三维数据包模块.md ├── 7.0-地质要素模块.md ├── 8.0-几何数据模块.md ├── 9.0-属性场数据模块.md ├── README.md ├── pictures │ ├── 10-21.png │ ├── 10-22.png │ ├── 10-23.png │ ├── 10-24.png │ ├── 10-25.png │ ├── 10-26.png │ ├── 10-27.png │ ├── 10-28.png │ ├── 10-29.png │ ├── 11-30.png │ ├── 11-31.png │ ├── 11-32.png │ ├── 11-33.png │ ├── 11-34.png │ ├── 4-1.png │ ├── 4-2.png │ ├── 5-3.png │ ├── 5-4.png │ ├── 6-10.png │ ├── 6-5.png │ ├── 6-6.png │ ├── 6-7.png │ ├── 6-8.png │ ├── 6-9.png │ ├── 7-11.png │ ├── 7-12.png │ ├── 8-13.png │ ├── 8-14.png │ ├── 8-15.png │ ├── 8-16.png │ ├── 8-17.png │ ├── 8-18.png │ ├── 8-19.png │ └── 9-20.png ├── 参考文献.md ├── 附录A-Geo3DML-XML-Schema.md ├── 附录B-Geo3DML示例数据.md └── 附录C-Base64编码解码参考实现.md ├── examples └── data │ ├── README.md │ ├── example.png │ ├── map_drill.xml │ ├── map_section.xml │ ├── map_stratum.xml │ ├── model_Volume_1.xml │ ├── model_Volume_2.xml │ ├── model_drill.xml │ ├── model_section.xml │ ├── project.xml │ └── 岩石.jpg └── xsd ├── Geo3DML.xsd ├── Geo3DMap.xsd ├── Geo3DModel.xsd ├── Geo3DStyle.xsd ├── Geo3DStyleLib.xsd ├── GeoBasicTypes.xsd ├── GeoFeature.xsd ├── GeoFeatureClass.xsd ├── GeoGeometry.xsd ├── GeoMetaData.xsd ├── GeoProperty.xsd └── base64.h /.gitignore: -------------------------------------------------------------------------------- 1 | /* 2 | !.gitignore 3 | !doc/ 4 | !examples/ 5 | !xsd/ 6 | !LICENSE 7 | !README.md -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Wu Zixing 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Geo3DML 2 | === 3 | 4 | *2019-01-19* 5 | 6 | Geo3DML: Three-Dimensional Geological Model Markup Language,三维地质模型数据交换格式。 7 | 8 | Geo3DML(v1.0)是中国地质调查局地质调查技术标准(DD2015-06)。 9 | 10 | [Release Geo3DML v1.0.0](https://github.com/WuZixing/Geo3DML/releases/tag/v1.0.0)与标准原稿内容一致。分支*v1*包含对标准原稿内容的勘误。 11 | 12 | 分支*master*是结合工作需要,对标准原稿进行扩充和更新,**更新的内容不一定会被标准接受**。为与标准原稿区分,*master*分支的当前版本号约定为1.x。 13 | 14 | 主要更新内容 15 | === 16 | 17 | 1. 新增几何数据结构:`geo3dml:GeoSGrid`; 18 | 19 | 2. 新增几何数据结构:`geo3dml:GeoUniformGrid`; 20 | 21 | 3. 元素`GeoFeature`下新增子元素`Geometries`,作为`Geometry`的父标签,并且允许元素`Geometry`出现多次; 22 | 23 | 4. 元素`Geometry`新增属性`Name`、`LOD`,分别记录几何对象的名字和LOD(Level Of Detail)层级; 24 | 25 | 5. 元素`Geo3DModel`新增属性`ID`。 26 | -------------------------------------------------------------------------------- /doc/0.0-前言.md: -------------------------------------------------------------------------------- 1 | # 前言 2 | 3 | 本标准按GB/T1.1-2009《标准化工作导则 第1部分:标准的结构和编写》的规定编写。 4 | 5 | 本标准由中国地质调查局提出。 6 | 7 | 本标准由中国地质调查局归口。 8 | 9 | 本标准起草单位:中国地质调查局发展研究中心、中国地质科学院水文地质环境地质研究所、中国矿业大学(北京)、中国地质大学(武汉)、北京大学、北京航空航天大学、中国地质科学院矿产资源研究所等。 10 | 11 | 本标准主要起草人:屈红刚、王占刚、吴自兴、花卫华、李魁星、鲍晓明、何珍文、王斌、朱吉祥、张婷婷、王想红、孙莉等。 12 | 13 | 本标准为首次发布。 14 | -------------------------------------------------------------------------------- /doc/0.1-引言.md: -------------------------------------------------------------------------------- 1 | # 引言 2 | 3 | 三维地质建模技术方法和软件工具尚无统一的规范,不同地质建模软件生成的三维地质模型数据的存储格式也存在较大差异,使得不同软件建立的模型无法在统一的场景中集成显示和分析应用,建模成果数据无法在不同部门间实现相互共享和交换,并造成模型数据汇交和管理部门需要投入较大成本来维护不同格式的数据。随着三维地质建模在地质领域的深入应用,模型数据的生产者和使用者越来越认识到建立一种通用数据交换标准的必要性。为此,结合我国地质调查以及地学数据管理的实际,中国地质调查局组织有关单位制定了此三维地质模型数据交换格式——Geo3DML(Three-Dimensional Geological Model Markup Language)。 -------------------------------------------------------------------------------- /doc/1.0-范围.md: -------------------------------------------------------------------------------- 1 | # 1 范围 2 | 3 | 本标准规定了三维地质模型数据交换的数据组织层次结构与模型中空间几何数据、属性描述数据、三维可视化数据的存储格式。 4 | 5 | 本标准支持以三维点、线、面、体、体元、注记等对象表达的、适用于不同地质领域(如基础地质、水文地质、工程地质、环境地质、矿产与能源等)的三维地质模型、钻孔、地质图、剖面图和等值线图等多种类型数据的交换。 6 | -------------------------------------------------------------------------------- /doc/10.0-可视化参数模块.md: -------------------------------------------------------------------------------- 1 | # 10 可视化参数模块 2 | 3 | ## 10.1 概述 4 | 5 | Geo3DML以SE规范为核心,参考SLD、CityGML、X3D等规范定义了3D可视化参数编码规则。[图21](#pic-21)描述了可视化参数模块的框架结构。 6 | 7 | 图21 可视化参数的框架结构 8 | 9 | ![图21 可视化参数的框架结构](./pictures/10-21.png) 10 | 11 | Geo3DML参考SLD规范的`sld:UserStyle`结构定义了`geo3dml:Geo3DStyle`作为可视化参数数据结构。`geo3dml:Geo3DStyle`对象可以方便地转换为`sld:UserStyle`结构。`geo3dml:Geo3DStyle`结构中的核心内容来自SE规范,包括`se:FeatureTypeStyle`、`se:CoverageStyle`、`se:Rule`、`se:Symboizer`,以及`se:ElseFilter`等,而`ogc:Filter`则来自OGC的Filter Encoding规范。其中,`se:FeatureTypeStyle`用于定义普通要素的可视化参数,而`se:CoverageStyle`用于定义空间覆盖数据的可视化参数。`ogc:Filter`与`se:ElseFilter`用于设置基于要素属性的可视化参数匹配条件。而`se:Symbolizer`及其子类型定义了针对不同类型几何对象的可视化参数格式。此外,`geo3dml:GeoSceneStyle`是针对场景的全局可视化参数,如场景的背景颜色、全局光照等。 12 | 13 | 表21 geo3dml:Geo3DStyle子元素列表(省略名字空间) 14 | 15 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 16 | |---|---|---|---|---|---|---| 17 | |16|Geo3DStyle|Geo3DStyle|3D可视化参数根元素。||类|| 18 | |16.1||se:FeatureTypeStyle|普通要素数据可视化参数。|0..1|类|引用se:FeatureTypeStyle实例。| 19 | |16.2||se:CoverageStyle|覆盖要素数据的可视化参数。|0..1|类|引用se:CoverageStyle实例。| 20 | 21 | [表21](#tbl-21)中,子元素`se:FeatureTypeStyle`与子元素`se:CoverageStyle`是二选一的互斥关系,即元素`Geo3DStyle`中要么包含子元素`se:FeatureTypeStyle`,要么包含子元素`se:CoverageStyle`。 22 | 23 | 为支持3D可视化,Geo3DML对SE规范进行扩展,定义了点(`geo3dml:GeoPointSymbolizer`)、线(`geo3dml:GeoLineSymbolizer`)和曲面(`geo3dml:GeoSurfaceSymbolizer`)的可视化参数结构。扩展的内容主要是在SE规范相应结构的基础上增加3D可视化的光照、材质与纹理参数。针对属性场数据(见“9 属性场数据模块”)定义了专门的可视化参数结构:`geo3dml:GeoDiscreteCoverageSymbolizer`。 24 | 25 | 设置地质要素的可视化参数(包括材质颜色与填充符号)时,可依据GB/T 958-1989、GB/T 6390-1986、DZ/T 0179-1997等标准执行。 26 | 27 | ## 10.2 材质 28 | 29 | 材质参数(`geo3dml:Material`)的结构见[图22](#pic-22)及[表22](#tbl-22)。 30 | 31 | 图22 geo3dml:Material的结构 32 | 33 | ![图22 geo3dml:Material的结构](./pictures/10-22.png) 34 | 35 | 表22 geo3dml:Material子元素列表(省略名字空间) 36 | 37 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 38 | |---|---|---|---|---|---|---| 39 | |17|Material|Material|3D可视化材质。||类|| 40 | |17.1||AmbientIntensity|环境光强度。指漫反射光的最小强度。|0..1|浮点数|[0,1]。默认值为0.2。| 41 | |17.2||DiffuseColor|漫反射光的颜色。如果不考虑光照,则漫反射光就是对象的颜色。|0..1|类|geo3dml:Color实例(见“12 基础数据结构模块”)。默认值为(0.8,0.8,0.8)。| 42 | |17.3||EmissiveColor|辐射光的颜色,即对象自身发光的颜色。|0..1|类|geo3dml:Color实例。默认值为(0.0,0.0,0.0)。| 43 | |17.4||Shininess|聚光度。|0..1|浮点数|[0,1]。默认值为0.2。| 44 | |17.5||SpecularColor|镜面反射光的颜色。|0..1|类|geo3dml:Color实例。默认值为(1.0,1.0,1.0)。| 45 | |17.6||Transparency|透明度:0表示完全不透明;1表示完全透明。|0..1|浮点数|[0,1]。默认值为0.0。| 46 | 47 | ## 10.3 纹理 48 | 49 | 纹理参数包括三种类型:`geo3dml:AbstractTexture`、`geo3dml:GeoReferenceTexture`,以及`geo3dml:ParameterizedTexture`。纹理参数的结构见[图23](#pic-23)。 50 | 51 | 图23 纹理参数结构示意图 52 | 53 | ![图23 纹理参数结构示意图](./pictures/10-23.png) 54 | 55 | `geo3dml:AbstractTexture`是纹理参数的抽象基类型,其定义的内容包括纹理图片的来源(ImageURI)、图片的类型(MimeType),以及贴图模式(WrapMode)。其中,贴图模式可为如下几种方式之一:单幅填充(None,默认值)、重复(Wrap)、镜像(Mirror)、按纹理图片的边界扩展(Clamp),或按定义的边界颜色扩展(Border)。当选择Border模式时,需设置此模式下所使用的边界颜色(BorderColor)。 56 | 57 | `geo3dml:GeoReferencedTexture`允许使用地理坐标参数作为纹理坐标映射的参数。其子元素`ReferencePoint`记录坐标映射原点,子元素`Orientation`记录纹理坐标的变换矩阵。 58 | 59 | `geo3dml:ParameterizedTexture`允许显示地指定空间数据顶点的纹理坐标或其纹理坐标计算参数。其`TexCoordList`成员用于按序列出各顶点的纹理坐标,或者也可利用`TexCoordGen`成员保存的矩阵参数计算各顶点的纹理坐标。 60 | 61 | 表23 geo3dml:AbstractTexture子元素列表(省略名字空间) 62 | 63 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 64 | |---|---|---|---|---|---|---| 65 | |18|AbstractTexture|AbstractTexture|纹理参数。||类|| 66 | |18.1||ImageURI|纹理图片的路径。|1|字符串|文件路径。| 67 | |18.2||MimeType|纹理图片的类型。|1|字符串|纹理文件的后缀。| 68 | |18.3||WrapMode|纹理的贴图模式。|1|字符串|枚举值:None(单幅填充);Wrap(重复);Mirror(镜像);Clamp(按纹理图片的边界扩展);Border(按定义的边界颜色扩展)。默认值为:None。| 69 | |18.4||BorderColor|按边界颜色填充纹理时所使用的边界颜色:RGBA。|0..1|类|geo3dml:ColorPlusAlpha实例(见“12 基础数据结构模块”)。| 70 | 71 | 表24 geo3dml:GeoReferencedTexture子元素列表(省略名字空间) 72 | 73 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 74 | |---|---|---|---|---|---|---| 75 | |19|GeoReferencedTexture|GeoReferencedTexture|纹理参数。||类|| 76 | |19.1||ReferencePoint|坐标映射原点。|0..1|类|引用gml:Point实例。| 77 | |19.2||Orientation|坐标变换矩阵。|0..1|类|引用geo3dml:TransformationMatrix2x2实例(见“12 基础数据结构模块”)。| 78 | 79 | 表25 geo3dml:ParameterizedTexture子元素列表(省略名字空间) 80 | 81 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 82 | |---|---|---|---|---|---|---| 83 | |20|ParameterizedTexture|ParameterizedTexture|纹理参数。||类|| 84 | |20.1||TexCoordList|纹理坐标数组:依序列出顶点所对应的纹理坐标。|0..1|类|gml:DirectPositionList实例。| 85 | |20.2||TexCoordGen|纹理坐标计算矩阵。|0..1|类|geo3dml:TransformationMatrix3x4实例(见“12 基础数据结构模块”)。| 86 | 87 | [表25](#tbl-25)中,子元素20.1部分的内容与20.2部分的内容是二选一的互斥关系,即元素`ParameterizedTexture`要么包含子元素`TexCoordList`,要么包含子元素`TexCoordGen`。 88 | 89 | ## 10.4 点参数 90 | 91 | 点类型对象的3D可视化参数结构(`geo3dml:GeoPointSymbolizer`)继承自`se:PointSymbolizer`,并且允许设置材质参数(见“10.2 材质”),其结构见[图24](#pic-24)及[表26](#tbl-26)。 92 | 93 | 图24 geo3dml:GeoPointSymbolizer的结构 94 | 95 | ![图24 geo3dml:GeoPointSymbolizer的结构](./pictures/10-24.png) 96 | 97 | 表26 geo3dml:GeoPointSymbolizer子元素列表(省略名字空间) 98 | 99 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 100 | |---|---|---|---|---|---|---| 101 | |21|GeoPointSymbolizer|GeoPointSymbolizer|点的可视化参数。||类|| 102 | |21.1||Material|材质参数。|0..1|类|Material实例(见“10.2 材质”)。| 103 | 104 | ## 10.5 线参数 105 | 106 | 线类型对象的3D可视化参数结构(`geo3dml:GeoLineSymbolizer`)继承自`se:LineSymbolizer`,并且允许设置材质参数(见“10.2 材质”),其结构见[图25](#pic-25)及[表27](#tbl-27)。 107 | 108 | 图25 geo3dml:GeoLineSymbolizer的结构 109 | 110 | ![图25 geo3dml:GeoLineSymbolizer的结构](./pictures/10-25.png) 111 | 112 | 表27 geo3dml:GeoLineSymbolizer子元素列表(省略名字空间) 113 | 114 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 115 | |---|---|---|---|---|---|---| 116 | |22|GeoLineSymbolizer|GeoLineSymbolizer|线的可视化参数。||类|| 117 | |22.1||Material|材质参数。|0..1|类|Material实例(见“10.2 材质”)。| 118 | 119 | ## 10.6 面参数 120 | 121 | 面类型对象的3D可视化参数结构(`geo3dml:GeoSurfaceSymbolizer`)继承自`se:Symbolizer`,允许分别指定曲面正面、背面的光照、材质与纹理参数。此外,如果曲面是由顶点-面片组合而成,则还可指定顶点与线框的可视化参数,即`VertexSymbolizer`与`FrameSymbolizer`。该参数的结构见[图26](#pic-26)及[表28](#tbl-28)。 122 | 123 | 图27 geo3dml:GeoSurfaceSymbolizer的结构 124 | 125 | ![图26 geo3dml:GeoSurfaceSymbolizer的结构](./pictures/10-26.png) 126 | 127 | 其中,`Front`表示正面的可视化参数,包括材质(`Front:Material`)和纹理参数(`Front:Texture`)。`Back`表示背面的可视化参数,包括材质(`Back:Material`)和纹理参数(`Back::Texture`)。其中正面参数是必填的,而背面参数是可选的。 128 | 129 | 顶点的可视化参数(`VertexSymbolizer`)是可选的,其定义参见“10.4 点参数”。 130 | 131 | 线框的可视化参数(`FrameSymbolizer`)是可选的,其定义参见“10.5 线参数”。 132 | 133 | 表28 geo3dml:GeoSurfaceSymbolizer子元素列表(省略名字空间) 134 | 135 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 136 | |---|---|---|---|---|---|---| 137 | |23|GeoSurfaceSymbolizer|GeoSurfaceSymbolizer|面的可视化参数。||类|| 138 | |23.1||se:Geometry|指定要被绘制的几何属性域的名字(要素对象可能存在多个几何属性域)。|0..1|类|se:Geometry实例,即以字符串形式记录的属性字段的名字。| 139 | |23.2|Front|Front|正面的可视化属性:颜色或纹理。|1||| 140 | |23.2.1||Material|正面的颜色参数。|0..1|类|引用Material实例(见“10.2 材质”)。| 141 | |23.2.2||AbstractTexture|正面的纹理参数。|0..1|类|引用AbstractTexture实例(见“10.3 纹理”)。| 142 | |23.3|Back|Back|背面的可视化属性(可选):颜色或纹理。|0..1||| 143 | |23.3.1||Material|背面的颜色参数。|0..1|类|引用Material实例(见“10.2 材质”)。| 144 | |23.3.2||AbstractTexture|背面的纹理参数。|0..1|类|引用AbstractTexture实例(见“10.3 纹理”)。| 145 | |23.4||VertexSymbolizer|顶点的可视化参数(可选)。|0..1|类|引用GeoPointSymbolizer实例(见“10.4 点参数”)。| 146 | |23.5||FrameSymbolizer|线框的可视化参数(可选)。|0..1|类|引用GeoLineSymbolizer实例(见“10.5 线参数”)。| 147 | 148 | [表28](#tbl-28)中,23.2.1部分的内容与23.2.2部分的内容是二选一的互斥关系,即元素`Front`要么包含23.2.1部分的内容,要么包括23.2.2部分的内容。23.3.1部分的内容与23.3.2部分的内容是二选一的互斥关系,即元素`Back`要么包含23.3.1部分的内容,要么包括22.3.2部分的内容。 149 | 150 | ## 10.7 属性场数据参数 151 | 152 | 属性场数据(`geo3dml:GeoDiscreteCoverage`)的3D可视化参数结构(`geo3dml:GeoDiscreteCoverageSymbolizer`)继承自`se:Symbolizer`,支持根据属性条件匹配场中的几何对象从而设置可视化参数。该参数的结构见[图27](#pic-27)及[表29](#tbl-29)。 153 | 154 | 图27 geo3dml:GeoDiscreteCoverageSymbolizer的结构 155 | 156 | ![图27 geo3dml:GeoDiscreteCoverageSymbolizer的结构](./pictures/10-27.png) 157 | 158 | 表29 geo3dml:GeoDiscreteCoverageSymbolizer子元素列表(省略名字空间) 159 | 160 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 161 | |---|---|---|---|---|---|---| 162 | |24|GeoDiscreteCoverageSymbolizer|GeoDiscreteCoverageSymbolizer|属性场的可视化参数。||类|| 163 | |24.1||Geometry|指定要被绘制的属性场的名字(要素对象可能存在多个属性域场)。|0..1|类|se:Geometry实例,即以字符串形式记录的属性场的名字。| 164 | |24.2||Rule|属性场中几何对象的匹配条件。|0..n|类|se:Rule实例。| 165 | 166 | `geo3dml:GeoDiscreteCoverageSymbolizer`的结构类似于`se:FeatureTypeStyle`。指定属性场的可视化参数时,应先通过`se:FeatureTypeStyle`选择对应的地质要素(`geo3dml:GeoFeature`),然后通过`geo3dml:GeoDiscreteCoverageSymbolizer`的`geo3dml:Geometry`元素选择要被绘制的属性场对象(`geo3dml:GeoDiscreteCoverage`),之后运用`geo3dml:GeoDiscreteCoverageSymbolizer`的`se:Rule`元素具体描述场中具有不同属性的几何对象的可视化参数。 167 | 168 | ## 10.8 体数据参数 169 | 170 | 描述体对象的方法有两种:一种是利用封闭的曲面描述体的表面;一种是将体的内部空间划分为体元,通过这些体元来表达体。采用前一种方式时,体的3D可视化参数应采用面参数(见“10.6 面参数”);采用后一种方式时,体可被理解为属性场,因而体的3D可视化参数应采用属性场数据参数(见“10.7 属性场数据参数”)。 171 | 172 | ## 10.9 场景参数 173 | 174 | 场景参数(`geo3dml:GeoSceneStyle`)用于描述全局参数,包括场景的背景颜色和全局光照参数。该参数的结构见[图28](#pic-28)和[表30](#tbl-30)。 175 | 176 | 图28 geo3dml:GeoSceneStyle的结构 177 | 178 | ![图28 geo3dml:GeoSceneStyle的结构](./pictures/10-28.png) 179 | 180 | 表30 geo3dml:GeoSceneStyle子元素列表(省略名字空间) 181 | 182 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 183 | |---|---|---|---|---|---|---| 184 | |25|GeoSceneStyle|GeoSceneStyle|可视化场景参数。||类|| 185 | |25.1||Background|背景颜色。|0..1|类|geo3dml:Color实例(见“12 基础数据结构模块”)。默认值为(0,0,0)。| 186 | |25.2||Light|全局光照参数。|0..8||| 187 | |25.2.1||On|标记该光源的启用状态。|0..1|布尔值|值为true时表示启用该光源,否则表示不使用该光源。默认值为true。| 188 | |25.2.2||Type|光源的类型。|0..1|字符串|枚举值:Head(头灯),Camera(相机灯),Scene(场景灯)。默认值为:Scene。| 189 | |25.2.3||Position|光源的位置。|0..1|类|长度为3的gml:doubleList实例。默认值为:(0.0 0.0 1.0)。| 190 | |25.2.4||FocalPosition|灯光的聚焦位置。与光源的位置配合起来可计算光照的方向。|0..1|类|长度为3的gml:doubleList实例。默认值为(0.0 0.0 0.0)。| 191 | |25.2.5||Intensity|光源的强度。|0..1|类|geo3dml:DoubleBetween0And1(见“12 基础数据结构模块”)实例。默认值为1.0。| 192 | |25.2.6||AmbientColor|光源的环境光颜色。|0..1|类|geo3dml:Color(见“12 基础数据结构模块”)实例。默认值为:(1.0,1.0,1.0)。| 193 | |25.2.7||DiffuseColor|光源的漫反射光颜色。|0..1|类|geo3dml:Color(见“12 基础数据结构模块”)实例。默认值为:(1.0,1.0,1.0)。| 194 | |25.2.8||SpecularColor|光源的镜面光颜色。|0..1|类|geo3dml:Color(见“12 基础数据结构模块”)实例。默认值为:(1.0,1.0,1.0)。| 195 | 196 | ## 10.10 可视化参数库 197 | 198 | `geo3dml:Geo3DStyle`元素可以直接引用预定义的可视化参数。Geo3DML定义了地质要素可视化参数库(`ge3dml:Geo3DStyleLib`)以集中存储各类预定义参数。其结构见[图29](#pic-29)及[表31](#tbl-31)。 199 | 200 | 图29 geo3dml:Geo3DStyleLib的结构 201 | 202 | ![图29 geo3dml:Geo3DStyleLib的结构](./pictures/10-29.png) 203 | 204 | 表31 geo3dml:Geo3DStyleLib子元素列表(省略名字空间) 205 | 206 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 207 | |---|---|---|---|---|---|---| 208 | |26|Geo3DStyleLib|Geo3DStyleLib|可视化参数库。||类|| 209 | |26.1||Name|库的名字。|1|字符串|自由文本。| 210 | |26.2|FeatureTypeStyleLib|FeatureTypeStyleLib|库中包含的se:FeatureTypeStyle实例的集合。|0..1|类|| 211 | |26.2.1||se:FeatureTypeStyle|库中包含的se:FeatureTypeStyle实例。|0..N|类|se:FeatureTypeStyle实例。| 212 | |26.3|CoverageStyleLib|CoverageStyleLib|库中包含的se:CoverageStyle实例的集合。|0..1|类|| 213 | |26.3.1||se:CoverageStyle|库中包含的se:CoverageStyle实例。|0..N|类|se:CoverageStyle实例。| 214 | |26.4|SymbolizerLib|SymbolizerLib|库中包含的se:Symbolizer实例的集合。|0..1|类|| 215 | |26.4.1||se:Symbolizer|库中包含的se:Symbolizer实例。|0..N|类|se:Symbolizer实例。| 216 | 217 | `geo3dml:GeoStyleLib`中`FeatureTypeStyleLi`成员用于记录预定义的`se:FeatureTypeStyle`参数,`CoverageStyleLib`成员用于记录与定义的`se:CoverageStyle`参数,而`SymbolizerLib`成员则用于记录预定义的`se:Symbolizer`结构。 218 | -------------------------------------------------------------------------------- /doc/11.0-元数据模块.md: -------------------------------------------------------------------------------- 1 | # 11 元数据模块 2 | 3 | ## 11.1 三维地质模型元数据 4 | 5 | Geo3DML定义了描述三维地质模型的元数据结构——`geo3dml:Geo3DModelMetadata`,记录的信息包括关于地质模型的说明,建模所使用的建模工具等。该结构继承自GB/Z 24357-2009定义的`gmd:MD_Metadata`(见[图30](#pic-30)及[表32](#tbl-32))。 6 | 7 | 图30 geo3dml:GeoModelMetadata的结构 8 | 9 | ![图30 geo3dml:GeoModelMetadata的结构](./pictures/11-30.png) 10 | 11 | 其中,`Description`记录关于地质图的说明信息;`Version`记录模型的版本信息;`SpatialReferenceSystem`可用于记录模型中几何对象的空间坐标参照系信息;`ToolName`及`ToolVersion`分别记录建模工具的名称及版本号。关于模型创建人(或单位)的联系方式和建模时间等信息的记录规则则定义在`gmd:MD_Metadata`结构中。 12 | 13 | 表32 geo3dml:Geo3DModelMetadata子元素列表(省略名字空间) 14 | 15 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 16 | |---|---|---|---|---|---|---| 17 | |27|Geo3DModelMetadata|Geo3DModelMetadata|地质模型元数据。||类|| 18 | |27.1||Description|关于模型的说明信息。|1|字符串|自由文本。| 19 | |27.2||Version|模型的版本号。|1|字符串|如“1.2.1”。模型的版本是模型中空间数据和非空间数据的缺省版本。| 20 | |27.3||SpatialReferenceSystem|空间数据参照系。|0..1|类|geo3dml:AbstractSpatialReferenceSystem具体类型的实例。| 21 | |27.4||ToolName|创建该地质模型所使用的软件工具的名称。|1|字符串|自由文本。| 22 | |27.5||ToolVersion|创建该地质模型所使用的软件工具的版本号。|1|字符串|自由文本。| 23 | 24 | ## 11.2 空间数据参照系 25 | 26 | Geo3DML依据《地质信息元数据标准》(DD2006-05)定义了空间数据参照系(·geo3dml: AbstractSpatialReferenceSystem·及其子类型)。描述空间参照系的数据结构见[图31](#pic-31)。 27 | 28 | 图31 空间参照系数据结构的类型关系 29 | 30 | ![图31 空间参照系数据结构的类型关系](./pictures/11-31.png) 31 | 32 | `geo3dml:AbstractSpatialReferenceSystem`是不包含任何子元素的抽象类型;`geo3dml:SpatialReferenceSystemUsingGeographicIdentifiers`表示基于地理标识的空间参照系;`geo3dml:CoordinateReferenceSystem`表示基于坐标的空间参照系;`geo3dml:VerticalReferenceSystem`表示垂向坐标参照系。上述类型及其结构均是依据《地质信息元数据标准》(DD2006-05)定义的。 33 | 34 | ## 11.3 基于地理标识的空间参照系 35 | 36 | `geo3dml:SpatialReferenceSystemUsingGeographicIdentifiers`描述基于地理标识的空间参照系。其结构见[图32](#pic-32)及[表33](#tbl-33)。 37 | 38 | 图32 geo3dml:SpatialReferenceSystemUsingGeographicIdentifiers的结构 39 | 40 | ![图32 geo3dml:SpatialReferenceSystemUsingGeographicIdentifiers的结构](./pictures/11-32.png) 41 | 42 | 表33 geo3dml:SpatialReferenceSystemUsingGeographicIdentifiers子元素列表(省略名字空间) 43 | 44 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 45 | |---|---|---|---|---|---|---| 46 | |28|SpatialReferenceSystemUsingGeographicIdentifiers|SpatialReferenceSystemUsingGeographicIdentifiers|基于地理标识的空间参照系。||类|| 47 | |28.1||Name|基于地理标识的空间参照系名称。|1|字符串|有效的空间参照系名称。| 48 | 49 | ## 11.4 基于坐标的空间参照系 50 | 51 | `geo3dml:CoordinateReferenceSystem`描述基于坐标的空间参照系。其结构见[图33](#pic-33)及[表34](#tbl-34)。 52 | 53 | 图33 geo3dml:CoordinateReferenceSystem的结构 54 | 55 | ![图33 geo3dml:CoordinateReferenceSystem的结构](./pictures/11-33.png) 56 | 57 | 表34 geo3dml:CoordinateReferenceSystem子元素列表(省略名字空间) 58 | 59 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 60 | |---|---|---|---|---|---|---| 61 | |29|CoordinateReferenceSystem|CoordinateReferenceSystem|基于坐标的空间参照系。||类|| 62 | |29.1||CoordinateReferenceSystemIdentifier|坐标参照系名称。|1|字符串|枚举值(见表后说明)。| 63 | |29.2||CoordinateSystemType|坐标系类型名称。|1|字符串|枚举值(见表后说明)。| 64 | |29.3||CoordinateSystemIdentifier|坐标系名称。|1|字符串|自由文本。| 65 | |29.4||Parameter|采用投影坐标系时有关投影坐标参数的说明。|1|字符串|自由文本。| 66 | 67 | `CoordinateReferenceSystemIdentifier`(坐标参照系名称)可取的枚举值如下: 68 | 69 | (1)1954北京坐标系; 70 | 71 | (2)1980西安坐标系; 72 | 73 | (3)地方独立坐标系:指相对于独立国家坐标系的局部坐标系; 74 | 75 | (4)全球参考系:是用于检索陆地卫星数据的一个全球检索系; 76 | 77 | (5)IAG 1979年大地参照系:指国际大地测量协会1979年大会通过的大地参照系; 78 | 79 | (6)世界大地坐标系:质点在地球质心; 80 | 81 | (7)2000中国大地坐标系统:是国家GPS大地控制网,地心坐标系。 82 | 83 | `CoordinateSystemType`(坐标系类型名称)可取的枚举值如下: 84 | 85 | (1)笛卡尔坐标系:相互正交于远点的n个数轴(n是任意正整数)组成的n维坐标系; 86 | 87 | (2)大地坐标系:用经度和纬度表示地面点位置的球面坐标; 88 | 89 | (3)投影坐标系:由不同的投影方法所形成的坐标系; 90 | 91 | (4)极坐标系:用某点至极点的距离和方向表示该点位置的坐标系; 92 | 93 | (5)重力相关坐标系:重力测量及其计算的一种基准。 94 | 95 | ## 11.5 垂向坐标参照系 96 | 97 | `geo3dml:VerticalReferenceSystem`描述垂向坐标参照系。其结构见[图34](#pic-34)及[表35](#tbl-35)。 98 | 99 | 图34 geo3dml:VerticalReferenceSystem的结构 100 | 101 | ![图34 geo3dml:VerticalReferenceSystem的结构](./pictures/11-34.png) 102 | 103 | 表35 geo3dml:VerticalReferenceSystem子元素列表(省略名字空间) 104 | 105 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 106 | |---|---|---|---|---|---|---| 107 | |30|VerticalReferenceSystem|VerticalReferenceSystem|垂向坐标参照系。||类|| 108 | |30.1||VerticalReferenceSystemIdentifier|垂向坐标参照系名称。|1|字符串|枚举值(见表后说明)。| 109 | 110 | `VerticalReferenceSystemIdentifier`(垂向坐标参照系名称)可取的枚举值如下: 111 | 112 | (1)高程:高程类别的一级分类名; 113 | 114 | (2)1956年黄海高程系:高程类别的二级分类名; 115 | 116 | (3)1985年国家高程系:高程类别的二级分类名; 117 | 118 | (4)地方独立高程系:高程类别的二级分类名,是独立于国家高程系外的局部高程坐标系; 119 | 120 | (5)深度:深度类别的一级分类名; 121 | 122 | (6)略最低低潮面:深度类别的二级分类名,是印度大潮低潮面; 123 | 124 | (7)理论深度基准面:深度类别的二级分类名; 125 | 126 | (8)重力:重力相关类别的一级分类名; 127 | 128 | (9)国家重力控制网:重力相关类别的二级分类名,是57网。重力基准由苏联引入,属波茨坦重力基准; 129 | 130 | (10)国家1985重力基准网:重力相关类别的二级分类名,是85网。综合性的重力基准; 131 | 132 | (11)维也纳重力基准:重力相关类别的二级分类名; 133 | 134 | (12)波茨坦重力基准:重力相关类别的二级分类名; 135 | 136 | (13)国际重力基准网1971:重力相关类别的二级分类名,即IGSN-71; 137 | 138 | (14)国际绝对重力基准网:重力相关类别的二级分类名,即IAGBN; 139 | 140 | (15)相对高度:相对高度类别的一级分类名。 141 | -------------------------------------------------------------------------------- /doc/12.0-基础数据结构模块.md: -------------------------------------------------------------------------------- 1 | # 12 基础数据结构模块 2 | 3 | 基础数据结构模块定义了本标准所使用的基础数据类型,包括: 4 | 5 | (1)区间[0,1]内的浮点数:`geo3dml:DoubleBetween0And1` 6 | 7 | (2)元素值位于区间[0, 1]的数列:`geo3dml:DoubleBetween0And1List` 8 | 9 | (3)RGB颜色:`geo3dml:Color` 10 | 11 | 3个`geo3dml:DoubleBetween0And1`类型的实数组成的列表,顺次表达红、绿、蓝3个颜色分量的值。 12 | 13 | (4)RGBA颜色:`geo3dml:ColorPlusAlpha` 14 | 15 | 4个`geo3dml:DoubleBetween0And1`类型的实数组成的列表,顺次表达红、绿、蓝、不透明度等4个颜色分量的值。 16 | 17 | (5)2行2列的坐标变换矩阵:`geo3dml:TransformationMatrix2x2Type` 18 | 19 | 4个实数组成的列表。列表中的元素按行优先的顺序存储,即前2个元素表示矩阵的第一行,后两个元素表示矩阵的第二行。 20 | 21 | (6)3行4列的坐标变换矩阵:`geo3dml:TransformationMatrix3x4Type` 22 | 23 | 12个实数组成的列表。列表中的元素按行优先的顺序存储,即前3个元素表示矩阵的第一行,第4至第6个元素表示矩阵的第二行,依此类推。 24 | 25 | (7)4行4列的坐标变换矩阵:`geo3dml:TransformationMatrix4x4Type` 26 | 27 | 16个实数组成的列表。列表中的元素按行优先的顺序存储,即前4个元素表示矩阵的第一行,第5至第8个元素表示矩阵的第二行,依此类推。 28 | -------------------------------------------------------------------------------- /doc/2.0-规范性引用文件.md: -------------------------------------------------------------------------------- 1 | # 2 规范性引用文件 2 | 3 | 下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅所注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。 4 | 5 | GB/T 958-1989 区域地质图图例 6 | 7 | GB/T 6390-1986 地质图用色标准 8 | 9 | GB/T 9649 地质矿产术语分类代码 10 | 11 | GB/T 23708-2009 地理信息 地理标记语言(GML)(ISO 19136:2007) 12 | 13 | GB/Z 24357-2009 地理信息 元数据 XML模式实现 14 | 15 | DZ/T 0179-1997 地质图用色标准及用色原则(1:50000) 16 | 17 | DD2006-05 地质信息元数据标准 18 | 19 | OpenGIS Filter Encoding Implementation Specification, Version 1.1.0, OGC document: OGC 04-095,2005年3月 20 | 21 | OpenGIS Symbology Encoding Implementation Specification, Version 1.1.0, OGC document: OGC 05-077r4,2005年8月 22 | 23 | OpenGIS SWE Common Data Model Encoding Standard, Version 2.0.0, OGC document: OGC 08-094r1, 2011年1月 24 | -------------------------------------------------------------------------------- /doc/3.0-术语和定义.md: -------------------------------------------------------------------------------- 1 | # 3 术语和定义 2 | 3 | 下列术语和定义适用于本标准。 4 | 5 | ## 3.1 6 | 7 | **要素** **feature** 8 | 9 | 现实世界现象的抽象。 10 | 11 | 注:要素可以类型或实例的形式出现。当仅表达一种含义时,应使用“要素类型”或“要素实例”。 12 | 13 | [GB/T 23708-2009,4.1.26] 14 | 15 | ## 3.2 16 | 17 | **地质要素 geological feature** 18 | 19 | 地质现象的抽象,包括表达地质语义的地质属性和表达空间位置及形态的几何属性。 20 | 21 | ## 3.3 22 | 23 | **三维地质模型 ** **three-dimensional geological model** 24 | 25 | 地质现象及地质现象之间的关系在三维空间中的表达。 26 | 27 | ## 3.4 28 | 29 | **矢量数据** **vector data** 30 | 31 | 由几何元素所表示的数据。 32 | 33 | [GB/T 17798-2007,3.34] 34 | 35 | ## 3.5 36 | 37 | **栅格数据** **raster data** 38 | 39 | 被表示成有规则的空间阵列的数据。 40 | 41 | [GB/T 17798-2007,3.35] 42 | 43 | ## 3.6 44 | 45 | **格网数据** **grid data** 46 | 47 | 与特定参照系相对应的空间的规则化的数据。 48 | 49 | [GB/T 17798-2007,3.36] 50 | 51 | ## 3.7 52 | 53 | **拓扑** **topology** 54 | 55 | 对相连或相邻的点、线、面、体之间关系的科学阐述。特指那种在连续映射变换下保持不变的对象性质。 56 | 57 | [GB/T 17798-2007,3.25] 58 | 59 | ## 3.8 60 | 61 | **覆盖** **coverage** 62 | 63 | 在空间域、时间域或时空域中,作为任意直接位置的函数,从其值域中返回数值的要素。 64 | 65 | [GB/T 17694-2009,B.97] 66 | -------------------------------------------------------------------------------- /doc/4.0-缩略语和符号.md: -------------------------------------------------------------------------------- 1 | # 4 缩略语和符号 2 | 3 | ## 4.1 缩略语 4 | 5 | 6 | |缩略语|说明| 7 | |---|---| 8 | |3D|三维(Three-Dimensional)| 9 | |CityGML|OGC城市地理标记语言(OGC: City Geography Markup Language)| 10 | |Geo3DML|三维地质模型标记语言(Three-Dimensional Geological Model Markup Language)| 11 | |GMD|地理信息 元数据(Geographic Information——Metadata)| 12 | |GML|地理标记语言(Geography Markup Language)| 13 | |OGC|开放地理信息联盟(Open Geospatial Consortium)| 14 | |SE|OGC符号编码规范(Symbology Encoding)| 15 | |SLD|OGC样式化三维图层描述符(OGC: Styled Layer Descriptor)| 16 | |SWE|OGC传感器万维网增强协议(OGC: Sensor Web Enablement)| 17 | |TIN|不规则三角网(Triangulated Irregular Network)| 18 | |UML|统一建模语言(Unified Modeling Language)| 19 | |XML|可扩展标记语言(Extensible Markup Language)| 20 | |XSD|XML模式定义语言(XML Schema Definition Language)| 21 | 22 | ## 4.2 UML符号 23 | 24 | (1)UML标记 25 | 26 | 本标准的说明图件采用UML静态结构图表示,其标记见[图1](#pic-1)。 27 | 28 | 图1 UML标记 29 | 30 | ![图1 UML标记](./pictures/4-1.png) 31 | 32 | (2)UML对象的构造型说明 33 | 34 | UML对象的构造型表达对其自身的扩展。本标准主要使用了以下构造型: 35 | 36 | `<>`表示该对象是一个几何对象,继承自GML抽象类型`gml:AbstractGeometryType`; 37 | 38 | `<>`表示该对象是一个具有地质语义信息的地质要素,继承自GML抽象类型`gml:AbstractFeatureType`; 39 | 40 | `<>`表示该对象是一种地质数据类型,继承自GML抽象类型`gml:AbstractGMLType`; 41 | 42 | `<>`是枚举值,它使用字符串表示一系列可能的值。 43 | 44 | (3)UML对象的表达方式 45 | 46 | 为了区分本标准定义的类型和引用自相关规范的类型,标注了类型的来源。 47 | 48 | 图2 UML类图实例 49 | 50 | ![图2 UML类图实例](./pictures/4-2.png) 51 | 52 | 以[图2](#pic-2)为例,`MD_Metadata`来自现行的GB/Z 24357-2009标准,其标准名简记为GMD,因此以“from GMD”标识;`GeoModelMetadata`是本标准定义的元数据类型,以“from Geo3DML”标识。 53 | 54 | ## 4.3 XML名字空间 55 | 56 | 本标准采用XSD定义三维地质模型数据的XML交换格式,使用的名字空间为“geo3dml”。本标准所引用的其它标准的XSD的名字空间见[表1](#tbl-1)。 57 | 58 | 表1 本标准所引用标准的名字空间 59 | 60 | |规范名|XSD链接地址|名字空间| 61 | |---|---|---| 62 | |Filter Encoding v1.1.0|[http://schemas.opengis.net/filter/1.1.0/filter.xsd](http://schemas.opengis.net/filter/1.1.0/filter.xsd)|ogc| 63 | |Geographic Information——Metadata|[http://www.isotc211.org/2005/gmd/metadataEntity.xsd](http://www.isotc211.org/2005/gmd/metadataEntity.xsd)|gmd| 64 | |GML 3.2.1|[http://schemas.opengis.net/gml/3.2.1/gml.xsd](http://schemas.opengis.net/gml/3.2.1/gml.xsd)|gml| 65 | |GML 3.2.1 Application Schema for Coverages|[http://schemas.opengis.net/gmlcov/1.0/gmlcovAll.xsd](http://schemas.opengis.net/gmlcov/1.0/gmlcovAll.xsd)|gmlcov| 66 | |Sensor Web Enablement|[http://schemas.opengis.net/sweCommon/2.0/swe.xsd](http://schemas.opengis.net/sweCommon/2.0/swe.xsd)|swe| 67 | |Symbology Encoding|[http://schemas.opengis.net/se/1.1.0/FeatureStyle.xsd](http://schemas.opengis.net/se/1.1.0/FeatureStyle.xsd)|se| 68 | -------------------------------------------------------------------------------- /doc/5.0-Geo3DML构成.md: -------------------------------------------------------------------------------- 1 | # 5 Geo3DML构成 2 | 3 | Geo3DML将被交换的三维地质模型数据划分为两部分(见[图3](#pic-3)):描述地质现象及现象之间关系的数据和地质模型的三维可视化数据。三维地质模型(`Geo3DModel`)、地质要素类(`GeoFeatureClass`)以及地质要素(`GeoFeature`)用来描述地质现象以及现象之间的关系;三维地质图(`Geo3DMap`)、三维地质图层(`Geo3DLayer`)以及三维地质样式(`Geo3DStyle`)用来记录三维地质模型对应的可视化数据。上述两部分数据组合起来构成被交换数据的整体,称为“三维数据包”(`Geo3DProejct`)。在记录被交换数据的XML文件中,`geo3dml:Geo3DProject`是根元素,`geo3dml`是其名字空间。 4 | 5 | 图3 Geo3DML数据组织层次结构 6 | 7 | ![图3 Geo3DML数据组织层次结构](./pictures/5-3.png) 8 | 9 | Geo3DML利用XSD语言定义了上述框架,主要包括如下7个模块(见[图4](#pic-4)和[表2](#tbl-2)): 10 | 11 | 图4 Geo3DML模块构成 12 | 13 | ![图4 Geo3DML模块构成](./pictures/5-4.png) 14 | 15 | 表2 Geo3DML模块说明 16 | 17 | |序号|模块名称|名字空间|XSD文件|说明| 18 | |---|---|---|---|---| 19 | |1|三维数据包
(Geo3DProject)|geo3dml|Geo3DML.xsd
GeoModel.xsd
Geo3DMap.xsd|定义地质模型数据及其三维可视化场景的结构,是Geo3DML所定义的数据交换格式的主体部分。| 20 | |2|地质要素
(GeoFeature)|geo3dml|GeoFeature.xsd
GeoFeatureClass.xsd|定义地质要素及地质要素类的结构。| 21 | |3|几何数据
(GeoGeometry)|geo3dml|GeoGeometry.xsd|定义针对GML规范中几何对象的扩展结构。| 22 | |4|属性场
(GeoProperty)|geo3dml|GeoProperty.xsd|定义针对gmlcov:Abstract-Coverage的扩展结构,以描述地质要素的三维属性场信息。| 23 | |5|可视化参数
(Geo3DStyle)|geo3dml|Geo3DStyle.xsd
Geo3DStyleLib.xsd|定义三维可视化参数及参数库的结构。| 24 | |6|元数据
(GeoMetadata)|geo3dml|GeoMetadata.xsd|定义地质模型的元数据结构。| 25 | |7|基础数据结构
(GeoBasicType)|geo3dml|GeoBasicType.xsd|定义Geo3DML所使用的基础数据结构。| 26 | 27 | -------------------------------------------------------------------------------- /doc/6.0-三维数据包模块.md: -------------------------------------------------------------------------------- 1 | # 6 三维数据包模块 2 | 3 | ## 6.1 概述 4 | 5 | 三维数据包表示一项三维地质建模成果,是被交换的三维地质模型的完整数据,也是Geo3DML组织三维地质模型数据文件的根元素。 6 | 7 | ## 6.2 三维数据包 8 | 9 | 三维数据包在Geo3DML中用`geo3dml:Geo3DProject`来描述。对应的,在记录被交换数据的XML文件中,`geo3dml:Geo3DProject`是根元素。`geo3dml:Geo3DProject`元素的结构见[图5](#pic-5)及[表3](#tbl-3)。 10 | 11 | 图5 geo3dml:Geo3DProject的结构 12 | 13 | ![图5 geo3dml:Geo3DProject的结构](./pictures/6-5.png) 14 | 15 | 表3 geo3dml:Geo3DProject子元素列表(省略名字空间) 16 | 17 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 18 | |---|---|---|---|---|---|---| 19 | |1|Geo3DProject|Geo3DProject|三维数据包。||类|| 20 | |1.1||Name|三维数据包的名字。|1|字符串|自由文本。| 21 | |1.2||Description|三维数据包的说明信息。|0..1|字符串|自由文本。| 22 | |1.3||Style|全局可视化参数,包括场景的背景、全局光照等。|0..1|类|GeoSceneStyle实例(见“10.9 场景参数”)。| 23 | |1.4|Models|Models|三维数据包中包含的Geo3DModel子元素的集合。|0..1||| 24 | |1.4.1||Model|三维数据包中包含的Geo3DModel子元素。|0..N|类|Geo3DModel实例(见“6.3 三维地质模型”)。| 25 | |1.5|Maps|Maps|三维数据包中包含的Geo3DMap子元素的集合。|0..1||| 26 | |1.5.1||Map|三维数据包中包含的Geo3DMap子元素。|0..N|类|Geo3DMap实例(见“6.5 三维地质图”)。| 27 | 28 | ## 6.3 三维地质模型 29 | 30 | 三维地质模型描述地质要素及地质要素之间的关系。在Geo3DML中用`geo3dml:Geo3DModel`元素表示,由地质模型元数据、地质要素类和地质要素关系构成。该元素的结构见[图6](#pic-6)及[表4](#tbl-4)。 31 | 32 | 图6 geo3dml:Geo3DModel的结构 33 | 34 | ![图6 geo3dml:Geo3DModel的结构](./pictures/6-6.png) 35 | 36 | 表4 geo3dml:Geo3DModel子元素列表(省略名字空间) 37 | 38 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 39 | |---|---|---|---|---|---|---| 40 | |2|Geo3DModel|Geo3DModel|地质模型。||类|| 41 | |2.1||ID|地质模型元素的属性:ID。|1|字符串|自由文本。通过ID支持多文件模型数据的关联。| 42 | |2.2||Name|地质模型的名字。|1|字符串|自由文本| 43 | |2.3||Type|地质模型的类型。|1|字符串|枚举值:Drill(钻孔),Section(剖面),3DModel(三维地质模型),Isogram(等值图),Other(其它)。| 44 | |2.4||Metadata|地质模型元数据。|0..1|类|Geo3DModelMetadata实例(见“11 元数据模块”)。| 45 | |2.5|FeatureClasses|FeatureClasses|地质模型中包含的地质要素类的集合。|0..1||| 46 | |2.5.1||FeatureClass|地质模型中包含的GeoFeatureClass子元素。|0..N|类|GeoFeatureClass实例(见“6.4 地质要素类”)。| 47 | |2.6|FeatureRelationship|FeatureRelationship|地质要素间关系的集合。|0..1||| 48 | |2.6.1||Relation|地质要素间的关系实例。|0..N|类|GeoFeatureRelation及其子类型的实例(见“7.2 地质要素之间的关系”)。| 49 | 50 | ## 6.4 地质要素类 51 | 52 | 地质要素类元素(`geo3dml:GeoFeatureClass`)是三维地质模型元素(`geo3dml:GeoModel`)的构成部分。地质要素类是地质要素(`geo3dml:GeoFeature`)的集合,并且要求集合中的地质要素具有相同的属性结构。地质要素类元素的子元素`geo3dml:Schema`定义了该集合中地质要素的属性结构。`geo3dml:GeoFeatureClass`元素的结构见[图7](#pic-7)及[表5](#tbl-5)。 53 | 54 | 图7 geo3dml:GeoFeatureClass的结构 55 | 56 | ![图7 geo3dml:GeoFeatureClass的结构](./pictures/6-7.png) 57 | 58 | 表5 geo3dml:GeoFeatureClass子元素列表(省略名字空间) 59 | 60 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 61 | |---|---|---|---|---|---|---| 62 | |3|GeoFeatureClass|GeoFeatureClass|地质要素类。||类|| 63 | |3.1||Schema|地质要素类中地质要素的属性结构定义。|0..1|类|swe:DateRecord实例| 64 | |3.2|Features|Features|地质要素类中包含的地质要素的集合。|0..1||| 65 | |3.2.1||Feature|地质要素类中包含的地质要素实例。|0..N|类|GeoFeature实例(见“7.1 地质要素”)| 66 | 67 | `geo3dml:GeoFeatureClass`继承自`gml:AbstractGML`,因而需要设置其实例的属性`gml:id`以作为其唯一标识符。 68 | 69 | 同一地质要素类中的地质要素必须属于同一类型,即它们具有相同的属性结构。要素类中的`geo3dml:Schema`子元素用于定义地质要素的属性结构。`geo3dml:Schema`的取值是定义于OGC SWE规范中的`swe:DataRecord`元素实例(其结构如[图8](#pic-8)所示)。在SWE规范中,`swe:DataRecord`既可用作数据描述工具也可用作数据容器。此处,该对象起数据描述工具的作用。`swe:DataRecord`对象可包含多个`swe:AbstractDataComponent`元素(作为其`swe:field`子元素的取值);每个`swe:AbstractDataComponent`元素可用于定义一个属性字段。`swe:AbstractDataComponent`元素的类型为`swe:AbstractDataComponentType`,而该类型则派生自`swe:AbstractSWEIdentifiableType`。定义属性字段时,通过`swe:DataRecord`的子元素`swe:field`的属性`name`设置属性字段名(必填);通过`swe:AbstractSWEIdentifiableType:label`元素设置属性字段的显示名(可选);通过`swe:AbstractSWEIdentifiableType:description`可以设置字段的说明信息,如解释该字段的含义(可选);通过`swe:AbstractDataComponentType:definition`可以配置字段所对应的语义信息(可选),如字段所对应的本体概念。 70 | 71 | 图8 swe:DataRecord的结构及数据类型定义 72 | 73 | ![图8 swe:DataRecord的结构及数据类型定义](./pictures/6-8.png) 74 | 75 | SWE规范定义的`swe:AbstractDataComponent`数据类型包括(见[图8](#pic-8)):数值类型(`swe:Count`,`swe:CountRange`,`swe:Quantity`,`swe:QuantityRange`)、文本类型(`swe:Text`)、布尔类型(`swe:Boolean`)、日期与时间(`swe:Time`,`swe:TimeRange`)、离散分类值类型(`swe:Category`,`swe:CategoryRange`),以及复杂类型:向量(`swe:Vector`)、选择(`swe:DataChoice`)、数组(`swe:DataArray`)、矩阵(`swe:Matrix`)。 76 | 77 | ## 6.5 三维地质图 78 | 79 | 三维地质图是三维地质模型的可视化表达形式,在Geo3DML中用`geo3dml:Geo3DMap`表示。其结构见[图9](#pic-9)及[表6](#tbl-6)。 80 | 81 | 图9 geo3dml:Geo3DMap的结构 82 | 83 | ![图9 geo3dml:Geo3DMap的结构](./pictures/6-9.png) 84 | 85 | 表6 geo3dml:Geo3DMap子元素列表(省略名字空间) 86 | 87 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 88 | |---|---|---|---|---|---|---| 89 | |4|Geo3DMap|Geo3DMap|三维地质图。||类|| 90 | |4.1||Name|三维地质图的名字。|1|字符串|自由文本| 91 | |4.2||Description|三维地质图的说明。|1|字符串|自由文本| 92 | |4.3|Layers|Layers|三维地质图中包含的三维图层的集合。|0..1||| 93 | |4.3.1||Layer|三维地质图中包含的三维图层实例。|0..N|类|Geo3DLayer实例(见“6.6 三维地质图层”)| 94 | 95 | ## 6.6 三维地质图层 96 | 97 | 三维地质图层是地质要素类中地质要素的三维可视化描述,在Geo3DML中用`geo3dml:Geo3DLayer`来表示。其结构见[图10](#pic-10)及[表7](#tbl-7)。 98 | 99 | 图10 geo3dml:Geo3DLayer的结构 100 | 101 | ![图10 geo3dml:Geo3DLayer的结构](./pictures/6-10.png) 102 | 103 | 表7 geo3dml:Geo3DLayer子元素列表(省略名字空间) 104 | 105 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 106 | |---|---|---|---|---|---|---| 107 | |5|Geo3DLayer|Geo3DLayer|三维图层。||类|| 108 | |5.1||FeatureClass|三维图层所关联的地质要素类。|0..1|类|GeoFeatureClass实例(见“6.4 地质要素类”)| 109 | |5.2|Styles|Styles|三维图层所关联的可视化参数的集合。|0..1||| 110 | |5.2.1||Style|三维图层所关联的可视化参数实例。|0..N|类|Geo3DStyle实例(见“10 可视化参数模块”)| 111 | 112 | `geo3dml:Geo3DLayer`继承自`gml:AbstractGML`,因而需要设置其实例的属性`gml:id`以作为其唯一标识符。同时,从`gml:AbstractGML`继承而来的`gml:name`子元素则用于记录三维图层的名字。 113 | -------------------------------------------------------------------------------- /doc/7.0-地质要素模块.md: -------------------------------------------------------------------------------- 1 | # 7 地质要素模块 2 | 3 | ## 7.1 地质要素 4 | 5 | 地质要素的属性包括几何数据属性和非几何数据属性。对于非几何数据属性,Geo3DML支持SWE规范定义的`swe:AbstractDataComponent`数据类型,包括:数值类型(`swe:Count`,`swe:CountRange`,`swe:Quantity`,`swe:QuantityRange`)、文本类型(`swe:Text`)、布尔类型(`swe:Boolean`)、日期时间(`swe:Time`,`swe:TimeRange`)、离散分类值类型(`swe:Category`,`swe:CategoryRange`),以及复杂类型:向量(`swe:Vector`)、选择(`swe:DataChoice`)、数组(`swe:DataArray`)、矩阵(`swe:Matrix`)。涉及地质术语的非几何数据属性值应遵循GB/T 9649等相关标准。对于几何数据属性,Geo3DML支持GML规范定义的几何数据结构(仅指非拓扑几何数据)和空间覆盖(Coverage)数据结构,同时对其进行扩展定义了包括TIN等在内的扩展空间数据结构(见“8 几何数据模块”)。 6 | 7 | 地质要素(`geo3dml:GeoFeature`)的结构见[图11](#pic-11)及[表8](#tbl-8)。地质要素的非几何数据属性结构的定义源自其所属的地质要素类(`geo3dml:GeoFeatureClass`)(见`geo3dml:GeoFeatureClass:Schema`,“6.4 地质要素类”)。 8 | 9 | 地质要素可同时关联多个几何对象,每个对应不同的LOD层次。 10 | 11 | 图11 geo3dml:GeoFeature的结构 12 | 13 | ![图11 geo3dml:GeoFeature的结构](./pictures/7-11.png) 14 | 15 | 表8 geo3dml:GeoFeature子元素列表(省略名字空间) 16 | 17 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 18 | |---|---|---|---|---|---|---| 19 | |6|GeoFeature|GeoFeature|地质要素。||类|| 20 | |6.1|Fields|Fields|地质要素的非几何属性值集合。|0..1||| 21 | |6.1.1||Field|地质要素的非几何属性值实例。|0..N|类|swe:AbstractDataComponent实例。| 22 | |6.1.1.1||Name|地质要素的非几何属性值元素的属性。|字符串|自由文本。对应于地质要素类中定义的地质要素非几何属性字段的名字。| 23 | |6.2|Geometries|Geometries|地质要素的几何属性数据。|0..1||| 24 | |6.2.1||Geometry|地质要素的几何数据。|0..N||| 25 | |6.2.1.1||Name|几何数据元素的属性。|1|字符串|几何属性的字段名,用于区分不同的几何属性。同名的几何属性可能有分属于不同LOD层级的多个几何对象。| 26 | |6.2.1.2||LOD|几何数据元素的属性。|1|非负整数。|几何数据对应的LOD级别。0表示分辨率最高的细节层次,级别增加表示分辨率降低。缺省值为0。| 27 | |6.2.1.3||Shape|地质要素的几何属性数据。|1|类|gml:AbstractGeometry实例| 28 | |6.2.1.4||ShapeProperty|与Shape元素中指定的几何对象相关的属性场数据。|0..N|类|GeoDiscreteCoverage实例(见“9 属性场数据模块”)。| 29 | 30 | ## 7.2 地质要素之间的关系 31 | 32 | Geo3DML定义了`geo3dml:GeoFeatureRelation`来描述地质要素(`geo3dml:GeoFeature`)之间的关系,其结构见[图12](#pic-12)及[表9](#tbl-9)。`geo3dml:GeoFeatureRelation`记录的地质关系是从源要素出发到目标要素之间的关系,如岩体对地层的侵入关系,地质现象形成年代的对比关系等。 33 | 34 | 图12 geo3dml:GeoFeatureRelation的结构 35 | 36 | ![图12 geo3dml:GeoFeatureRelation的结构](./pictures/7-12.png) 37 | 38 | 表9 geo3dml:GeoFeatureRelation子元素列表(省略名字空间) 39 | 40 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 41 | |---|---|---|---|---|---|---| 42 | |7|GeoFeatureRelation|GeoFeatureRelation|地质要素之间的关系。||类|| 43 | |7.1||Relationship|该关系的名字或描述。|0..1|字符串|关于地质现象的术语。| 44 | |7.2|Source|Source|该关系中的源地质要素及其角色。|1||| 45 | |7.2.1||Role|源地质要素在该关系中的角色。|0..1|字符串|关于地质现象的术语。| 46 | |7.2.2||Feature|源地质要素。|1|类|引用GeoFeature实例(见“7.1 地质要素”)。| 47 | |7.3|Targets|Targets|该关系所关联的目标地质要素及其角色。|1||| 48 | |7.3.1||Role|目标地质要素在该关系中的角色。|0..1|字符串|关于地质现象的术语。| 49 | |7.3.2||Feature|目标地质要素。|1..N|类|引用GeoFeature实例(见“7.1 地质要素”)。| 50 | 51 | `geo3dml:GeologicHistory`专门描述地质要素之间关于各自所属地质年代的对比关系。针对该关系,关系的名称或描述(即`Relationship`元素的值)限定于“早于”、“晚于”,或“同期于”,分别表示源地质要素的形成年代早于、晚于或同期于目标地质要素。因为意义明确,使用该关系时,可以省略其`Source:Role`以及`Targets:Role`子元素。 52 | 53 | `geo3dml:DefiningStructure`专门描述地质要素组合起来构成某种地质构造的关系。如上覆地层与下伏地层组合起来形成不整合构造,其中关系的名称是“不整合”,源地质要素的角色是“上覆地层”(或“下伏地层”),目标地质要素的角色是“下伏地层”(或“上覆地层”)。又如侵入体与围岩形成侵入关系,其中关系的名称是“侵入”,源地质要素的角色是“侵入体”,目标地质要素的角色是“围岩”。描述关系名称、地质要素的角色时所使用的术语应遵循GB/T 9649的规定。 54 | 55 | `geo3dml:AggregationRelation`专门描述地质要素由一个或多个其它地质要素聚合而成的关系。如某个断层面由多个小断面聚合而成,其中源表示被组成的地质要素,目标则是组成的部分。该关系可用于描述地质要素之间的普通聚合关系,不一定具有明确的地质含义。因为意义明确,使用该关系时,可以省略其`Source:Role`以及`Targets:Role`子元素。 56 | 57 | `geo3dml:BoundaryRelation`专门描述地质要素由作为其边界的其它地质要素包围而成的关系。该关系的源是边界所围成的地质要素,目标地质要素则是边界。该关系也不一定具有明确的地质含义。因为意义明确,使用该关系时,可以省略其`Source:Role`以及`Targets:Role`子元素。 58 | -------------------------------------------------------------------------------- /doc/8.0-几何数据模块.md: -------------------------------------------------------------------------------- 1 | # 8 几何数据模块 2 | 3 | ## 8.1 概述 4 | 5 | Geo3DML支持GML规范所定义的`gml:AbstractGeometry`,以及`gmlcov:AbstractCoverage`等几何数据结构。GML定义了通用的点(`gml:Point`)、线(`gml:LineString`)、面(`gml:Surface`),体(`gml:Solid`)等数据结构。Geo3DML针对其中的不规则三角网、体(专指由四面体、规则六面体等各类体元填充而成的体)数据定义了专门的数据结构,分别为:`geo3dml:GeoTin`,`geo3dml:GeoVolume`(派生为`geo3dml:GeoTetrahedronVolume`、`geo3dml:GeoCuboidVolume`、`geo3dml:GeoCornerPointGrid`等)。这些结构都是对`gml:AbstractGeometry`或其子类型的扩展(见[图13](#pic-13))。 6 | 7 | 图13 Geo3DML扩展GML几何数据结构 8 | 9 | ![图13 Geo3DML扩展GML几何数据结构](./pictures/8-13.png) 10 | 11 | ## 8.2 不规则三角网 12 | 13 | Geo3DML对`gml:AbstractSurface`进行扩展定义了不规则三角网(`geo3dml:GeoTin`)数据结构,其结构见[图14](#pic-14)及[表10](#tbl-10)。 14 | 15 | 图14 geo3dml:GeoTin的结构 16 | 17 | ![图14 geo3dml:GeoTin的结构](./pictures/8-14.png) 18 | 19 | 表10 geo3dml:GeoTin子元素列表(省略名字空间) 20 | 21 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 22 | |---|---|---|---|---|---|---| 23 | |8|GeoTin|GeoTin|不规则三角网。||类|| 24 | |8.1|Vertices|Vertices|三角网的顶点列表。|0..1||| 25 | |8.1.1||Vertex|三角网的顶点实例。|0..N|类|Vertex实例| 26 | |8.1.1.1||IndexNo|顶点元素的属性:索引号。该索引号在当前顶点列表内是唯一的,以标识该顶点。|1|非负整数|非负整数,并且在当前顶点列表内取值唯一。| 27 | |8.2|Triangles|Triangles|三角网的三角形列表。|0..1||| 28 | |8.2.1||Triangle|三角网中的三角形实例。|0..N|类|Triangle实例| 29 | |8.2.1.1||IndexNo|三角形元素的属性:索引号。该索引号在当前三角形列表内是唯一的,以标识该三角形。|1|非负整数|非负整数,并且在当前三角形列表内取值唯一。| 30 | |8.2.1.2||VertexList|三角形的顶点列表。|1|类|长度为3的gml:integerList实例。该列表引用三角网顶点表中顶点的索引号,以标记三角形的三个顶点。| 31 | |8.2.1.3||NeighborList|三角形的邻接三角形列表。|0..1|类|长度为3的gml:integerList实例。该列表引用三角网内三角形表中三角形的索引号,以标记三角形的邻接三角形。| 32 | 33 | `geo3dml:GeoTin`由顶点表(`Vertices`子元素)及三角形表(`Triangles`子元素)两部分构成。顶点表记录构成TIN的所有顶点(`Vertex`)。`Vertex`继承自`gml:DirectPosition`,从而可以直接记录顶点的坐标。同时,`Vertex`的属性——`IndexNo`——用于标记该顶点的索引号。该索引号在当前顶点表中必须是唯一的,以允许在三角形表中通过顶点索引号标识构成三角形的顶点。 34 | 35 | `geo3dml:GeoTin`的三角形表描述组成TIN的所有三角形(`Triangle`),三角形则由顶点列表(`VertexList`)和邻接三角形列表(`NeighborList`)两部分组成。同时,每个三角形也有索引号(通过属性`IndexNo`记录)。该索引号是非负整数,并且在当前三角形表中是唯一的。三角形的`VertexList`是包含3个非负整数的列表。列表中的元素是组成该三角形的3个顶点的索引号。三角形的`NeighborList`也是包含3个整数的列表。列表中的元素则是该三角形的3个邻接三角形的索引号,并且约定使用值`-1`表示对应的邻接三角形不存在。假设某三角形T的`VertexList`取值为`(V1,V2,V3)`,`NeighborList`取值为`(T1,T2,T3)`,则三角形T1是与三角形T共用顶点V1所对的边的三角形(见[图15](#pic-15)),其它类推。[图15](#pic-15)中T3取值为-1,表示对应的邻接三角形不存在。 36 | 37 | 图15 三角形顶点与邻接三角形的对应关系示意图 38 | 39 | ![图15 三角形顶点与邻接三角形的对应关系示意图](./pictures/8-15.png) 40 | 41 | ## 8.3 体元构成的体 42 | 43 | ### 8.3.1 体 44 | 45 | Geo3DML对`gml:AbstractSolid`进行扩展定义了由相同类型体元填充而成的三维体数据结构(`geo3dml:GeoVolume`)。当前版本中支持体元为四面体(Tetrahedron)或规则六面体(Cuboid)两种类型的体,以及角点网格描述的体。`geo3dml:GeoVolume`的结构见[图16](#pic-16)。 46 | 47 | 图16 geo3dml:GeoVolume的结构 48 | 49 | ![图16 geo3dml:GeoVolume的结构](./pictures/8-16.png) 50 | 51 | 表11 geo3dml:GeoVolume子元素列表(省略名字空间) 52 | 53 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 54 | |---|---|---|---|---|---|---| 55 | |9|GeoVolume|GeoVolume|体。||类|| 56 | 57 | ### 8.3.2 四面体体元构成的体 58 | 59 | `geo3dml:GeoTetrahedronVolume`表达四面体体元构成的体,其结构见[图17](#pic-17)及[表12](#tbl-12)。 60 | 61 | 图17 geo3dml:GeoTetrahedronVolume的结构 62 | 63 | ![图17 geo3dml:GeoTetrahedronVolume的结构](./pictures/8-17.png) 64 | 65 | 表12 geo3dml:GeoTetrahedronVolume子元素列表(省略名字空间) 66 | 67 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 68 | |---|---|---|---|---|---|---| 69 | |10|GeoTetrahedronVolume|GeoTetrahedronVolume|四面体体元构成的体。||类|| 70 | |10.1|Vertices|Vertices|顶点列表。|0..1||| 71 | |10.1.1||Vertex|顶点实例。|0..N|类|Vertex实例| 72 | |10.1.1.1||IndexNo|顶点元素的属性:索引号。该索引号在当前顶点列表内是唯一的,以标识该顶点。|1|非负整数|非负整数,并且在当前顶点列表内取值唯一。| 73 | |10.2|Tetrahedrons|Tetrahedrons|四面体体元列表。|0..1||| 74 | |10.2.1||Tetrahedron|四面体体元实例。|0..N|类|Tetrahedron实例| 75 | |10.2.1.1||IndexNo|四面体体元实例的属性:索引号。该索引号在当前体元列表内是唯一的,以标识该体元。|1|非负整数|非负整数,并且在当前体元列表内取值唯一。| 76 | |10.2.1.2||VertexList|四面体的顶点列表。|1|类|长度为4的gml:integerList实例。该列表引用顶点列表中顶点的索引号,以标记四面体的四个顶点。| 77 | |10.2.1.3||NeighborList|四面体的邻接四面体列表。|0..1|类|长度为4的gml:integerList实例。该列表引用体元表中四面体体元的索引号,以标记四面体的邻接体元。| 78 | 79 | `geo3dml:GeoTetrahedronVolume`是`geo3dml:GeoVolume`的派生类型,表示体元为四面体的体。其由顶点表(`Vertices`成员)及体元表(`Tetrahedrons`成员)两部分构成。顶点表记录构成该体的所有顶点(`Vertex`)。`Vertex`继承自`gml:DirectPosition`,从而可以直接记录顶点的坐标。同时,`Vertex`的属性——`IndexNo`——用于标记该顶点的索引号。该索引号在当前顶点表中必须是唯一的,以允许在体元表中通过顶点索引号标识构成体元的顶点。体元表记录四面体体元列表。对于四面体体元,`IndexNo`记录其在体元列表中的索引号;`VertexList`是包含4个非负整数的列表,列表中的元素是构成该四面体的4个顶点的索引号;`NeighborList`是包含4个整数的列表,列表中的元素是其4个邻接四面体体元的索引号,并且约定使用值`-1`表示对应的邻接体元不存在。假设四面体体元T的`VertexList`取值为`(V1,V2,V3,V4)`,`NeighborList`取值为`(T1,T2,T3,T4)`,则四面体T1是与四面体T共用顶点V1所对的三角形的四面体。 80 | 81 | ### 8.3.3 规则六面体体元构成的体 82 | 83 | `geo3dml:GeoCuboidVolume`表达规则六面体体元构成的体(不要求体元的大小一致),其结构见[图18](#pic-18)及[表13](#tbl-13)。 84 | 85 | 图18 geo3dml:GeoCuboidVolume的结构 86 | 87 | ![图18 geo3dml:GeoCuboidVolume的结构](./pictures/8-18.png) 88 | 89 | 表13 geo3dml:GeoCuboidVolume子元素列表(省略名字空间) 90 | 91 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 92 | |---|---|---|---|---|---|---| 93 | |11|GeoCuboidVolume|GeoCuboidVolume|规则六面体体元构成的体。||类|| 94 | |11.1|Vertices|Vertices|顶点列表。|0..1||| 95 | |11.1.1||Vertex|顶点实例。|0..N|类|Vertex实例。| 96 | |11.1.1.1||IndexNo|顶点元素的属性:索引号。该索引号在当前顶点列表内是唯一的,以标识该顶点。||非负整数|非负整数,并且在当前顶点列表内取值唯一。| 97 | |11.2|Cuboids|Cuboids|规则六面体体元列表。|0..1||| 98 | |11.2.1||Cuboid|规则六面体体元实例。|0..N|类|Cuboid实例。| 99 | |11.2.1.1||IndexNo|规则六面体体元实例的属性:索引号。该索引号在当前体元列表内是唯一的,以标识该体元。|1|非负整数|非负整数,并且在当前体元列表内取值唯一。| 100 | |11.2.1.2||VertexList|规则六面体的顶点列表。|1|类|长度为8的gml:integerList实例。该列表引用顶点列表中顶点的索引号,以标记规则六面体的八个顶点。| 101 | 102 | `geo3dml:GeoCuboidVolume`是`geo3dml:GeoVolume`的派生类型,表示体元为规则六面体的体。其由顶点表(`Vertices`成员)及体元表(`Cuboids`成员)两部分构成。顶点表记录构成该体的所有顶点(`Vertex`)。`Vertex`继承自`gml:DirectPosition`,从而可以直接记录顶点的坐标。同时,`Vertex`的属性——`IndexNo`——用于标记该顶点的索引号。该索引号在当前顶点表中必须是唯一的,以允许在体元表中通过顶点索引号标识构成体元的顶点。体元表记录规则六面体体元列表。对于规则六面体体元,`IndexNo`记录其在体元列表中的索引号;`VertexList`是包含8个正整数的列表,列表中的元素是构成该规则六面体的8个顶点的索引号。要求先按序保存某个侧面4个顶点的索引号,然后按同样的顺序保存与该侧面平行的另一侧面的4个顶点的索引号。不需指定规则六面体的邻接体元。 103 | 104 | `geo3dml::GeoCuboidVolume`不要求体元大小一致。体元大小一致的规则网格可参考`gml:RectifiedGrid`。 105 | 106 | ### 8.3.4 角点网格 107 | 108 | `geo3dml:GeoCornerPointGrid`表达角点网格,其结构见[图16](#pic-16)及[表14](#tbl-14)。 109 | 110 | 表14 geo3dml:GeoCornerPointGrid子元素列表(省略名字空间) 111 | 112 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 113 | |---|---|---|---|---|---|---| 114 | |12|GeoCornerPointGrid|GeoCornerPointGrid|角点网格。||类|| 115 | |12.1|Dimension|Dimension|角点网格的维度,即其沿I、J、K轴方向各自划分体元的数目。|1||长度为3的gml:integerList实例,记录角点网格沿I、J、K轴划分体元的数目。| 116 | |12.2|Pillars|Pillars|角点网格的Pillar线组成的数组。|0..1||| 117 | |12.2.1||Pillar|角点网格的Pillar线,即沿K轴延展的直线段。|0..N|类|| 118 | |12.2.1.1||HeadPos|Pillar线的首顶点。|1|类|gml:DirectPosition实例。| 119 | |12.2.1.2||TailPos|Pillar线的尾顶点。|1|类|gml:DirectPosition实例。| 120 | |12.3|Cells|Cells|角点网格的体元组成的数组。|0..1||| 121 | |12.3.1||ZValue|标记子元素Cell中记录的值的类型。|1|字符串|elevation表示海拔高程值(Z坐标);length表示与Pillar线首顶点的距离。| 122 | |12.3.2||Cell|角点网格的六面体体元。|0..N||长度为8的gml:doubleList实例,记录体元8个顶点的Z值或与Pillar首顶点的距离。| 123 | |12.3.2.1||Valid|标记本体元是否有效。|1|布尔|缺省值为true。| 124 | 125 | `geo3dml:GeoCornerPointGrid`是`geo3dml:GeoVolume`的派生类型,表示角点网格。其由`Dimension`、`Pillars`及`Cells`三部分构成。 126 | 127 | 子元素`Dimension`记录网格沿I、J、K三轴方向各自划分体元的数目。 128 | 129 | 子元素`Pillars`记录网格的`Pillar`线集合。`Pillar`线是沿K轴延展的直线段,表达的是体元的边界。设该角点网格的维度为(Ni, Nj, Nk),并以I方向为“行”、以J方向为“列”,则网格的Pillar线可记为(Nj + 1) 行、(Ni + 1) 列,总条数为 (Nj + 1) * (Ni + 1)。本元素以“行”优先的方式记录所有的Pillar线,即先记录第0行包含的第0列至第Ni列的共(Ni + 1)条Pillar线,然后记录第1行包含的第0列至第Ni列的共(Ni + 1)条Pillar线,……,最后记录第Nj行包含的第0列至第Ni列的共(Ni + 1)条Pillar线。每条Pillar线由其首尾顶点的坐标确定,即分别对应`HeadPos`和`TailPos`子元素。 130 | 131 | 子元素`Cells`记录角点网格的体元集合。设角点网格的维度为(Ni, Nj, Nk),则其所包含的体元总数为(Ni * Nj * Nk)。以I方向为“行”、J方向为“列”、K方向为“层”,本元素按行-列-层优先的顺序顺次记录体元的位置。即先记录索引值为(x, 0, 0)(其中x为整数,且x∈[0,Ni))的体元,接着记录索引值为(x, 1, 0)的体元,……,接着记录索引值为(x, 0, 1)的体元,……最后记录索引值为(x, Nj - 1, Nk - 1)的体元。角点网格中的体元是六面体,由其顶面4个顶点及底面4个顶点(称为“角点”)来确定。而这些角点均位于Pillar线上,因此仅需记录各角点的Z坐标值或其在对应Pillar线上距离Pillar线首顶点的距离即可确定角点的位置。若在坐标系I-J-K内平移该体元,使其一顶点与原点重合,并使得过该顶点的三条棱分别与对应的坐标轴的正方向重合,然后分别以该三条棱的长度为单位长度,则可以记该体元8个角点的坐标为(0,0,0)、(1,0,0)、(0,1,0)、(1,1,0)、(0,0,1)、(1,0,1)、(0,1,1)、(1,1,1)。子元素`Cell`按此顺序记录各角点的Z坐标值或其与Pillar线首顶点的距离。若记体元的索引值为(i,j,k),则上述8个角点各自所对应的Pillar线的索引值分别为:(i, j)、(i + 1, j)、(i, j + 1)、(i + 1, j + 1)、(i,j)、(i + 1, j)、(i, j + 1)、(i + 1, j + 1)。 132 | 133 | ### 8.3.5 截断规则网格 134 | 135 | `geo3dml:GeoTruncatedRegularGrid`表达顺层网格、截断矩形网格这两种结构化网格。顺层网格与截断矩形网格是沿水平面设置规则的网格模板——按指定的步长沿正交坐标轴划分矩形网格,并按此模板将模型纵向划分为柱子,最后参照模型实际界面的起伏状态对柱子做横向切分,从而得到最终的网格。其结构见[表15](#tbl-15)。 136 | 137 | 表15 geo3dml:GeoTruncatedRegularGrid子元素列表(省略名字空间) 138 | 139 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 140 | |---|---|---|---|---|---|---| 141 | |13|GeoTruncatedRegularGrid|GeoTruncatedRegularGrid|截断规则网格||类|| 142 | |13.1||PlaneGrid|格网数据。|1|类|网格在水平方向上的网格参数。| 143 | |13.1.1||Origin|水平方向上网格划分的原点。|1|类|gml:DirectPosition实例。| 144 | |13.1.2||Azimuth|平面正交坐标轴的方位角(以度数为单位)。记为Y轴正向与正北方向之间的夹角。|1|浮点数|在平面上,X轴与Y轴正交。方位角是Y轴正方向与正北方向之间的夹角。如方位角为0时,Y轴指向正北,X轴指向正东。| 145 | |13.1.3||Steps|沿X和Y轴划分网格的步长。|1||长度为2的gml:doubleList实例。列表中的两个数值分别对应沿X轴和Y轴方向的步长。| 146 | |13.1.4||Dimension|沿X和Y轴划分网格的维度,即沿X、Y方向各自划分的网格数目。|1||长度为2的gml:integerList实例。列表中的两个数值分别对应沿X轴和Y轴方向划分的网格的数目。| 147 | |13.2|Vertices|Vertices|顶点列表。|0..1|类|| 148 | |13.2.1||Vertex|顶点实例。|0..N|类|Vertex实例| 149 | |13.2.1.1||IndexNo|顶点元素的属性:索引号。该索引号在当前顶点列表内是唯一的,以标识该顶点。||非负整数|非负整数,并且在当前顶点列表内取值唯一。| 150 | |13.3|Faces|Faces|面表。|0..1|类|| 151 | |13.3.1||Face|面。|0..N|类|多个顶点围成面。| 152 | |13.3.1.1||IndexNo|面元素的属性:索引号。该索引号在当前面列表内是唯一的,以标识该面。||非负整数|非负整数,并且在当前面列表内取值唯一。| 153 | |13.3.1.2||VertexList|构成面的顶点的1列表。|1||任意长度的gml:integerList实例。该列表引用顶点索引号,标记构成该面的顶点。构成面的顶点一般是4个,也可能少于或多于4个。可能需要规定顶点连接成面的方式。| 154 | |13.4|Cells|Cells|体元列表。|0..1||| 155 | |13.4.1||Cell|体元。|0..N||多个面围成体元。| 156 | |13.4.1.1||IndexNo|体元的属性:索引号。该索引号在当前体元列表内是唯一的,以标识该体元。||非负整数|非负整数,并且在当前体元列表内取值唯一。| 157 | |13.4.1.2||I|体元的属性:对应的网格划分的I值。||非负整数|| 158 | |13.4.1.3||J|体元的属性:对应的网格划分的J值。||非负整数|| 159 | |13.4.1.4||K|体元的属性:对应的网格划分的K值。||非负整数|| 160 | |13.4.1.5||FaceList|围成体元的面的列表。|1||任意长度的gml:integerList实例。该列表引用面索引号,标记构成该体元的面。体元可以是多面体。| 161 | 162 | ### 8.3.6 广义三棱柱构成的体 163 | 164 | `geo3dml:GeoTriangularPrismVolume`表达由三棱柱体元构成的体。 165 | 166 | ## 8.4 几何数据的二进制格式 167 | 168 | ### 8.4.1 在XML文档中嵌入二进制数据流 169 | 170 | OGC定义了空间数据的二进制数据格式:WKB (Well Known Binary)。Geo3DML支持在XML文档中采用WKB规范存储几何数据:要求先按WKB规范生成几何数据的二进制数据流,之后使用Base64编码方式将二进制流转换为字符串,并将该字符串作为几何数据存储在XML文档中;同时在相应几何对象的起始XML标签中通过属性`dt:dt="base64Binary`注明其数据为二进制格式。下面的示例给出了分别用文本格式以及二进制格式表示的`gml:LineString`对象。 171 | 172 | > ```xml 173 | > 174 | > 175 | > 176 | > 0 85.6205 10 177 | > 0 63.6334 27.9083 178 | > 179 | > 180 | > 181 | > 182 | > 183 | > UEsDBBQAAAAIAGtaMS2/u6RnIAAAAIYAAAAKAAAAYm 184 | > 185 | > ``` 186 | 187 | Geo3DML中Base64编码算法采用的代码表字符包括:[A-Z],[a-z],[0-9],+,/,=。本标准所采用的Base64编码/解码算法的参考实现见“附录C:Base64编码/解码参考实现”。 188 | 189 | ### 8.4.2 扩展的几何数据的WKB格式 190 | 191 | Geo3DML扩展了GML规范定义的几何数据结构。扩展的结构包括不规则三角网(`geo3dml: GeoTin`)(见“8.2 不规则三角网”)、体(`geo3dml:GeoVolume`)(见“8.3 体元构成的体”)。按OGC WKB规范的形式,本小节定义关于`geo3dml:GeoTin`及`geo3dml:GeoVolume`的二进制格式。因为`geo3dml:GeoVolume`是抽象类型,所以本小节实际是定义了其具体的派生类型的二进制格式。 192 | 193 | + (1)扩展结构的类型代码 194 | 195 | OGC WKB为已知的几何数据结构定义了类型代码(`WKBGeometryType`),以便于解析二进制数据流时识别原始对象的类型。在其基础上,Geo3DML为`geo3dml:GeoTin`、`geo3dml:GeoVolume`的具体类型定义的类型代码分别为(见[表18](#tbl-18))。 196 | 197 | 表18 扩展的几何数据类型代码 198 | 199 | |类型|代码| 200 | |---|---| 201 | |geo3dml:Vertex|9101| 202 | |geo3dml:GeoTin|9111| 203 | |geo3dml:Triangle|9112| 204 | |geo3dml:GeoTetrahedronVolume|9113| 205 | |geo3dml:Tetrahedron|9114| 206 | |geo3dml:GeoCuboidVolume|9115| 207 | |geo3dml:Cuboid|9116| 208 | |geo3dml:GeoCornerPointGrid|9117| 209 | |geo3dml:GeoCornerPointGridPillar|9118| 210 | |geo3dml:GeoCornerPointGridCell|9119| 211 | |geo3dml:GeoTruncatedRegularGrid|9120| 212 | |geo3dml:GeoTruncatedRegularGridPlaneGrid|9121| 213 | |geo3dml:GeoTruncatedRegularGridFace|9122| 214 | |geo3dml:GeoTruncatedRegularGridCell|9123| 215 | |geo3dml:GeoTriangularPrismVolume|9124| 216 | |geo3dml:TriangularPrism|9125| 217 | 218 | + (2)扩展结构的WKB格式 219 | 220 | 参照OGC WKB格式定义的关于扩展结构的二进制数据格式如下(扩展的结构全为三维几何数据)。 221 | 222 | > ```c 223 | > WKBVertex { 224 | > byte byteOrder; 225 | > static uint32 wkbType=9101; 226 | > uint32 indexNo; // 顶点的序号 227 | > PointZ point; // 顶点的坐标 228 | > }; 229 | > 230 | > WKBTriangle { 231 | > byte byteOrder; 232 | > static uint32 wkbType=9112; 233 | > uint32 indexNo; // 三角形的序号 234 | > uint32[3] vertexIndices; // 3个顶点的序号列表 235 | > uint32[3] neighborIndices; // 3个邻接三角型的序号列表 236 | > }; 237 | > 238 | > WKBGeoTin { 239 | > byte byteOrder; 240 | > static uint32 wkbType=9111; 241 | > uint32 numVertices; // 顶点的数目 242 | > WKBVertex[numVertices] vertices; // 顶点列表 243 | > uint32 numTriangles; // 三角形的数目 244 | > WKBTriangle[numTriangles] triangles; // 三角形列表 245 | > }; 246 | > 247 | > WKBTetrahedron { 248 | > byte byteOrder; 249 | > static uint32 wkbType=9114; 250 | > uint32 indexNo; // 四面体的序号 251 | > uint32[4] vertexIndices; // 4个顶点的序号列表 252 | > uint32[4] neighborIndices; // 4个邻接四面体的序号列表 253 | > }; 254 | > 255 | > WKBGeoTetrahedronVolume { 256 | > byte byteOrder; 257 | > static uint32 wkbType=9113; 258 | > uint32 numVertices; // 顶点的数目 259 | > WKBVertex[numVertices] vertices; // 顶点列表 260 | > Uint32 numCells; // 体元的数目 261 | > WKBTetrahedron[numCells] tetrahedrons; // 四面体列表 262 | > }; 263 | > 264 | > WKBCuboid { 265 | > byte byteOrder; 266 | > static uint32 wkbType=9116; 267 | > uint32 ndexNo; // 规则六面体的序号 268 | > uint32[8] vertexIndices; // 8个顶点的序号列表 269 | > }; 270 | > 271 | > WKBGeoCuboidVolume { 272 | > byte byteOrder; 273 | > static uint32 wkbType=9115; 274 | > uint32 numVertices; // 顶点的数目 275 | > WKBVertex[numVertices] vertices; // 顶点列表 276 | > uint32 numCells; // 体元的数目 277 | > WKBCuboid[numCells] cuboids; // 规则六面体列表 278 | > }; 279 | > 280 | > WKBGeoCornerPointGridPillar { 281 | > byte byteOrder; 282 | > static uint32 wkbType=9118; 283 | > PointZ headPos; // Pillar线的首顶点 284 | > PointZ tailPos; // Pillar线的尾顶点 285 | > }; 286 | > 287 | > WKBGeoCornerPointGridCell { 288 | > byte byteOrder; 289 | > static uint32 wkbType=9119; 290 | > bool valid; // 为true时表示该体元有效,否则表示无效 291 | > double[8] positions; // 体元8顶点在各自Pillar上的位置 292 | > }; 293 | > 294 | > WKBGeoCornerPointGrid { 295 | > byte byteOrder; 296 | > static uint32 wkbType=9117; 297 | > uint32 dimI; // 沿I轴划分体元的个数 298 | > uint32 dimJ; // 沿J轴划分体元的个数 299 | > uint32 dimK; // 沿K轴划分体元的个数 300 | > // 如“8.3.4 角点网格”所述,以I方向为“行”、以J方向为“列”,则网格的Pillar线可记为(dimJ + 1) 行、(dimI + 1) 列,总条数为 (dimJ + 1) * (dimI + 1),可记为numPillars。下面的成员按序记录每条Pillar线的位置。 301 | > WKBGeoCornerPointGridPillar[numPillars] pillars; 302 | > // 如“8.3.4 角点网格”所述,每个体元由其8个顶点的位置来描述其具体位置。网格中体元的总数为:numCells = dimI * dimJ * dimK。下面的成员按序记录每个体元的位置。 303 | > WKBGeoCornerPointGridCell[numCells] cells; 304 | > }; 305 | > 306 | > WKBGeoTruncatedRegularGridPlaneGrid { 307 | > byte byteOrder; 308 | > static uint32 wkbType=9121; 309 | > PointZ origin; // 平面网格划分的原点 310 | > double azimuth; // 平面网格坐标轴Y轴正方向与正北方之间的夹角。单位:度。 311 | > double[2] steps; // 平面网格单元沿X、Y轴的边长 312 | > uint32[2] dimension; // 平面上沿X、Y轴各自划分的网格的数目 313 | > }; 314 | > 315 | > WKBGeoTruncatedRegularGridFace { 316 | > byte byteOrder; 317 | > static uint32 wkbType=9122; 318 | > uint32 indexNo; // 面片的序号 319 | > uint32 numVertices; // 构成该面片的顶点的数目 320 | > uint32[numVertices] vertexIndices; // 构成面片的顶点的序号列表 321 | > }; 322 | > 323 | > WKBGeoTruncatedRegularGridCell { 324 | > byte byteOrder; 325 | > static uint32 wkbType=9123; 326 | > uint32 indexNo; // 体元的序号 327 | > uint32 numFaces; // 构成该体元的面片的数目 328 | > uint32[numFaces] faceIndices; // 构成体元的面片的序号列表 329 | > uint32 i; // 体元对应的网格划分的I值 330 | > uint32 j; // 体元对应的网格划分的J值 331 | > uint32 k; // 体元对应的网格划分的K值 332 | > }; 333 | > 334 | > WKBGeoTruncatedRegularGrid { 335 | > byte byteOrder; 336 | > static uint32 wkbType=9120; 337 | > WKBGeoTruncatedRegularGridPlaneGrid planeGrid; // 平面网格参数 338 | > uint32 numVertices; // 顶点的数目 339 | > WKBVertex[numVertices] vertices; // 顶点列表 340 | > uint32 numFaces; // 面片的数目 341 | > WKBGeoTruncatedRegularGridFace[numFaces] faces; // 面片列表 342 | > uint32 numCells; // 体元的数目 343 | > WKBGeoTruncatedRegularGridCell[numCells] cells; // 体元列表 344 | > }; 345 | > 346 | > WKBTriangularPrism { 347 | > byte byteOrder; 348 | > static uint32 wkbType=9125; 349 | > uint32 indexNo; // 三棱柱的序号 350 | > WKBTriangle topTriangle; // 三棱柱的顶部三角形 351 | > WKBTriangle bottomTriangle; // 三棱柱的底部三角形 352 | > uint32[3] neighborIndices; // 邻接三棱柱的序号列表 353 | > }; 354 | > 355 | > WKBGeoTriangularPrismVolume { 356 | > byte byteOrder; 357 | > static uint32 wkbType=9124; 358 | > uint32 numVertices; // 顶点的数目 359 | > WKBVertex[numVertices] vertices; // 顶点列表 360 | > uint32 numPrisms; // 棱柱的数目 361 | > WKBTriangularPrism[numPrisms] prisms; // 棱柱列表 362 | > }; 363 | > ``` 364 | -------------------------------------------------------------------------------- /doc/9.0-属性场数据模块.md: -------------------------------------------------------------------------------- 1 | # 9 属性场数据模块 2 | 3 | ## 9.1 数据模型 4 | 5 | Geo3DML属性场模型用于描述沿几何对象所在空间分布的地学属性场信息,如分布于某曲面的顶点集合中的地学属性。几何对象中描述空间位置和形态的单元包括顶点(Vertex)、棱(Edge)、面元(Face)以及体元(Voxel)。Geo3DML的属性场模型支持在这些单元上记录属性场信息。不同维度几何对象上可记录地学属性的位置见[表19](#tbl-19)。 6 | 7 | 表19 不同维度几何对象上可记录地学属性的位置 8 | 9 | |维度|几何单元|可记录属性的位置| 10 | |---|---|---| 11 | |0|点|顶点| 12 | |1|线|顶点、棱| 13 | |2|面元(如三角形)|顶点、棱、面元| 14 | |3|体元|顶点、棱、面元、体元| 15 | 16 | ## 9.2 实现描述 17 | 18 | 按GML规范,场数据可采用覆盖(Coverage)数据结构表达。按此数据结构,属性场是一个由空间位置向属性值的映射,空间位置是定义域,属性值是值域。Geo3DML定义了`geo3dml:GeoDiscreteCoverage`作为对`gmlcov:AbstractDiscreteCoverage`的扩展,支持设置属性场定义域所属的超集,如定义域可能是某几何对象的顶点(或棱或面元或体元)集合的子集。`geo3dml:GeoDiscreteCoverage`的结构见[图20](#pic-20)及[表20](#tbl-20)。 19 | 20 | 图20 geo3dml:GeoDiscreteCoverage的结构 21 | 22 | ![图20 geo3dml:GeoDiscreteCoverage的结构](./pictures/9-20.png) 23 | 24 | 表20 geo3dml:GeoDiscreteCoverage子元素列表(省略名字空间) 25 | 26 | |序号|子集/实体名|元素名|定义|出现次数|类型|值域| 27 | |---|---|---|---|---|---|---| 28 | |15|GeoDiscreteCoverage|GeoDiscreteCoverage|属性场数据结构。||类|| 29 | |15.1|DomainSetExt|DomainSetExt|属性场数据定义域的扩展定义:描述定义域所属的超集。|0..1||| 30 | |15.1.1||SamplingFrame|所关联的几何对象。该几何对象的某组成元素的集合是属性场数据定义域的超集。|1|类|对gml:AbstractGeometry实例的引用。| 31 | |15.1.2||SamplingTarget|指示SamplingFrame所指向的几何对象中构成定义域超集的元素。|1|字符串|枚举值:VERTEX(顶点),EDGE(棱),FACE(面元),VOXEL(体元)。| 32 | |15.2||Version|属性模型的版本。|1|字符串|如“1.2.1”。| 33 | |15.2.1||Timestamp|版本的属性:版本对应的创建时间。|1|日期|如“2018-04-17T14:04:33”。| 34 | 35 | `geo3dml:GeoDiscreteCoverage`继承自`gmlcov:AbstractDiscreteCoverage`,而`gmlcov: AbstractDiscreteCoverage`结构中的`gml:domainSet`用于定义属性场的定义域。当`gml:domainSet`定义的值为空时,`geo3dml:DomainSetExt`所描述的集合就是定义域。当`gml:domainSet`定义的值不为空时,`geo3dml:DomainSetExt`所描述的集合是`gml:domainSet`所记录的定义域的超集。此外,`gml:name`可作为属性场的标识,可以被属性场数据可视化参数的元素`se:Geometry`引用以指定要绘制的数据(见“10.7 属性场数据参数”)。 36 | -------------------------------------------------------------------------------- /doc/README.md: -------------------------------------------------------------------------------- 1 | Geo3DML(v1.0) 2 | === 3 | 4 | 三维地质模型数据交换格式(Geo3DML) 5 | 6 | 中国地质调查局地质调查技术标准(DD2015-06) 7 | 8 | [前言](./0.0-前言.md) 9 | 10 | [引言](./0.1-引言.md) 11 | 12 | [1 范围](./1.0-范围.md) 13 | 14 | [2 规范性引用文件](./2.0-规范性引用文件.md) 15 | 16 | [3 术语和定义](./3.0-术语和定义.md) 17 | 18 | [4 缩略语和符号](./4.0-缩略语和符号.md) 19 | 20 | [5 Geo3DML构成](./5.0-Geo3DML构成.md) 21 | 22 | [6 三维数据包模块](./6.0-三维数据包模块.md) 23 | 24 | [7 地质要素模块](./7.0-地质要素模块.md) 25 | 26 | [8 几何数据模块](./8.0-几何数据模块.md) 27 | 28 | [9 属性场数据模块](./9.0-属性场数据模块.md) 29 | 30 | [10 可视化参数模块](./10.0-可视化参数模块.md) 31 | 32 | [11 元数据模块](./11.0-元数据模块.md) 33 | 34 | [12 基础数据结构模块](./12.0-基础数据结构模块.md) 35 | 36 | [附录A:Geo3DML XML Schema](./附录A-Geo3DML-XML-Schema.md) 37 | 38 | [附录B:Geo3DML示例数据](./附录B-Geo3DML示例数据.md) 39 | 40 | [附录C:Base64编码/解码参考实现](./附录C-Base64编码解码参考实现) 41 | 42 | [参考文献](./参考文献.md) 43 | -------------------------------------------------------------------------------- /doc/pictures/10-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-21.png -------------------------------------------------------------------------------- /doc/pictures/10-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-22.png -------------------------------------------------------------------------------- /doc/pictures/10-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-23.png -------------------------------------------------------------------------------- /doc/pictures/10-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-24.png -------------------------------------------------------------------------------- /doc/pictures/10-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-25.png -------------------------------------------------------------------------------- /doc/pictures/10-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-26.png -------------------------------------------------------------------------------- /doc/pictures/10-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-27.png -------------------------------------------------------------------------------- /doc/pictures/10-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-28.png -------------------------------------------------------------------------------- /doc/pictures/10-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/10-29.png -------------------------------------------------------------------------------- /doc/pictures/11-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/11-30.png -------------------------------------------------------------------------------- /doc/pictures/11-31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/11-31.png -------------------------------------------------------------------------------- /doc/pictures/11-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/11-32.png -------------------------------------------------------------------------------- /doc/pictures/11-33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/11-33.png -------------------------------------------------------------------------------- /doc/pictures/11-34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/11-34.png -------------------------------------------------------------------------------- /doc/pictures/4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/4-1.png -------------------------------------------------------------------------------- /doc/pictures/4-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/4-2.png -------------------------------------------------------------------------------- /doc/pictures/5-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/5-3.png -------------------------------------------------------------------------------- /doc/pictures/5-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/5-4.png -------------------------------------------------------------------------------- /doc/pictures/6-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/6-10.png -------------------------------------------------------------------------------- /doc/pictures/6-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/6-5.png -------------------------------------------------------------------------------- /doc/pictures/6-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/6-6.png -------------------------------------------------------------------------------- /doc/pictures/6-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/6-7.png -------------------------------------------------------------------------------- /doc/pictures/6-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/6-8.png -------------------------------------------------------------------------------- /doc/pictures/6-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/6-9.png -------------------------------------------------------------------------------- /doc/pictures/7-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/7-11.png -------------------------------------------------------------------------------- /doc/pictures/7-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/7-12.png -------------------------------------------------------------------------------- /doc/pictures/8-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/8-13.png -------------------------------------------------------------------------------- /doc/pictures/8-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/8-14.png -------------------------------------------------------------------------------- /doc/pictures/8-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/8-15.png -------------------------------------------------------------------------------- /doc/pictures/8-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/8-16.png -------------------------------------------------------------------------------- /doc/pictures/8-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/8-17.png -------------------------------------------------------------------------------- /doc/pictures/8-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/8-18.png -------------------------------------------------------------------------------- /doc/pictures/8-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/8-19.png -------------------------------------------------------------------------------- /doc/pictures/9-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/doc/pictures/9-20.png -------------------------------------------------------------------------------- /doc/参考文献.md: -------------------------------------------------------------------------------- 1 | # 参考文献 2 | 3 | [1] 龚健雅, 夏宗国. 矢量与栅格集成的三维数据模型[J]. 武汉测绘科技大学学报, 1997, 22: 7-15; 4 | 5 | [2] 姜作勤. 国内外区域地质调查全过程信息化的现状与特点[J]. 地质通报, 2008, 27(7):956-964; 6 | 7 | [3] 李景朝, 张振芳. 地质调查信息化标准体系建设[C].中国地质调查局发展研究中心. 2011; 8 | 9 | [4] 李清泉, 李德仁. 三维空间数据模型集成的概念框架研究[J]. 测绘学报, 1998, 27: 325-330; 10 | 11 | [5] Arne Schilling, Thomas H. Kolbe. Draft for Candidate OpenGIS® Web 3D Service Interface Standard. OGC document reference number: OGC 09-104r1, Version: 0.4.0, 2010-01-20; 12 | 13 | [6] Berg, Richard C., Mathers, Stephen J.,Kessler, Holger,Keefer, Donald A., eds. Synopsis of current three dimensional geological mapping and modeling in Geological Survey organizations[M]. Ilinois State Geological Survey, Circular 578, 2011, http://nora.nerc.ac.uk/17095/; 14 | 15 | [7] CityGML: http://www.opengeospatial.org/standards/citygml/; 16 | 17 | [8] Eric Boisvert and Boyan Brodaric. GroundWater Markup Language (GWML) – enabling groundwater data interoperability in spatial data infrastructures [J]. Journal of Hydroinformatics,2011, 14(1): 93-107; 18 | 19 | [9] GeoSciML: http://www.geosciml.org/; 20 | 21 | [10] I. F. Smith. Digital Geoscience Spatial Model Project Final Report. British Geological Survey Occasional Publication, 2005, No.9. http://www.bgs.ac.uk/downloads/start.cfm?id=535; 22 | 23 | [11] INSPIRE. Draft Technical Guidance for INSPIRE Download Services. 2009. Available from http://inspire.jrc.ec.europa.eu/documents/Network_Services/INSPIRE%20Draft%20Technical%20Guidance%20Download%20(Version%202.0).pdf; 24 | 25 | [12] OneGeology, A memorandum of understanding between UNESCO, CGMW,IUGS, IYPE, ISCGM and an international consortium of geological surveys to support global geoscience mapping and create an international coordinating committee. 2007. Available from http://www.onegeology.org/docs/MoU-signed-July2007.pdf; 26 | 27 | [13] OneGeology-E,, eContentplus OneGeology-Europe project, 2008. Available from http://ec.europa.eu/information_society/activities/econtentplus/projects/geo/onegeologyeurope/index_en.htm; 28 | 29 | [14] S.J.D. Cox. XMML–a standards conformant XML language for transfer of exploration data[C]. Proceedings, ASEG/PESA Geophysical Conference and Exhibition,Sydney 2004; 30 | 31 | [15] Seymon, A., Wyborn, L., Simons, B.,, Raymond, O., Andrews, G., Denaro, T. The Australian Mineral Occurrence data exchange model. Geoinformatics 2007 Conference, Paper No.3-23. Available from http://gsa.confex.com/gsa/2007GE/finalprogram/abstract_122928.htm; 32 | 33 | [16] Siyka Zlatanovaa, Alias Abdul Rahmanb, Wenzhong Shi. Topological models and frameworks for 3D spatial objects[J]. Computers & Geosciences,2004, 30:419-428; 34 | 35 | [17] Web3D, Information technology computer graphics and image processing-Extensible 3D (X3D). ISO/IEC19775: 2004. http://www.web3d.org/x3d/specifications/; 36 | 37 | [18] OGC WFS: http://www.opengeospatial.org/standards/wfs; 38 | 39 | [19] OGC WMS: http://www.opengeospatial.org/standards/wms; 40 | 41 | [20] OGC SLD: http://www.opengeospatial.org/standards/sld; 42 | 43 | [21] W3C XLink: XML Linking Language (XLink) Version 1.0. W3C Recommendation, 2001年7月; 44 | 45 | [22] W3C XMLName:Namespaces in XML. W3C Recommendation, 1999年1月; 46 | 47 | [23] W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures. W3C Recommendation, 2012年4月; 48 | 49 | [24] W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. W3C Recommendation, 2012年4月. 50 | -------------------------------------------------------------------------------- /doc/附录A-Geo3DML-XML-Schema.md: -------------------------------------------------------------------------------- 1 | # 附录A:Geo3DML XML Schema 2 | 3 | **(规范性附录)** 4 | 5 | 本标准的完整XML Schema定义包括如下11个文件: 6 | 7 | (1)Geo3DML.xsd 8 | 9 | (2)Geo3DMap.xsd 10 | 11 | (3)Geo3DModel.xsd 12 | 13 | (4)GeoFeature.xsd 14 | 15 | (5)GeoFeatureClass.xsd 16 | 17 | (6)GeoGeometry.xsd 18 | 19 | (7)GeoProperty.xsd 20 | 21 | (8)Geo3DStyle.xsd 22 | 23 | (9)Geo3DStyleLib.xsd 24 | 25 | (10)GeoMetaData.xsd 26 | 27 | (11)GeoBasicType.xsd 28 | 29 | 上述文件的具体内容见xsd目录。 30 | -------------------------------------------------------------------------------- /doc/附录B-Geo3DML示例数据.md: -------------------------------------------------------------------------------- 1 | # 附录B:Geo3DML示例数据 2 | 3 | **(资料性附录)** 4 | 5 | 见examples目录。 -------------------------------------------------------------------------------- /doc/附录C-Base64编码解码参考实现.md: -------------------------------------------------------------------------------- 1 | # 附录C:Base64编码/解码参考实现 2 | 3 | **(资料性附录)** 4 | 5 | 见文件`xsd/base64.h`。 -------------------------------------------------------------------------------- /examples/data/README.md: -------------------------------------------------------------------------------- 1 | 这是原Geo3DML(v1.0)标准文档“附录B:Geo3DML示例数据”的内容。 2 | 3 | 本附录给出的Geo3DML编码示例数据记录了一个名为“示例项目”的数据交换项目(文件project.xml)。该项目包含的数据包括: 4 | 5 | + 一个名为“钻孔_ZK0”的描述某钻孔的地质模型(文件model_drill.xml)及其对应的三维可视化结果——名为“ZK0”的三维地质图(文件map_drill.xml); 6 | 7 | + 一个名为“剖面_m1”的描述某剖面的地质模型(文件model_section.xml)及其对应的三维可视化结果——名为“m1”的三维地质图(文件map_section.xml); 8 | 9 | + 地质体模型示例: 10 | 11 | - model_Volume_1.xml:规则网格体,四面体单元组成的体,长方体单元组成的体。 12 | 13 | - model_Volume_2.xml:TIN面描述的封闭地质体,截断规则网格地质体,以及广义三棱柱地质体。 14 | 15 | 该示例数据由如下8个文件组成: 16 | 17 | + [project.xml](./project.xml) 18 | 19 | + [model_drill.xml](./model_drill.xml) 20 | 21 | + [model_section.xml](./model_section.xml) 22 | 23 | + [model_Volume_1.xml](./model_Volume_1.xml) 24 | 25 | + [model_Volume_2.xml](./model_Volume_2.xml) 26 | 27 | + [map_drill.xml](./map_drill.xml) 28 | 29 | + [map_section.xml](./map_section.xml) 30 | 31 | + [map_stratum.xml](./map_stratum.xml) 32 | 33 | 该示例的展示效果如下图所示: 34 | 35 | ![示例效果(example.png)](./example.png) -------------------------------------------------------------------------------- /examples/data/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/examples/data/example.png -------------------------------------------------------------------------------- /examples/data/map_drill.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | ZK0 11 | 图的说明信息。 12 | 13 | 14 | 15 | ZK0-Mark-Layer 16 | 17 | 18 | 39 | 40 | 41 | 42 | 43 | 44 | ZK0-Stratum-Layer 45 | 46 | 47 | 128 | 129 | 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /examples/data/map_stratum.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 地层 11 | 地层的说明信息:示例地层。 12 | 13 | 14 | 15 | 地层 16 | 17 | 18 | 52 | 53 | 54 | 55 | 56 | 57 | 地层-体数据 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /examples/data/model_Volume_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 体数据示例模型-1 13 | 3DModel 14 | 15 | 16 | 17 | 18 | 19 | 20 | 模型创建人的名字 21 | 22 | 23 | 24 | 单位名 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 010-87654321 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 北京市西城区阜成门外大街45号 43 | 44 | 45 | mail@example.com 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 2013-11-13 56 | 57 | 58 | 59 | 60 | 61 | 关于体数据模型的示例,包括规则网格体、四面体单元体、长方体单元体。 62 | 1.0.0 63 | 64 | 65 | EPSG 66 | 4526 67 | 68 | 69 | 大地高程系 70 | 71 | 72 | XX软件 73 | vX.X.X 74 | 工程地质 75 | 76 | 77 | 78 | 79 | 地层体 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 地层C 97 | 98 | 99 | 石门组 100 | 101 | 102 | 白云岩 103 | 104 | 105 | 106 | 107 | 2.3 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -1 -1 -1 117 | 6 5 3 118 | 119 | 120 | I J K 121 | 122 | 43.21 11.3 25.8 123 | 124 | 4.8 4.8 2 125 | 0 10 0 126 | 0 0 6.8 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 地层D 135 | 136 | 137 | 雾迷山组 138 | 139 | 140 | 砂岩 141 | 142 | 143 | 144 | 145 | 2.3 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 0 120 10 154 | 100 120 10 155 | 200 120 10 156 | 0 170 10 157 | 100 170 10 158 | 200 170 10 159 | 20 130 110 160 | 100 130 110 161 | 180 130 110 162 | 20 160 110 163 | 100 160 110 164 | 180 160 110 165 | 166 | 167 | 168 | 0 1 3 6 169 | 170 | 171 | 6 7 1 10 172 | 173 | 174 | 6 3 10 1 175 | 176 | 177 | 6 10 3 9 178 | 179 | 180 | 1 4 3 10 181 | 182 | 183 | 1 4 10 5 184 | 185 | 186 | 1 10 7 8 187 | 188 | 189 | 1 2 5 8 190 | 191 | 192 | 5 8 10 1 193 | 194 | 195 | 5 10 8 11 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 地层E 206 | 207 | 208 | 雾迷山组 209 | 210 | 211 | 白云岩 212 | 213 | 214 | 215 | 216 | 2.3 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 0 200 10 225 | 0 300 10 226 | 100 300 10 227 | 100 250 10 228 | 100 200 10 229 | 200 200 10 230 | 200 250 10 231 | 200 275 10 232 | 150 275 10 233 | 150 250 10 234 | 0 200 110 235 | 0 300 110 236 | 100 300 110 237 | 100 200 110 238 | 100 250 90 239 | 100 200 90 240 | 200 200 90 241 | 200 250 90 242 | 200 250 60 243 | 200 275 60 244 | 150 275 60 245 | 150 250 60 246 | 247 | 248 | 249 | 0 4 2 1 10 13 12 11 250 | 251 | 252 | 4 5 6 3 15 16 17 14 253 | 254 | 255 | 6 7 8 9 18 19 20 21 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | -------------------------------------------------------------------------------- /examples/data/model_drill.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 钻孔_ZK0 12 | Drill 13 | 14 | 15 | 16 | 17 | 18 | 19 | 模型创建人的名字 20 | 21 | 22 | 23 | 单位名 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 010-87654321 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 2013-11-13T14:20:33 48 | 49 | 50 | 51 | 52 | 53 | 钻孔是一种地质模型,刻画地质现象沿钻孔轨迹线的空间分布规律。 54 | 1.0.0 55 | 56 | 57 | EPSG 58 | 4526 59 | 60 | 61 | 国家高程系 62 | 1985年国家高程系 63 | 64 | 65 | XX工具 66 | vXX.XX 67 | 工程地质 68 | 69 | 70 | 71 | 72 | Drill Mark 73 | 74 | 75 | 76 | 可选的属性字段描述信息:上属性。 77 | 78 | 79 | 80 | 81 | 下属性。 82 | 83 | 84 | 85 | 86 | 断层编号。 87 | 88 | 89 | 90 | 91 | 92 | 93 | Mark-0 94 | 95 | 96 | 97 | -1 98 | 99 | 100 | 101 | 102 | M 103 | 104 | 105 | 106 | 107 | 0 108 | 109 | 110 | 111 | 112 | 113 | 114 | 0 0 100 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | Mark-1 123 | 124 | 125 | 126 | M 127 | 128 | 129 | 130 | 131 | C 132 | 133 | 134 | 135 | 136 | 0 137 | 138 | 139 | 140 | 141 | 142 | 143 | 0 0 70 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | Mark-2 152 | 153 | 154 | 155 | C 156 | 157 | 158 | 159 | 160 | A 161 | 162 | 163 | 164 | 165 | 0 166 | 167 | 168 | 169 | 170 | 171 | 172 | 0 0 40 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | Mark-3 181 | 182 | 183 | 184 | A 185 | 186 | 187 | 188 | 189 | -2 190 | 191 | 192 | 193 | 194 | 0 195 | 196 | 197 | 198 | 199 | 200 | 201 | 0 0 10 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | Stratum 213 | 214 | 215 | 216 | 地层的名字。 217 | 218 | 219 | 220 | 221 | 222 | 223 | Stratum-0 224 | 225 | 226 | 227 | M 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 0 0 100 236 | 0 0 70 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | Stratum-1 246 | 247 | 248 | 249 | C 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 0 0 70 258 | 0 0 40 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | Stratum-2 268 | 269 | 270 | 271 | A 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 0 0 40 280 | 0 0 10 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | -------------------------------------------------------------------------------- /examples/data/project.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 示例项目 8 | 9 | 示例数据(Geo3DML v1.0)。 10 | 11 | xx项目 12 | 项目编号 13 | 2012-5-16 14 | 2013-12-31 15 | 建模项目承担单位名字 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /examples/data/岩石.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WuZixing/Geo3DML/8cb48036cae5fe0ef348f0cc0bd86bce72f03e7b/examples/data/岩石.jpg -------------------------------------------------------------------------------- /xsd/Geo3DML.xsd: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 本文档按XMLSchema标准定义了三维地质模型数据交换格式的XML文件结构。 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 项目的定义。项目元素是被交换数据的根元素。项目中可包含多个geo3dml:Geo3DModel子元素和多个geo3dml:Geo3DMap子元素。 20 | 21 | 22 | 23 | 24 | 25 | 项目的名字。 26 | 27 | 28 | 29 | 30 | 三维地质项目元数据。 31 | 32 | 33 | 34 | 35 | 全局可视化参数。 36 | 37 | 38 | 39 | 40 | 项目中包含的geo3dml:Geo3DModel元素。 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 项目中包含的geo3dml:Geo3DMap元素。 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 62 | 63 | 64 | 65 | 66 | 67 | 68 | 项目元素是被交换数据的根元素。项目中包含geo3dml:GeoModel元素和geo3dml:Geo3DMap元素。 69 | 70 | 71 | 72 | 73 | 74 | 75 | 项目中地质模型成员类型的定义。 76 | gml:AbstractMemberType用于定义集合与成员之间的关系,包含了描述成员与其宿主之间关系的gml:OwnershipAttributeGroup属性。 77 | gml:AssociationAttributeGroup用于提供XLink支持能力。 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 项目中地质图成员类型的定义。 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /xsd/Geo3DMap.xsd: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 此文档定义三维地质图的XML文档结构。 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 三维地质图的类型定义。地质图是地质模型的图形化表达结果。地质图由多个图层组成,每个图层将某地质要素类中的地质要素与其对应的可视化参数关联起来。 20 | 21 | 22 | 23 | 24 | 25 | 地质图的名字。 26 | 27 | 28 | 29 | 30 | 关于该地质图的说明信息。 31 | 32 | 33 | 34 | 35 | 地质图中包含的图层。 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 三维地质图中图层的类型定义。图层是某地质要素类中地质要素的几何属性的可视化结果。图层定义了地质要素与其可视化参数的关联方法。 55 | 56 | 57 | 58 | 59 | 60 | gml:AbstractGMLType定义的成员gml:name即为视图的名字。 61 | 62 | 63 | 64 | 65 | 图层所关联的地质要素类。 66 | 67 | 68 | 69 | 70 | 图层所关联的关于地质要素的可视化参数。 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /xsd/Geo3DModel.xsd: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 此文档定义地质模型(geo3dml:Geo3DModel)的XML文档结构。 11 | 12 | 13 | 14 | 16 | 18 | 19 | 20 | 21 | 地质模型类型的定义。地质模型由多个地质要素类(geo3dml:GeoFeatureClass)组成,同时也描述地质要素之间的关系。 22 | 23 | 24 | 25 | 26 | 地质模型的名字。 27 | 28 | 29 | 30 | 31 | 地质模型的类型。 32 | 33 | 34 | 35 | 36 | 37 | 钻孔 38 | 39 | 40 | 41 | 42 | 剖面 43 | 44 | 45 | 46 | 47 | 三维地质模型 48 | 49 | 50 | 51 | 52 | 等值图 53 | 54 | 55 | 56 | 57 | 其它 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 地质模型元数据。 66 | 67 | 68 | 69 | 70 | 地质模型中包含的地质要素类。 71 | 72 | 73 | 74 | 76 | 77 | 78 | 79 | 80 | 81 | 模型中地质要素之间的关系。 82 | 83 | 84 | 85 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 地质模型的ID。ID相同时表示同一个模型的数据,以支持多文件数据的关联。 94 | 95 | 96 | 97 | 98 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /xsd/Geo3DStyle.xsd: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 参考OGC SLD sld:UserStyle的结构定义了关于geo3dml:Geo3DLayer的可视化参数。本方案没有直接引用SLD规范的定义,因为SLD是专门为WMS服务提供支撑的,需要与WMS规范的其它内容协同工作。而本方案的目的在于提供地质模型的中间交换格式,不刻意追求与WMS紧耦合关系。但是,本文档所定义的geo3dml:Geo3DStyle结构可以方便地转换为sld:UserStyle结构,从而为WMS等其它服务提供支持。此外,本文档还针对3D可视化的要求,在OGC SE规范的基础上定义了geo3dml:GeoPointSymbolizer、geo3dml:GeoLineSymbolizer和geo3dml:GeoSurfaceSymbolizer:主要是在SE规范相应对象的基础上加上了3D可视化的光照、材质与纹理参数。 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 针对geo3dml:Geo3DLayer定义的地质模型视图中要素空间属性的可视化参数。本结构的定义参考了OGC SLD规范中关于sld:UserStyle结构的定义。已废除,保留代码。 39 | 40 | 41 | 42 | 43 | 44 | 45 | 从gml:AbstractGMLType继承了gml:id、gml:name、gml:description等成员,以便于其它对象通过gml:id引用本对象,或者将其转换为带唯一名字属性的sld:UserStyle对象。 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | Geo3DLayer元素的子元素Styles进一步包含若干Style元素,Style元素的类型即为Geo3DStylePropertyType。本元素引用了Geo3DStyle元素。 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 扩展se:PointSymbolizerType类型,加入geo3dml:Material材质参数。 80 | 81 | 82 | 83 | 84 | 85 | 86 | 绘制点时忽略材质参数中的纹理。 87 | 88 | 89 | 90 | 91 | 点符号,遵照《GB/T958-2015 区域地质图图例》中关于点状要素图例规定,本元素存放图例代码,如:GPOB010001。 92 | 93 | 94 | 95 | 96 | 97 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 扩展se:LineSymbolizerType类型,加入geo3dml:Material材质参数。 116 | 117 | 118 | 119 | 120 | 121 | 122 | 绘制线时忽略材质参数中的纹理。 123 | 124 | 125 | 126 | 127 | 线符号,遵照《GB/T958-2015 区域地质图图例》中关于线状要素图例规定,本元素存放图例代码,如:GSFA010030。 128 | 129 | 130 | 131 | 132 | 133 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 曲面(如TIN)的可视化参数。 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 面的正面材质。 160 | 161 | 162 | 163 | 164 | 面的反面材质。 165 | 166 | 167 | 168 | 169 | 顶点的可视化参数(可选)。 170 | 171 | 172 | 173 | 174 | 线框的可视化参数(可选)。 175 | 176 | 177 | 178 | 179 | 180 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 属性场的可视化参数。可定义多个se:Rule,从而在一个符号中完整定义属性场各种属性的可视化参数。 199 | 200 | 201 | 202 | 203 | 204 | 205 | 用于指定要被绘制的属性场的名字。 206 | 207 | 208 | 209 | 210 | 设置属性场中对象的属性匹配条件,为几何对象配置相应的可视化参数。 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 三维可视化材质结构,包括灯光、颜色等参数。 230 | 231 | 232 | 233 | 234 | 235 | 基础颜色,物体本身颜色,使用自定义的颜色类型。也包含透明度参数。 236 | 237 | 238 | 239 | 240 | 基础纹理参数,支持图像纹理和GB符号填充。 241 | 242 | 243 | 244 | 245 | 246 | 法向纹理。使用其RGB通道的值。 247 | 248 | 249 | 250 | 251 | 环境光遮蔽纹理。仅使用其R通道的值。 252 | 253 | 254 | 255 | 256 | 如果对象自身发光,该参数指定其颜色。 257 | 258 | 259 | 260 | 261 | 262 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | Physically Based Rendering (PBR)材质参数。 279 | 280 | 281 | 282 | 283 | 284 | 金属度,一个0到1之间的浮点数,0表示非金属,1表示完全金属。 285 | 286 | 287 | 288 | 289 | 290 | 粗糙度,一个0到1之间的浮点数,0表示非常光滑的表面,反射光会集中形成清晰的高光;而1表示非常粗糙的表面,反射光会被散射,形成较模糊的反射。 291 | 292 | 293 | 294 | 295 | 296 | 镜面反射颜色,可选,用于非金属材质的高光颜色。 297 | 298 | 299 | 300 | 301 | 折射率,仅适用于透明或半透明材质。 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 纹理结构。参考CityGML的Appearance模块中关于AbstractTextureType的定义。 313 | 314 | 315 | 316 | 317 | 318 | 图像文件地址。 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 使用《GB/T958-2015 区域地质图图例》中定义的区填充符号。需要应用程序依据定义实时生成纹理图片。 328 | 329 | 330 | 331 | 332 | 《GB/T958-2015 区域地质图图例》中关于区填充图例代码,如:GOQF010001。 333 | 334 | 335 | 336 | 337 | 符号的前景颜色。 338 | 339 | 340 | 341 | 342 | 符号的填充颜色。 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 纹理的贴图模式。 352 | 353 | 354 | 355 | 356 | 357 | 默认:单幅填充 358 | 359 | 360 | 361 | 362 | 重复 363 | 364 | 365 | 366 | 367 | 镜像 368 | 369 | 370 | 371 | 372 | 按纹理图片的边界扩展 373 | 374 | 375 | 376 | 377 | 按定义的边界颜色扩展 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 按边界颜色填充纹理时所使用的边界颜色:RGBA。 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 参见CityGML的Appearance模块中关于GeoReferencedTextureType的定义。 403 | 404 | 405 | 406 | 407 | 408 | 内嵌定义的纹理映射地理坐标参数。计算方法参见CityGML标准关于Appearance的说明。 409 | 410 | 411 | 412 | 纹理原点的地理坐标 413 | 414 | 415 | 416 | 417 | 变换矩阵 418 | 419 | 420 | 421 | 422 | 423 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 依据CityGML的Appearance模块中关于ParameterizedTextureType的定义,此类型的纹理对象将显示地指定顶点对应的纹理坐标或者顶点纹理坐标的计算参数。 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 依次列出顶点所对应的纹理坐标。 443 | 444 | 445 | 446 | 447 | 依据顶点坐标计算纹理坐标时使用的矩阵。记该3行4列的矩阵为T,纹理坐标为行向量(s,t),顶点的齐次世界坐标为列向量p=(x, y, z, w),则有:(s,t) = (s'/q', t'/q'),而列向量(s', t', q') = T*p。 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 地质模型场景范围下的显示参数,主要包括背景和光源信息。 462 | 463 | 464 | 465 | 466 | 背景颜色 467 | 468 | 469 | 470 | 471 | 场景的光照信息 472 | 473 | 474 | 475 | 476 | 477 | 标记该光源的启用状态,值为true时表示启用该光源,否则表示不使用该光源。 478 | 479 | 480 | 481 | 482 | 光源的类型:定向光源(directionallight),点光源(pointlight),聚光灯(spotlight)。缺省值为directionallight。 483 | 484 | 485 | 486 | 487 | 488 | 定向光源,模拟环境光 489 | 490 | 491 | 492 | 493 | 点光源,模拟各种点状光源 494 | 495 | 496 | 497 | 498 | 聚光灯,模拟手电筒、探照灯等光源类型 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 光源的位置。 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 灯光的聚焦位置。与光源的位置配合起来可计算光照的方向。 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 光源的强度 527 | 528 | 529 | 530 | 531 | 光源的环境光颜色。 532 | 533 | 534 | 535 | 536 | 光源的漫反射光颜色。 537 | 538 | 539 | 540 | 541 | 光源的镜面光颜色。 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | -------------------------------------------------------------------------------- /xsd/Geo3DStyleLib.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 本文档定义要素可视化参数库(geo3dml:Geo3DStyleLib)的结构。该参数库实际上是五种结构的集合,分别是: 11 | se:FeatureTypeStyle,se:CoverageStyle、se:Symbolizer、geo3dml:Material,以及geo3dml:AbstractTexture。 12 | 预定义的se:FeatureTypeStyle和se:CoverageStyle定位于视图(对应于“图层”)级别关于要素可视化参数的整体复用; 13 | 其它预定义的参数定位于要素级别可视化参数的复用。 14 | geo3dml:Geo3DStyle可以直接引用参数库中定义的se:FeatureTypeStyle或se:CoverageStyle数据。 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 地质要素可视化参数库结构,主要内容为se:FeatureTypeStyle、se:CoverageStyle、se:Symbolizer、geo3dml:Material和geo3dml:AbstractTexture五种结构的集合。 23 | 24 | 25 | 26 | 27 | 参数库的名字。 28 | 29 | 30 | 31 | 32 | 库中包含的预定义的se:FeatureTypeStyle结构。 33 | 34 | 35 | 36 | 37 | 库中包含的预定义的se:CoverageStyle结构。 38 | 39 | 40 | 41 | 42 | 库中包含的预定义的se:Symbolizer结构。 43 | 44 | 45 | 46 | 47 | 库中包含的预定义的geo3dml:Material结构。 48 | 49 | 50 | 51 | 52 | 库中包含的预定义的geo3dml:AbstractTexture结构。 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 关于se:FeatureTypeStyle的集合。 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 关于se:CoverageStyle的集合。 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 关于se:Symbolizer的集合。 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 关于geo3dml:Material的集合。 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 关于geo3dml:AbstractTexture的集合。 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /xsd/GeoBasicTypes.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 本文档定义Geo3DML所使用的一些基本数据类型。 10 | 11 | 12 | 13 | 14 | 15 | 16 | 区间[0, 1]的浮点数。 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 元素值位于区间[0, 1]的数列。 27 | 28 | 29 | 30 | 31 | 32 | 33 | 颜色:RGB。 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 颜色:RGBA。 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 表示一个2行2列的矩阵。矩阵的记录方式为按行优先的顺序记录4个实数,即第1个实数表示第一行第一列的元素,第2个实数表示第一行第二列的元素。其它依此类推。 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 表示一个3行4列的矩阵。矩阵的记录方式为按行优先的顺序记录12个实数,即前4个实数表示第一行的元素,后续4个实数表示第二行的记录。其它依此类推。 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 表示一个4行4列的矩阵。矩阵的记录方式为按行优先的顺序记录16个实数,即前4个实数表示第一行的元素,后续4个实数表示第二行的记录。其它依此类推。 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /xsd/GeoFeature.xsd: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 此文档定义地质要素的XML文档结构。 11 | 12 | 13 | 14 | 16 | 18 | 19 | 20 | 地质要素属性值元素节点类型。 此处记录的属性值的域定义应与地质要素所属的地质要素类中定义的属性域一致。 21 | 此处,一个具体的swe:AbstractDataComponent实例描述要素在一个属性字段上的取值。 22 | 通过Field元素的name属性设置所对应属性字段的名字;通过Field元素所包含的每个具体的swe:AbstractDataComponent对象的value元素记录要素在该字段上的取值。 23 | 24 | 25 | 26 | 27 | 28 | 29 | 标记对应属性字段的名字。 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 地质要素。该要素的属性字段满足其所属图层中关于要素类型的定义。 38 | 39 | 40 | 41 | 42 | 43 | 44 | 该要素所具有的非几何属性值。 45 | 46 | 47 | 48 | 50 | 51 | 52 | 53 | 54 | 55 | 地质要素的几何属性数据,以及依赖于该几何对象的属性场数据。 56 | 57 | 58 | 59 | 60 | 61 | 地质要素的几何属性数据。 62 | 63 | 64 | 67 | 68 | 与Shape元素中指定的几何对象相关的属性场数据。 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 170 | -------------------------------------------------------------------------------- /xsd/GeoFeatureClass.xsd: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 此文档定义地质要素类(geo3dml:GeoFeatureClass)的XML文档结构。 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 地质要素类类型的定义。地质要素类定义地质要素的属性结构,同时它也是具有该属性结构的地质要素的集合。 21 | 22 | 23 | 24 | 25 | 26 | gml:AbstractGMLType定义的成员gml:name即为地质要素类的名字。 27 | 28 | 29 | 30 | 31 | 32 | 定义地质要素的非几何属性结构。同一要素类中的地质要素应是同一类型的,即它们应具有相同的属性结构。本元素即用于定义要素类中地质要素所具有的属性结构,进而可以认为它定义的是地质要素的类型。采用SWE Common Data Model规范定义的swe:DataRecord对象来定义要素的属性字段。按SWE Common Data Model规范,swe:DataRecordType类型的对象可以作为数据描述工具或者数据容器。此处,该对象就起到了数据描述工具的作用。Schema对象可包含多个swe:AbstractDataComponent对象;每个swe:AbstractDataComponent对象可用于定义一个属性字段。swe:AbstractDataComponent对象的类型为swe:AbstractDataComponentType,而该类型则派生自swe:AbstractSWEIdentifiableType。定义属性字段时,通过swe:DataRecord元素的子元素field的属性name(必填)设置属性字段的名字;通过swe:AbstractSWEIdentifiableType:label元素设置属性字段的显示名(可选。如该元素被省略,则使用前述field元素的name属性值为字段的显示名。);通过swe:AbstractSWEIdentifiableType:description元素可以设置字段的说明信息,如解释该字段的含义(可选);通过swe:AbstractDataComponentType:definition属性可以配置字段所对应的语义信息,如配置字段所对应的本体概念。同时,geo3dml:GeoFeatureClass:Schema自身为swe:DataRecrodType类型(继承自swe:AbstractDataComponentType)的对象,可以通过geo3dml:GeoFeatureClass:Schema自身的label元素设置其所定义的地质要素的类型名(可选),通过description元素设置关于该类地质要素的说明信息(可选),通过definition属性设置相关的语义信息(可选)。 33 | 34 | 35 | 36 | 37 | 38 | 包含的地质要素。 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 加入此属性是为了避免xlink:link标签所引入的文档验证冲突。 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /xsd/GeoGeometry.xsd: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | Geo3DML对OGC 10 | GML空间数据结构进行扩展的空间数据结构的定义:TIN,四面体体元填充的体,规则六面体体元填充的体,角点网格,可变换格网。其它几何对象均直接使用OGC 11 | GML标准中关于Geometry对象的定义。在实际工作中,Geo3DML主要使用的几何对象包括:点(gml:Point),曲线(gml:LineString以及GML中关于参数化曲线的定义),曲面(geo3dml:GeoTin),体(gml:Solid)。 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | Geo3DML中TIN的结构分为点表与三角形表两部分。 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 三角形表 42 | 43 | 44 | 45 | 46 | 47 | TIN中的三角形结构包括顶点序列、邻接三角形序列两部分。 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 67 | 68 | 69 | 70 | 71 | 72 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 由同类型体元填充而成的体数据结构。 88 | 89 | 90 | 91 | 92 | 93 | 95 | 96 | 97 | 98 | 由四面体体元填充而成的体。 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 四面体表 107 | 108 | 109 | 110 | 111 | 112 | 体中的四面体体元信息。 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 132 | 133 | 134 | 135 | 136 | 137 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 150 | 151 | 152 | 153 | 由规则六面体体元填充而成的体。 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 规则六面体表 162 | 163 | 164 | 165 | 166 | 167 | 体中的规则六面体信息。 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 177 | 178 | 179 | 180 | 181 | 182 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 195 | 196 | 197 | 198 | 由广义三棱柱填充而成的体。 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 三棱柱表 207 | 208 | 209 | 210 | 211 | 212 | GTP中的三棱柱结构包括顶和底两个三角形。 213 | 214 | 215 | 216 | 217 | 218 | 顶部三角形。指定构成该三角形的三个顶点的索引号。 219 | 220 | 221 | 222 | 223 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 底部三角形。指定构成该三角形的三个顶点的索引号。三个顶点的顺序应与顶部三角形的对应,即顶、底三角形的对应顶点构成三棱柱的棱。 232 | 233 | 234 | 235 | 236 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 三棱柱的3个相邻三棱柱。按顶(或底)三角形顶点的顺序,依次指定顶点对面位置的邻接三棱柱。 245 | 246 | 247 | 248 | 249 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 268 | 269 | 270 | 271 | 272 | 定义多面体体元构成的体模型,每个体元的面数不一定相同。 273 | 可兼容四面体、不规则六面体、四棱柱、五棱柱、六棱柱、四棱锥、五棱锥、六棱锥等特殊体元构成的体。 通用数据结构。 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 面片表 283 | 284 | 285 | 286 | 287 | 288 | 多个顶点构成的面片。至少3个顶点。 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 299 | 300 | 301 | 302 | 303 | 304 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 多面体体元表 315 | 316 | 317 | 318 | 319 | 320 | 多面体体元由多个面片包围封闭而成 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 331 | 332 | 333 | 334 | 335 | 336 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 349 | 350 | 351 | 352 | 353 | 定义截断规则格网数据结构。石油模拟领域常用的格网数据结构。 354 | 是一种采用特定方法构建的三维格网:利用水平规则格网与基于曲面的地质结构模型交切形成的格网单元填充而成的模型。 355 | 截断规则格网单元的形态: 356 | 在水平上,大多数格网单元为矩形,但位于地质边界上的格网单元因为会被地质边界截断而不再是矩形(三角形或多边形)。 357 | 在垂向上,格网单元的顶底面大多不是规则的平面,而是地质界面位于格网单元范围内的片段。 358 | 以下模式规定了截断规则格网的数据结构:平面规则格网参数和几何数据,几何数据按顶点-面-体元层次结构保存。 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 水平方向上的规则格网参数,本截断规则格网数据结构在水平方向上按规则网格划分单元格 367 | 368 | 369 | 370 | 371 | 水平方向上网格划分的原点 372 | 373 | 374 | 375 | 376 | 平面正交坐标轴的方位角(以度数为单位)。在平面上,X轴与Y轴正交。方位角是Y轴正方向与正北方向之间的夹角。 377 | 如方位角为0时,Y轴指向正北,X轴指向正东。约定:正北为0度,正东为90度,正南为180度,正西为270度。 378 | 379 | 380 | 381 | 382 | 383 | 沿X和Y轴划分网格的步长。 384 | 385 | 386 | 387 | 388 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 沿X和Y轴划分网格的维度,即沿I、J方向各自划分的网格数目。 397 | 398 | 399 | 400 | 401 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 面片表 416 | 417 | 418 | 419 | 420 | 421 | 多个顶点构成的面片。一般是4个顶点,也可能少于或多于4个顶点。 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 432 | 433 | 434 | 435 | 436 | 437 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 体元表 448 | 449 | 450 | 451 | 452 | 453 | 体元由多个面片包围封闭而成 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 464 | 465 | 466 | 467 | 468 | 469 | 471 | 472 | 473 | 体元对应的网格划分的I值。 474 | 475 | 476 | 477 | 478 | 体元对应的网格划分的J值。 479 | 480 | 481 | 482 | 483 | 体元对应的网格划分的K值。 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 由角点网格体元填充而成的体:角点网格。 500 | 501 | 502 | 503 | 504 | 505 | 506 | 角点网格的维度,即其沿I、J、K轴方向各自划分体元的数目。 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 角点网格的Pillar线组成的数组。Pillar线是沿K轴延展的直线段。设该角点网格的维度为 (Ni, Nj, Nk),并以I方向为“行”、以J方向为“列”, 520 | 则网格的Pillar线可记为 (Nj + 1) 行、(Ni + 1) 列,总条数为 (Nj + 1) * (Ni + 1)。 521 | 本元素以“行”优先的方式记录所有的Pillar线,即先记录第0行包含的第0列至第Ni列的共 (Ni + 1) 条Pillar线, 522 | 然后记录第1行包含的第0列至第Ni列的共 (Ni + 1) 条Pillar线,……,最后记录第Nj行包含的第0列至第Ni列的共 (Ni + 1) 条Pillar线。 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 角点网格的Pillar线,即沿K轴延展的直线段。 531 | 每条Pillar线由其首尾两顶点的坐标确定。本元素出现的次数为(Nj + 1) * (Ni + 1)。 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 角点网格的体元集合。 548 | 设角点网格的维度为 (Ni, Nj, Nk),则其所包含的体元总数为 (Ni * Nj * Nk),此即为本子元素所包含元素的数目。 549 | 以I方向为“行”、J方向为“列”、K方向为“层”,本元素按行-列-层优先的顺序顺次记录体元的位置。 550 | 即先记录索引值为(Xi,0,0)(其中Xi为整数,属于区间[0,Ni))的体元,接着记录索引值为(Xi,1,0)的体元,……,接着记录索引值为(Xi,0,1)的体元,……最后记录索引值为(Xi,Nj - 1, Nk - 1)的体元。 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 角点网格的六面体体元。本元素出现的次数为 (Ni * Nj * Nk)。 559 | 角点网格中每个六面体体元都由其顶面4个角点及底面4个角点来确定,而这些角点均位于Pillar线上。 560 | 因此仅需记录各角点的Z坐标值或其在对应Pillar线上距离Pillar线首顶点的距离即可确定角点的位置。 561 | 若在坐标系I-J-K内平移该体元,使其一顶点与原点重合,并使得过该顶点的三条棱分别与对应的坐标轴的正方向重合,然后分别以该三条棱的长度为单位长度,则可以记该体元的8个角点的坐标为(0,0,0)、(1,0,0)、(0,1,0)、(1,1,0)、(0,0,1)、(1,0,1)、(0,1,1)、(1,1,1)。 562 | 本元素按此顺序记录各角点的海拔高程值(Z坐标)或与Pillar线首顶点的距离。若记体元的索引值为(i,j,k)(其中i,j,k均为从0开始的索引值),则上述8个角点各自所对应的Pillar线的索引值分别为: 563 | (i,j)、(i + 1,j)、(i,j + 1)、(i + 1,j + 1)、(i,j)、(i + 1,j)、(i,j + 1)、(i + 1,j + 1)。 564 | 565 | 566 | 567 | 568 | 569 | 571 | 572 | 573 | 标记本体元是否有效。缺省值为true。 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 标记子元素Cell中记录的值的类型:elevation表示海拔高程值(Z坐标),length表示与Pillar线首顶点的距离。 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 600 | 601 | -------------------------------------------------------------------------------- /xsd/GeoMetaData.xsd: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | 此文档定义三维地质模型的元数据结构。 10 | 11 | 12 | 14 | 16 | 17 | 18 | 19 | 三维地质元数据抽象类,用于扩展各类元数据结构 20 | 21 | 22 | 23 | 24 | 25 | 26 | 关于对象的描述。 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | 三维地质项目元数据 39 | 40 | 41 | 42 | 43 | 44 | 45 | 建模项目信息 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 三维地质模型元数据 77 | 78 | 79 | 80 | 81 | 82 | 83 | 模型的版本号。 84 | 85 | 86 | 88 | 89 | 空间数据参照系 90 | 91 | 92 | 93 | 94 | 创建该地质模型(项目)所使用的软件工具的名称。 95 | 96 | 97 | 98 | 99 | 创建该地质模型所使用的软件工具的版本号。 100 | 101 | 102 | 103 | 104 | 模型专题类型,如:水文地质、工程地质等。 105 | 106 | 107 | 108 | 109 | 地理范围,包括:最西侧的经度、最东侧的经度、最北端的纬度、最南端的纬度,单位(度),十进制浮点数。 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 高程范围 123 | 124 | 125 | 126 | 127 | 128 | 129 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 空间数据坐标参照系,包括平面坐标系和垂向坐标系。 151 | 152 | 153 | 154 | 155 | 平面坐标系参数 156 | 157 | 158 | 159 | 160 | 161 | 坐标系标识符,指示坐标系参数的格式。 162 | 163 | 164 | 165 | 166 | 167 | 使用EGSP编码指定坐标系,如"4326"。 168 | 169 | 170 | 171 | 172 | 使用OGC WTK格式记录坐标系参数。 173 | 174 | 175 | 176 | 177 | 使用OGC WTK2格式记录坐标系参数。 178 | 179 | 180 | 181 | 182 | 使用PROJ4格式记录坐标系参数。 183 | 184 | 185 | 186 | 187 | 使用自定义的特殊格式记录坐标系参数。 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 按Identifier指定的格式记录坐标系参数,如EPSG编码"4326"。 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 垂向坐标系,如“1956年黄海高程系”、“1985年国家高程系”、“大地高程系”等。 204 | 205 | 206 | 207 | 208 | 209 | 指示高程系的类别。 210 | 211 | 212 | 213 | 214 | 215 | 基于椭球基准面的高程。 216 | 217 | 218 | 219 | 220 | 国家高程系,如“1956年黄海高程系”,“1985年国家高程系”。 221 | 222 | 223 | 224 | 225 | 如各地方的独立高程系。 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 高程坐标系的具体名字,如“1956年黄海高程系”、“1985年国家高程系”、“吴淞零点高程”等。 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | -------------------------------------------------------------------------------- /xsd/GeoProperty.xsd: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 此文档定义了属性模型的XML文档结构。 11 | 12 | 13 | 14 | 15 | 16 | 可指定属性值在几何对象上的附着位置:顶点,棱,面元,体元。 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 覆盖数据定义域的扩展定义。 25 | 当gml:domainSet定义的值为空时,此处的geo3dml:SamplingFrame和geo3dml:SamplingTarget可以联合起来描述该覆盖要素属性的定义域。 26 | 其中,geo3dml:SamplingFrame指明所依赖的几何对象(记为G),geo3dml:SamplingTarget指明属性分布的位置类型:VETEX(顶点)表示对象G的顶点集合为属性的定义域; 27 | EDGE(棱)表示对象G的边集合为属性的定义域; 28 | FACE(面元)表示对象G的面元集合为属性的定义域;VOXEL(体元)表示对象G的体元集合为属性的定义域。 29 | 此时,要求对象G有关于其顶点(或边或面元或体元)集合的明确定义。 30 | 当gml:domainSet定义的值不为空时,此处的geo3dml:SamplingFrame和geo3dml:SamplingTarget也可联合起来描述gml:domainSet记录的属性定义域与某个几何对象的关联关系。 31 | 其中,geo3dml:SamplingFrame记录有关联的几何对象(记为G),geo3dml:SamplingTarget指明gml:domainSet与对象G的位置对应关系:VERTEX(顶点)表示gml:domainSet是对象G的顶点集合的子集; 32 | EDGE(棱)表示gml:domainSet是对象G的边集合的子集;FACE(面元)表示gml:domainSet是对象G的面元集合的子集;VOXEL(体元)表示gml:domainSet是对象G的体元集合的子集。 33 | 此时,不要求对象G有关于其顶点(或边或面元或体元)集合的明确定义。 34 | 35 | 36 | 37 | 38 | 39 | 40 | 用于指定该覆盖要素表达的属性分布结果所依赖的采样空间(几何对象)。 41 | 42 | 43 | 44 | 45 | 46 | 定义属性场在采样空间(几何对象)上的附着位置:顶点,棱,面元,体元。该方式主要基于流形理论,对于n-Compelx等同于n-Cell。n-Cell可以由低维n-1-Cell,n-2,…,0-Cell等组成。因此,对于3维体元(3-Cell or 3-Complex)共有上述4种位置。 47 | 48 | 49 | 50 | 51 | 52 | 53 | 顶点 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 面元 64 | 65 | 66 | 67 | 68 | 体元 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /xsd/base64.h: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////// 2 | // base64.h 3 | 4 | // 参考文章:http://www.cstc.net.cn/docs/docs.php?id=202 5 | 6 | //************************************************************************/ 7 | // base64编码表 8 | // 9 | // 0 A 17 R 34 i 51 z 10 | // 1 B 18 S 35 j 52 0 11 | // 2 C 19 T 36 k 53 1 12 | // 3 D 20 U 37 l 54 2 13 | // 4 E 21 V 38 m 55 3 14 | // 5 F 22 W 39 n 56 4 15 | // 6 G 23 X 40 o 57 5 16 | // 7 H 24 Y 41 p 58 6 17 | // 8 I 25 Z 42 q 59 7 18 | // 9 J 26 a 43 r 60 8 19 | // 10 K 27 b 44 s 61 9 20 | // 11 L 28 c 45 t 62 + 21 | // 12 M 29 d 46 u 63 / 22 | // 13 N 30 e 47 v (pad) = 23 | // 14 O 31 f 48 w 24 | // 15 P 32 g 49 x 25 | // 16 Q 33 h 50 y 26 | // 27 | // base64编码步骤: 28 | // 29 | // 原文: 30 | // 31 | // 你好 32 | // C4 E3 BA C3 33 | // 11000100 11100011 10111010 11000011 34 | // 00110001 00001110 00001110 00111010 35 | // 49 14 (十进制) 36 | // x O O 6 字符 37 | // 01111000 01001111 01001111 00110110 38 | // 78 (十六进制) 39 | // xOO6 40 | // 41 | // 解码: 42 | // xOO6 43 | // 78 4f 4f 36 44 | // 01111000 01001111 01001111 00110110 45 | // 49 14 46 | // 00110001 00001110 00001110 00111010 31 0e 0e 3a 47 | // 48 | // 11000100 11100011 10111010 49 | // C4 E3 BA 50 | // 51 | 52 | #ifndef _BASE64_INCLUDE__H__ 53 | #define _BASE64_INCLUDE__H__ 54 | 55 | // 编码后的长度一般比原文多占1/3的存储空间,请保证base64code有足够的空间 56 | inline int Base64Encode(char * base64code, const char * src, int src_len = 0); 57 | inline int Base64Decode(char * buf, const char * base64code, int src_len = 0); 58 | 59 | __inline char GetB64Char(int index) 60 | { 61 | const char szBase64Table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 62 | if (index >= 0 && index < 64) 63 | return szBase64Table[index]; 64 | 65 | return '='; 66 | } 67 | 68 | // 从双字中取单字节 69 | #define B0(a) (a & 0xFF) 70 | #define B1(a) (a >> 8 & 0xFF) 71 | #define B2(a) (a >> 16 & 0xFF) 72 | #define B3(a) (a >> 24 & 0xFF) 73 | 74 | // 编码后的长度一般比原文多占1/3的存储空间,请保证base64code有足够的空间 75 | inline int Base64Encode(char * base64code, const char * src, int src_len) 76 | { 77 | if (src_len == 0) 78 | src_len = strlen(src); 79 | 80 | int len = 0; 81 | unsigned char* psrc = (unsigned char*)src; 82 | char * p64 = base64code; 83 | for (int i = 0; i < src_len - 3; i += 3) 84 | { 85 | unsigned long ulTmp = *(unsigned long*)psrc; 86 | register int b0 = GetB64Char((B0(ulTmp) >> 2) & 0x3F); 87 | register int b1 = GetB64Char((B0(ulTmp) << 6 >> 2 | B1(ulTmp) >> 4) & 0x3F); 88 | register int b2 = GetB64Char((B1(ulTmp) << 4 >> 2 | B2(ulTmp) >> 6) & 0x3F); 89 | register int b3 = GetB64Char((B2(ulTmp) << 2 >> 2) & 0x3F); 90 | *((unsigned long*)p64) = b0 | b1 << 8 | b2 << 16 | b3 << 24; 91 | len += 4; 92 | p64 += 4; 93 | psrc += 3; 94 | } 95 | 96 | // 处理最后余下的不足3字节的饿数据 97 | if (i < src_len) 98 | { 99 | int rest = src_len - i; 100 | unsigned long ulTmp = 0; 101 | for (int j = 0; j < rest; ++j) 102 | { 103 | *(((unsigned char*)&ulTmp) + j) = *psrc++; 104 | } 105 | 106 | p64[0] = GetB64Char((B0(ulTmp) >> 2) & 0x3F); 107 | p64[1] = GetB64Char((B0(ulTmp) << 6 >> 2 | B1(ulTmp) >> 4) & 0x3F); 108 | p64[2] = rest > 1 ? GetB64Char((B1(ulTmp) << 4 >> 2 | B2(ulTmp) >> 6) & 0x3F) : '='; 109 | p64[3] = rest > 2 ? GetB64Char((B2(ulTmp) << 2 >> 2) & 0x3F) : '='; 110 | p64 += 4; 111 | len += 4; 112 | } 113 | 114 | *p64 = '\0'; 115 | 116 | return len; 117 | } 118 | 119 | 120 | __inline int GetB64Index(char ch) 121 | { 122 | int index = -1; 123 | if (ch >= 'A' && ch <= 'Z') 124 | { 125 | index = ch - 'A'; 126 | } 127 | else if (ch >= 'a' && ch <= 'z') 128 | { 129 | index = ch - 'a' + 26; 130 | } 131 | else if (ch >= '0' && ch <= '9') 132 | { 133 | index = ch - '0' + 52; 134 | } 135 | else if (ch == '+') 136 | { 137 | index = 62; 138 | } 139 | else if (ch == '/') 140 | { 141 | index = 63; 142 | } 143 | 144 | return index; 145 | } 146 | 147 | // 解码后的长度一般比原文少用占1/4的存储空间,请保证buf有足够的空间 148 | inline int Base64Decode(char * buf, const char * base64code, int src_len) 149 | { 150 | if (src_len == 0) 151 | src_len = strlen(base64code); 152 | 153 | int len = 0; 154 | unsigned char* psrc = (unsigned char*)base64code; 155 | char * pbuf = buf; 156 | for (int i = 0; i < src_len - 4; i += 4) 157 | { 158 | unsigned long ulTmp = *(unsigned long*)psrc; 159 | 160 | register int b0 = (GetB64Index((char)B0(ulTmp)) << 2 | GetB64Index((char)B1(ulTmp)) << 2 >> 6) & 0xFF; 161 | register int b1 = (GetB64Index((char)B1(ulTmp)) << 4 | GetB64Index((char)B2(ulTmp)) << 2 >> 4) & 0xFF; 162 | register int b2 = (GetB64Index((char)B2(ulTmp)) << 6 | GetB64Index((char)B3(ulTmp)) << 2 >> 2) & 0xFF; 163 | 164 | *((unsigned long*)pbuf) = b0 | b1 << 8 | b2 << 16; 165 | psrc += 4; 166 | pbuf += 3; 167 | len += 3; 168 | } 169 | 170 | // 处理最后余下的不足4字节的数据 171 | if (i < src_len) 172 | { 173 | int rest = src_len - i; 174 | unsigned long ulTmp = 0; 175 | for (int j = 0; j < rest; ++j) 176 | { 177 | *(((unsigned char*)&ulTmp) + j) = *psrc++; 178 | } 179 | 180 | register int b0 = (GetB64Index((char)B0(ulTmp)) << 2 | GetB64Index((char)B1(ulTmp)) << 2 >> 6) & 0xFF; 181 | *pbuf++ = b0; 182 | len ++; 183 | 184 | if ('=' != B1(ulTmp) && '=' != B2(ulTmp)) 185 | { 186 | register int b1 = (GetB64Index((char)B1(ulTmp)) << 4 | GetB64Index((char)B2(ulTmp)) << 2 >> 4) & 0xFF; 187 | *pbuf++ = b1; 188 | len ++; 189 | } 190 | 191 | if ('=' != B2(ulTmp) && '=' != B3(ulTmp)) 192 | { 193 | register int b2 = (GetB64Index((char)B2(ulTmp)) << 6 | GetB64Index((char)B3(ulTmp)) << 2 >> 2) & 0xFF; 194 | *pbuf++ = b2; 195 | len ++; 196 | } 197 | 198 | } 199 | 200 | *pbuf = '\0'; 201 | 202 | return len; 203 | } 204 | 205 | #endif // #ifndef _BASE64_INCLUDE__H__ --------------------------------------------------------------------------------