谷歌卫星地图下载器_谷歌高清卫星地图下载器-水经注软件论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1718|回复: 0

[SuperMap技术] SuperMap矢量地图符号库交换文件格式

[复制链接]
  • TA的每日心情
    开心
    2014-10-30 09:35
  • 签到天数: 63 天

    [LV.6]常住居民II

    发表于 2014-9-10 10:42 | 显示全部楼层 |阅读模式
    1    范围
         本标准定义了SuperMap所使用的矢量地图符号交换文件格式,仅包含矢量符号。
    2 引用标准
    3 术语

    3.1 符号库   SymbolLib
         指记录各种地图符号的文件,在本标准中为交换文件本身。
    3.2 符号     Symbol
         地图信息中常见的点状要素,一般表示重要点状地理要素。
    3.3 笔划     Stroke
         符号的构成要素,一个符号由多个笔划构成。
         笔划分为点状、线状、面状、文本笔划四大类。
         每种笔划都可以根据需要具有自己的属性,如:线宽、颜色、填充等。

    4    总则

    4.1 本标准采用Backus-Naur 格式(BNF )来精确描述所说明的结构、相互关系和格式。
         每一产生规则都有一个左项(标志)和一个右项(表达式),其间由“::= ”连接,
         含义是左项由右项产生或左项被右项取代。
    4.2 用于产生规则的符号所具有的意义见表1 。
                   
    表1
         符号                 含义
         ::=          被取代、产生、组成
         |            或者(该符号前后的项之间任选一个)
         {}m/n        其中的项可重复至少m 次,至多n次,缺省m=0,n=∞
                    其中的项可选,相当于{}0/1
         <>           其中的项应当被取代
         ~           在该符号前后的项之间取值
         “”         其中的项表示字符本身,如 “| ”,表示字符|(7CH)
         //           本行其后文本为注释
    4.3 文件结构中的基本组成元素及其说明
         a. <CR> ::= 回车符(0AH){{< 空白符>}回车符(0AH)}      表示换行和/或若干行
         b. < 空白符> ::= 空格符(20H) | 制表符(08H)
         c. <DELIMITER> ::= <,|;>     表示分隔符,缺省为逗号","
         d. < 目标标识码> ::= < 正整数>用作目标标识。
             相当于UINT
         e. <X> ::= < 浮点数>
             X 方向坐标,大小为0-255。
         f. <Y> ::= < 浮点数>
             Y 方向坐标,大小为0-255。
         g. <RGB> ::= < 整数>
         h. < 字符> ::=!|"|#|$|%|&|'|*|+|,|-|.|/|:|;|<|=|>|?|@|\|^|_|`|
             “( ”| “) ”| “ ”| “{ ”| “| ”| “} ”| “~ ”|<英文字
             母>|< 数字>|< 汉字字符>
         i. < 字符串> ::= {< 字符>}1
         j. < 整数>::= {< 数字>}1
             在计算机内部运算时应表示为32 位整型数。
         k. < 正整数>::= {< 数字>}1
             在计算机内部运算时应表示为32 位整型数。
         k. < 字节整数>::= {< 数字>}1
             在计算机内部运算时应表示为8   位整型数。
         l. < 浮点数>::= {< 数字>}1<小数点>{< 数字>}1
    4.4 本标准规定的交换格式所用的关键字见表1
                            
    表1
         区段定义类关键字
         SymLibHeadBegin                  文件头开始
         Delimiter                        分隔符
         DataMark                         文件类型标志
         Version                          版本号
         SymsCount                        符号数
         SymLibHeadEnd                    文件头结束
      
         符号属性关键字
         SymbolBegin                      开始一个符号定义
         SymID                            符号编码
         SymName                          符号名称
         SymOrg                           符号原点坐标
         SymSize                          符号原大(单位:毫米)
         StrokeCount                      笔划数目
         SymbolEnd                        结束一个符号定义
      
         笔划类型类关键字
         Point                            点笔划
         Polyline                         折线笔划
         Arc                              圆弧笔划
         Polygon                          多边形笔划
         Ellipse                          椭圆笔划
         Rectangle                        正方形笔划
         Roundrect                        圆角矩形笔划
         Text                             文本笔划
         StrokeEnd                        结束一个笔划定义
      
         笔划属性类关键字
         Symbol                           点属性
         Pen                              笔
         Brush                            刷子
         String                           字符串
         Nodes                            节点数目
      
    5    符号数据交换格式
    5.1 一般规定
         本规定仅对符号交换文件有效。
    5.2 符号特征说明
         符号由自己的特征属性以及一组笔划共同组成。
         在符号中所有坐标都是在0-255之间整型数据。
    5.3 整体格式
         <符号数据交换格式> ::=
             <文件头> {<符号>}

         <文件头>   ::=
             SymLibHeadBegin<CR>
             Delimiter<空白符>"<分隔字符>"                    //默认为 ","
             DataMark <空白符>SM_RES_FLAG_SYMBOL<CR>
             Version   <空白符><正整数><CR>                    //当前版本为200,不要搞错了哟
                                                             //应宋之建议,现在不要了 -->   SymsCount<空白符><正整数><CR>
             SymLibHeadEnd<CR>

                 <分隔字符> ::= <一个字符> //例如 "," ";" 等

         <符号> ::=
             SymbolBegin<CR>
             SymID       <空白符><符号编码><CR>
             SymName     <空白符><符号名称><CR>
             SymOrg      <空白符><符号原点><CR>
             SymSize     <空白符><符号原大><CR>
             StrokeCount<空白符><笔划数目><CR>
             {<笔划>}
             SymbolEnd<CR>
             
                 <符号编码> ::=   <正整数>
                 <符号名>    ::=   <字符串>
                 <符号原点> ::=   <X><空白符><Y>
                 <符号原大> ::=   <浮点数>         //单位:毫米
                 <笔划数目> ::=   <字节整数>
      
         <笔划> ::=
             <笔划类型><CR>

             {<点>}<CR>

                  <DELIMITER>   <DELIMITER>      ) <CR>]
             <DELIMITER><DELIMITER> ) <CR>]
                <DELIMITER>   <DELIMITER>      ) <CR>]
             <StrokeEnd><CR>
      
             <笔划类型>           ::= <Point|Polyline|Arc|Polygon|Ellipse|Rectangle|Roundrect|Text>
             <线型>               ::= <0~3>       //当<笔划类型> = Point|Text时不会出现,默认是0
             <线宽>               ::= <1~15>      //当<笔划类型> = Text时不会出现,默认是1
             <宽度>               ::= <1~15>      //当<笔划类型> = Point才会出现,默认是1
             <填充类型>           ::= <0~7>       //仅当<笔划类型>属于面状笔划时会出现,默认是0
             <颜色>               ::= <RGB>        //默认为用户自定义色
             <填充色>             ::= <RGB>        //默认为用户自定义色,当<笔划类型>属于面状笔划时才可能出现
             <文本>               ::= <字符串>     //仅当<笔划类型> = Text时会出现
             <笔划点数>           ::= <字节整数>   //仅当笔划类型为不定点类型时才会出现,如polyline,polygon
             <点>                 ::= <X><空白符><Y>

             <子笔划个数>         ::= <字节整数>   //为了和地图交换文件兼容,列出本项。本交换文件一律当作1对待
             <背景颜色>           ::= <RGB>        //为了和地图交换文件兼容,列出本项。本交换文件一律不予解释
             <点类型>             ::= <整数>       //为了和地图交换文件兼容,列出本项。本交换文件一律不予解释
          一般来说,对应不同的笔划类型,可能列出的笔划属性也会不同。例如:对于Point,只会出现
             Point<CR>
             Pen (,1,11111)
             127<空白符>127<CR>
             意为“点笔划”“使用自定义颜色”“线宽”1“颜色”11111“点坐标”127,127
             或
             Point<CR>
             127<空白符>127<CR>
             意为“点笔划”“不使用自定义颜色”“线宽”1“点坐标”127,127

         对于Arc笔划来说,存储的是四个点, 类似于CDC类Arc函数
             BOOL CDC::Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
         对于Ellipse笔划来说,存储的是两个点, 类似于CDC类Ellipse函数
             BOOL CDC::Ellipse(int x1, int y1, int x2, int y2);
         对于Rectangle笔划来说,存储的是两个点, 类似于CDC类Rectangle函数
             BOOL CDC::Rectangle(int x1, int y1, int x2, int y2);
         对于RoundRect笔划来说,存储的是两个点, 圆弧度(第三个点的x,y)是自动生成的,为最小边的三分之二,
             算法如下,显示类似于CDC类RoundRect函数
             BOOL CDC::RoundRect(int x1, int y1, int x2, int y2, int x3, int y3);

             CRect rect( pPoints, pPoints );
             UINT uRadiu = min( rect.Width(), rect.Height() ) * 2 / 3;
             CPoint point( uRadiu, uRadiu );
             pDc->RoundRect( rect, point );


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    申请友链|手机版|小黑屋|Archiver|谷歌卫星地图下载器_谷歌高清卫星地图下载器-水经注软件论 ( 蜀ICP备05030520号

    返回顶部
    x

    扫描二维码加群

    GMT+8, 2022-8-12 04:14 , Processed in 0.162713 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表