SharpMap学习:渲染流程

 

 

sharpmap 也看了一段时间了 0.9是一个很好的地图渲染组件 闲话少说

   先看例子:

  

 

渲染流程

1.设置map类的Zoom和Center坐标 可以得到地图当前视图的bbox即Envlope

  

   

 

其中Zoom为当前窗口对应实际的地图宽度MapWidth(Map类没有这属性,但有MapHeight,一般的地图缩放都是以Width为基准,height根据width算出)
这样上面算法就比较好理解了,最小坐标(左下)与最大坐标(右上)注意:地图坐标X坐标轴向右,Y坐标轴向上,与屏幕坐标方向不一致,其Y坐标轴向下。

MapHeight Zoom 乘以 高宽比和像素高宽比(默认为1.0)

2.map调用GetMap函数进行渲染(渲染到Size大小的Image上) ,GetMap里面首先设置Graphics的Transform为地图Map的MapTransform(坐标变换矩阵用于进行平面坐标变换如平移变换,比例变换,对称变换,旋转变换,错切变换或者复合变换)然后主要调用各个Layers的Render函数,代码如下:

 

     
3.VectorLayer.Render函数里面通过envelop查询数据源得到视图内几何数据集合(IDataSource.ExecuteIntersectionQuery函数),如果需要利用不同于数据的坐标系显示地图则需要坐标转换(设置CoordinateTransformation),则对每个几何对象进行坐标转换,如果是生成专题图即设置了theme,对每个几何对象渲染时利用theme获取其style,如果是普通地图即theme为null,则使用默认style,然后调用RenderGeometry方法渲染每个几何对象。代码如下:

      

 


4.RenderGeometry方法根据几何对象的类型(点线面等)调用VectorRenderer对象的DrawXX函数进行渲染
             
5.VectorRenderer.DrawXX实际上利用了GDI+接口的Graphic.DrawXX 画图 比如:

 

     

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值