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 画图 比如: