• MapInfo Pen文件格式


    我不知道大家对这个有没有兴趣,也不知道是不是已经有公开的信息。

    以前实现样式库的时候,参照MapInfo7.0的线型实现了一个类似的线型,当时琢磨了MapInfo线型的实现方式与PEN的格式意义。

    这次是重新整理。从这份说明,可以大致推测它的实现。不知道现在这样的线型是否还能满足需要,不知是否有较全面而到位的GIS样式评论。

    文件格式:
    Endian:Little-Endian
    示例图:

    0-3字节,4个char类型,确认字,为"PEN2"
    4-5字节,ushort类型,文件长度,如示例为1178
    5-6字节,ushort类型,PEN数目,此为15
    7起有(PEN数目)个ushort类型,为PEN数据位置索引。
    PEN数据结束-文件结束:若有,为无效数据。

    PEN数据说明:
    0字节,共1字节,PEN的层数。若为0,则PEN数据仅此3字节(如示例图0026H,0029H),否则紧跟着即为层数据(如002fH)。
    1-2字节,未知,可以不用理会。
    PEN层数据:
    0字节,BYTE类型,本字节后层数据长度,如002fH为2,即该层还有2个字节数据。层最后一个字节为0,因此也可以理解是层长度为2+1=3字节。
    1字节后,PEN层数据是按编码进行,长度不固定。
    层数据字节编码:
    0x00, 1个字节,层结束,即层最后一个字节为0,后不跟数据。
    0x01, 1个字节,从当前位置按当前颜色宽度设置,实线绘制到结束,后不跟数据。
    0x02, 2个字节,沿线绘制n个单位长,紧跟一个字节即为n。关于单位,缺省即为1个像素,但绘制时可修改单位,从而绘制n*2或者n*其他的长度。即单位可变。
    0x03, 2个字节,沿线忽略n个单位长,紧跟一个字节即为n。
    0x04, 2个字节,在当前垂线绘制,后续字节设为c,则垂线相对线的起始结束y坐标为( c&0x0F, -( (c>>4)&0x0F ) )。
    0x05, 1个字节,从当前位置起循环绘制,1层仅可能有一个此标志,若无,则从0开始循环,即循环整个层定义长。

    0x06, 2个字节,设置绘制线宽,后续字节即为线宽为几个单位,若为0,线绘制时采用1个单位宽,填充绘制时无边界线。
    0x07, 4个字节,设置绘制线颜色,后续3个字节为RGB。
    0x08, 1个字节,设置绘制线颜色为缺省颜色,可通过参数传递缺省颜色。
    0x09, 1个字节,设置缺省线宽,可通过参数指定。
    0x0A, 2个字节,设置绘制线宽为缺省线宽+n个单位,n即为后续值。

    0x0B, 2个字节,最小绘制线宽值,后续字节即为值。
    0x0C, 2个字节,最大绘制线宽值,后续字节即为值。

    0x0D, 2个字节,折线"<"绘制,当前位置即为左边点,设后续字节为c,右边点相对线的坐标为( (c>>4)&0x0F, -( (c>>4)&0x0F ) )和( c&0x0F, c&0x0F)。
    0x0E, 2个字节,折线">"绘制,当前位置为右边点,设后续字节为c,左边点相对线的坐标为( -((c>>4)&0x0F), (c>>4)&0x0F )和( -(c&0x0F), -(c&0x0F))。

    0x0F, 1个字节,从当前位置起忽略到结束,1层仅可能有一个此标志。

    0x10, 4个字节,从当前位置起绘制Polygon,PEN格式的Polygon是按对进行,一对是垂直的两点,后续字节第1个是后面还有多少对,第2个字节是该队的沿线y值大者,第3个字节是沿线y值的差。如10 02 04 01,即为还有2对点,本对点为(X, 4)和(X, 3),若第3个字节为0,则退化为1点。
    0x11, 4个字节,Polygon点对,第1个是后面相对上一个0x10或者0x11沿线长度,第2个字节是该队的沿线y值大者,第3个字节是沿线y值的差。如10 02 04 01,即为沿线2个单位,本对点为(X, 4)和(X, 3)。

    0x12, 3个字节,从当前位置起绘制Polyline,后续字节第1个是后面还有多少点,第2个字节是该点的沿线y值。
    0x13, 3个字节,Polyline点,第1个是后面相对上一个0x12或者0x13沿线长度,第2个字节是该队的沿线y值。

    0x14, 4个字节,设置填充颜色,后续3个字节为RGB。
    0x15, 1个字节,设置填充颜色为缺省颜色,可通过参数传递缺省颜色。
    0x16, 1个字节,设置填充颜色为透明。

    0x17, 2个字节,从当前位置起绘制到保留n个单位不绘制,n为后续字节值。
    0x18, 2个字节,从当前位置起忽略到保留n个单位,n为后续字节值。
    0x01、0x05、0x0F、0x17、0x18只可存在一个其中一个标志。若无任一,缺省为0x05循环整个层定义长。

  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/lwis_webgis/p/1270642.html
Copyright © 2020-2023  润新知