hsghxm
路人甲
路人甲
  • 注册日期2004-10-27
  • 发帖数517
  • QQ4604052
  • 铜币1枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2287回复:2

[分享]关于地图打印中常见的几个问题的解决办法

楼主#
更多 发布于:2006-10-21 17:44
<P>把关于横向打印和分幅打印二个常见的解决方法贴出来,供大家参考!</P>
<P><FONT color=#1a1ae6>1.实现横向打印的关键步骤</FONT></P>
<P>axPageLayoutControl1.Page.Orientation=2;</P>
<P>IGraphicsContainer pGraphicsContainer = axPageLayoutControl1.GraphicsContainer;   <br>   IMapFrame pMapFrame = pGraphicsContainer.FindFrame(m_ActiveView.FocusMap) as IMapFrame;</P>
<P>Ienvelope newEnvelope=  newBLandscapeEnvelop(你的地图数据的横向envelope,长宽变动一下后生成的新的envelope)</P>
<P>     IElement pElement = pMapFrame as IElement;<br>     pElement.Geometry = newEnvelope; </P>
<P>axPageLayoutControl1.ActiveView.Refresh();  //最后刷新一下就可以</P>
<P><FONT color=#2222dd>2.分幅打印的分割方法</FONT></P>
<P>private  ArrayList  GetFarmerCol(IEnvelope curEnvelope,double width,double height)<br>  {<br>   ArrayList pEnvelopeList = new ArrayList();<br>   double pPrintScale = m_FormPrinterPageSet.printScale;<br>   //width单位为厘米,/100为米,/1000为公里,/100为经纬度(上海地区为北半球1度约100公里,赤道地区约130公里)<br>   //---->既:纸张的长或宽除以10,000,000为经纬度<br>   double pFrameWidth  = pPrintScale  * width / 10000000;<br>   double pFrameHeight  = pPrintScale  * height / 10000000;   <br>    <br>   double xCol = curEnvelope.Width/pFrameWidth;<br>   double xRow = curEnvelope.Height/pFrameHeight;<br>   <br>   int pCol =Convert.ToInt32(xCol);//不足一列的得按一列计算,行同理<br>   if(pCol<xCol)<br>    pCol++;</P>
<P>   int pRow =Convert.ToInt32(xRow);<br>   if(pRow<xRow) <br>    pRow++;<br>   <br>   //当只有一页或不足一页时候的情况(此时pCol and pRow ==1)<br>   if(pCol==1 ;; pRow == 1)<br>   {<br>    pEnvelopeList.Add(m_CurEnvelope);<br>   }<br>   else//多页情况<br>   {<br>    for (int i=0; i<pCol ; i++)<br>    {<br>     double  pXMin = (curEnvelope.XMin )  + (i * pFrameWidth);<br>     double  pXMax = (curEnvelope.XMin  ) +((i+1)* pFrameWidth);<br>     for (int j = 0 ;j<pRow ; j++)<br>     {<br>      double  pYMin = (curEnvelope.YMin )+ (j * pFrameHeight  );<br>      double  pYMax = (curEnvelope.YMin )+((j+1)* pFrameHeight  );<br>      IEnvelope pNewEnve = new EnvelopeClass();<br>      pNewEnve.PutCoords(pXMin,pYMin,pXMax,pYMax);     <br>      pEnvelopeList.Add(pNewEnve);<br>     }<br>    }<br>   }<br>   return pEnvelopeList;  } </P>
<P>有好的建议的话请大家跟贴!,<br><img src="images/post/smile/dvbbs/em11.gif" /></P>
[此贴子已经被作者于2006-10-21 17:52:09编辑过]
喜欢0 评分0
MSN:hsghxm@163.com QQ:4604052 (很少用,最好别加) Email:hsghxm@163.com 我的BOLG:http://www.gisempire.com/blog/user1/864/index.htm
hahaaluo
路人甲
路人甲
  • 注册日期2006-08-05
  • 发帖数146
  • QQ
  • 铜币591枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-10-24 14:31
<P>不错 ,不过这个只能单是在pagelayout里打印的,而我想问的就是我们加载的一般是在mapcontrol里的,那如何将mapcontrol里的图转化到pagelayout里呢?谢谢~~~~</P>
举报 回复(0) 喜欢(0)     评分
hsghxm
路人甲
路人甲
  • 注册日期2004-10-27
  • 发帖数517
  • QQ4604052
  • 铜币1枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-10-25 09:16
<img src="images/post/smile/dvbbs/em08.gif" />
MSN:hsghxm@163.com QQ:4604052 (很少用,最好别加) Email:hsghxm@163.com 我的BOLG:http://www.gisempire.com/blog/user1/864/index.htm
举报 回复(0) 喜欢(0)     评分
游客

返回顶部