cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:1264回复:0

MapInfo Pen文件格式

楼主#
更多 发布于:2008-08-21 10:32
<br>以前实现样式库的时候,参照MapInfo7.0的线型实现了一个类似的线型,当时琢磨了MapInfo线型的实现方式与PEN的格式意义。</p>
<p>这次是重新整理。从这份说明,可以大致推测它的实现。不知道现在这样的线型是否还能满足需要,不知是否有较全面而到位的GIS样式评论。</p>

文件格式:<br>
Endian:Little-Endian<br>
示例图:<br>
<img src="http://images.cnblogs.com/cnblogs_com/lwis_webgis/pen.jpg" alt="" width="632" height="81"><br>
0-3字节,4个char类型,确认字,为"PEN2"<br>
4-5字节,ushort类型,文件长度,如示例为1178<br>
5-6字节,ushort类型,PEN数目,此为15<br>
7起有(PEN数目)个ushort类型,为PEN数据位置索引。<br>
PEN数据结束-文件结束:若有,为无效数据。<br>
<br>
PEN数据说明:<br>
0字节,共1字节,PEN的层数。若为0,则PEN数据仅此3字节(如示例图0026H,0029H),否则紧跟着即为层数据(如002fH)。<br>
1-2字节,未知,可以不用理会。<br>
PEN层数据:<br>
0字节,BYTE类型,本字节后层数据长度,如002fH为2,即该层还有2个字节数据。层最后一个字节为0,因此也可以理解是层长度为2+1=3字节。<br>
1字节后,PEN层数据是按编码进行,长度不固定。<br>
层数据字节编码:<br>
0x00, 1个字节,层结束,即层最后一个字节为0,后不跟数据。<br>
0x01, 1个字节,从当前位置按当前颜色宽度设置,实线绘制到结束,后不跟数据。<br>
0x02, 2个字节,沿线绘制n个单位长,紧跟一个字节即为n。关于单位,缺省即为1个像素,但绘制时可修改单位,从而绘制n*2或者n*其他的长度。即单位可变。<br>
0x03, 2个字节,沿线忽略n个单位长,紧跟一个字节即为n。<br>
0x04, 2个字节,在当前垂线绘制,后续字节设为c,则垂线相对线的起始结束y坐标为( c;0x0F, -( (c>>4);0x0F ) )。<br>
0x05, 1个字节,从当前位置起循环绘制,1层仅可能有一个此标志,若无,则从0开始循环,即循环整个层定义长。<br>
<br>
0x06, 2个字节,设置绘制线宽,后续字节即为线宽为几个单位,若为0,线绘制时采用1个单位宽,填充绘制时无边界线。<br>
0x07, 4个字节,设置绘制线颜色,后续3个字节为RGB。<br>
0x08, 1个字节,设置绘制线颜色为缺省颜色,可通过参数传递缺省颜色。<br>
0x09, 1个字节,设置缺省线宽,可通过参数指定。<br>
0x0A, 2个字节,设置绘制线宽为缺省线宽+n个单位,n即为后续值。<br>
<br>
0x0B, 2个字节,最小绘制线宽值,后续字节即为值。<br>
0x0C, 2个字节,最大绘制线宽值,后续字节即为值。<br>
<br>
0x0D, 2个字节,折线"<"绘制,当前位置即为左边点,设后续字节为c,右边点相对线的坐标为(
(c>>4);0x0F, -( (c>>4);0x0F ) )和( c;0x0F,
c;0x0F)。<br>
0x0E, 2个字节,折线">"绘制,当前位置为右边点,设后续字节为c,左边点相对线的坐标为(
-((c>>4);0x0F), (c>>4);0x0F )和( -(c;0x0F),
-(c;0x0F))。<br>
<br>
0x0F, 1个字节,从当前位置起忽略到结束,1层仅可能有一个此标志。<br>
<br>
0x10,
4个字节,从当前位置起绘制Polygon,PEN格式的Polygon是按对进行,一对是垂直的两点,后续字节第1个是后面还有多少对,第2个字节是该
队的沿线y值大者,第3个字节是沿线y值的差。如10 02 04 01,即为还有2对点,本对点为(X, 4)和(X,
3),若第3个字节为0,则退化为1点。<br>
0x11, 4个字节,Polygon点对,第1个是后面相对上一个0x10或者0x11沿线长度,第2个字节是该队的沿线y值大者,第3个字节是沿线y值的差。如10 02 04 01,即为沿线2个单位,本对点为(X, 4)和(X, 3)。<br>
<br>
0x12, 3个字节,从当前位置起绘制Polyline,后续字节第1个是后面还有多少点,第2个字节是该点的沿线y值。<br>
0x13, 3个字节,Polyline点,第1个是后面相对上一个0x12或者0x13沿线长度,第2个字节是该队的沿线y值。<br>
<br>
0x14, 4个字节,设置填充颜色,后续3个字节为RGB。<br>
0x15, 1个字节,设置填充颜色为缺省颜色,可通过参数传递缺省颜色。<br>
0x16, 1个字节,设置填充颜色为透明。<br>
<br>
0x17, 2个字节,从当前位置起绘制到保留n个单位不绘制,n为后续字节值。<br>
0x18, 2个字节,从当前位置起忽略到保留n个单位,n为后续字节值。<br>
0x01、0x05、0x0F、0x17、0x18只可存在一个其中一个标志。若无任一,缺省为0x05循环整个层定义长。
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
游客

返回顶部