cjj1308
路人甲
路人甲
  • 注册日期2006-06-29
  • 发帖数28
  • QQ
  • 铜币201枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1347回复:0

[求助]mapgis明码格式面图层(wap)转shp格式

楼主#
更多 发布于:2008-06-25 17:19
<P>wap数据格式</P>
<P>区文件结构</P>
<P >区逻辑结构为:</P>
<P >    文件头  弧段数  1号弧段  2号弧段……最后弧段  节点数  1号结点  2号结点……最后结点  区数  1号区  2号区…… 最后区</P>
<P >具体为:</P>
<P >A、<U>文件头</U>,8个字节</P>
<P >    WMAP9023 (老的文件为WMAP6023或WMAP7023和WMAP8023)</P>
<P >B、<U>弧段数    </U>   an</P>
<P >C、<U>1号弧段</U></P>
<P >线型号  辅助线型号  线色  线宽  X系数  Y系数  辅助色  图层  透明输出</P>
<P >前节点号  后节点号 {若没有指向任何节点,则为0}</P>
<P >左区号  右区号     {若没有区号,则为0}</P>
<P >    线点数m1</P>
<P >    x1  y1</P>
<P >    x2  y2</P>
<P >    …</P>
<P >    xm1  ym1</P>
<P >    ………</P>
<P >    ID   线长度</P>
<P >    an号弧段</P>
<P >    线型号  辅助线型号  线色  线宽  X系数  Y系数  辅助色  图层  透明输出</P>
<P >    前节点号  后节点号 {若没有指向任何节点,则为0}</P>
<P >左区号  右区号     {若没有区号,则为0}</P>
<P >    线点数man</P>
<P >    x1  y1</P>
<P >    x2  y2</P>
<P >    …</P>
<P >    xman  yman</P>
<P >    ID   线长度 </P>
<P >D、<U>节点数</U>           nn</P>
<P >E、<U>1号节点</U></P>
<P >    x1  y1 </P>
<P >    节点弧段数k</P>
<P >    弧段号1   弧段号2…弧段号k</P>
<P >    ………</P>
<P >    nn号节点</P>
<P >    xnn  ynn</P>
<P >    节点弧段数knn</P>
<P >    弧段号1   弧段号2…弧段号knn</P>
<P >F、<U>区数</U>     rn</P>
<P >G、<U>1号区</U></P>
<P >    区颜色  填充图案号  图案高  图案宽  笔宽  图案颜色  图层  透明输出  ID  面积  周长</P>
<P >    区数据项数n</P>
<P >    弧段1编号      {第1项}</P>
<P >    弧段2编号      {第2项}</P>
<P >    …</P>
<P >    弧段k编号      {第k项}</P>
<P >    0               {第k+1项}</P>
<P >    弧段k+1编号    {第k+2项}</P>
<P >    弧段k+2编号    {第k+3项}</P>
<P >…</P>
<P >    最后弧段编号    {第n项}</P>
<P >    ……</P>
<P >    m号区</P>
<P >    区颜色  填充图案号  图案高  图案宽  笔宽 图案颜色</P>
<P >    图层  透明输出  ID  面积  周长</P>
<P >    区数据项数nm</P>
<P >    弧段1编号      {第1项}</P>
<P >    弧段2编号      {第2项}</P>
<P >    …</P>
<P >    弧段k编号      {第k项}</P>
<P >    0               {第k+1项}</P>
<P >    弧段k+1编号    {第k+2项}</P>
<P >弧段k+2编号    {第k+3项}</P>
<P >    …          </P>
<P >    最后弧段编号    {第nm项}</P>
<P > </P>
<P >            if (m_filename.Substring(m_filename.Length - 3, 3) == "wap")   //面<BR>            {<BR>                line = m_reader.ReadLine();<BR>                int i = Convert.ToInt32(line);<BR>                IPointCollection ipRing = new Polygon();<BR>                IFeature iFeature = null;<BR>                object missing = Type.Missing;<BR>                int linNO =3;<BR>                int pntCount = 0;<BR>                int pntNO = 0;<BR>                int ringcount = 0;<BR>                int elseNO = 0;<BR>                 while (!m_reader.EndOfStream)<BR>                 {<BR>                    line = m_reader.ReadLine();<BR>                    if (linNO == 6)<BR>                    {<BR>                        pntCount = Convert.ToInt16(line);<BR>                    }<BR>                    if (linNO > 6)<BR>                    {<BR>                        int nn = line.IndexOf(",");<BR>                        if (nn == -1)<BR>                        {<BR>                            pntCount = Convert.ToInt16(line);<BR>                        }<BR>                        if (linNO > elseNO + 5)<BR>                        {<BR>                            if (pntNO < pntCount)<BR>                            {<BR>                                ESRI.ArcGIS.Geometry.Point p = new ESRI.ArcGIS.Geometry.Point();<BR>                                string pt = line;<BR>                                int temp1 = pt.IndexOf(",");<BR>                                string pt2 = pt.Substring(temp1 + 1, pt.Length - temp1 - 1);<BR>                                pt = pt.Substring(0, temp1);<BR>                                double x = Convert.ToDouble(pt);<BR>                                double y = Convert.ToDouble(pt2);<BR>                                p.PutCoords(x, y);<BR>                                ipRing.AddPoint(p, ref missing, ref missing);<BR>                                pntNO++;<BR>                            }<BR>                        }<BR>                        if (pntNO == pntCount)<BR>                        {<BR>                            pntNO = 0;<BR>                            elseNO = linNO;<BR>                            AddNewShapeToFeatureClass((IGeometry)ipRing, ref iFeature, iFeatClass);<BR>                            ipRing = new Polygon();<BR>                            ringcount++;<BR>                        }<BR>                    }<BR>                    if (ringcount == i) break;<BR>                    linNO++;<BR>                 }<BR>            return;<BR>            }</P>
<P >由于wap中的面数据是由弧段组成,我这样写的话,只能将wap中的弧段以面的形式表现出来,但这样明显是不对的,有高手可以帮帮忙啊?</P>
喜欢0 评分0
游客

返回顶部