QGis读解。。。

 

1.Qgsrenderer 图层绘制器抽象基类

 每个renderer只能绘制某一种适量图形对象, Qgsrenderer ::mVectorType 定义了适量图层类型(QGis::VectorType) ,Qgsrenderer定义了作为一个绘图器的基本功能接口

QgsRasterLayer 通过QgsSingleSymbolRenderer实现矢量对象的绘制

2. QgsMapLayer 地图图层

 图层类型: VECTOR,RASTER

2.1 QgsVectorLayer矢量图层

       与QgsVectorLayer对应的就是QgsRasterLayer , QgsMapLayer的子类图层对象仅仅这两种。

2.2 QgsMapCanvasLayer 画板图层

2.3 QgsMapLayerRegistry

       存储当前所有地图层对象,提供Layer id查询MapLayer对象的功能mapLayer(layid)

2.4 QgsMapCanvasLayer

       QgsMapCanvasLayer是qgis应用层的图层对象,用于村促跟用户交互的信息,它并不是Map核心数据对象

3.QgsFeature

图层特征对象。QgsFeature包含若干Attribute,一个QgsGeometry对象

QgsLine

 QgsLine由2个QgsPoint构成的线段

4. QgsMapRender

QgsMapCanvasMap利用此对象实现绘制,无子类实现。当canvas产生事件,诸如大小调整、移动、缩放等等请求时,QgsMapCanvas请求QgsMapCanvasMap进行刷新绘制,后者调用QgsMapRender::render()进行绘制图层。

Render(){

       QgsMapRender内部保留图层名称数组,根据图层id到QgsMapLayerRegistry中获取图层对象,绘制图层从最底部开始。

      

}

5.OgsMapCanvas图层绘制板

N个图层是绘制在QgsMapCanvasMap这个对象之上的,这个对象是Qt的绘制对象

QgsMapCanvasMap其实就是提供OgsMapRender的绘制缓冲,最终还是请求QgsMapRender进行图层绘制。

6. QgsProviderRegistry

       Qgis的数据源作为一个provider将被登记在QgsProviderRegistry对象中

创建一个新的矢量图层

QgsProviderRegistry中查找ogr的provider,创建一个ogr的矢量数据空间createEmptyDataSource

QgsOgrProvider作为QgsVectorDataProvider的子类,QgsVectorDataProvider作为接口被其他模块访问

new QgsVectorLayer(ogr){

       new QgsSingleSymbolRenderer()

}

QgsMapToPixel

       地图单位到屏幕像素位置的转换,这个操作非常简单,根据设定的每像素地图大小单位来计算地图单位(world)到屏幕像素的转换,反之亦然

QgsProject 、QgsProjectFileTransform、Qgsversion

这些类用于qgis项目信息管理之用,项目文件类型名.qgs,格式是xml。QgsProjectFileTransform用于不同版本的qgis的功能文件的转换

QgsSymbol

这个类一方面是实现绘制图层类型的Icon,Qgis中如果创建新的line矢量层,则这个层的图标显示在层显示树的节点的Icon就是用QgsSymbol绘制产生

<!--[if !vml]--><!--[endif]-->

另一方面,在编辑矢量图层时,添加的线段都有两端的节点点,QgsSymbol就是绘制这个节点

<!--[if !vml]--><!--[endif]-->

矢量图层类型:

    Point,

    Line,

    Polygon,

QgsMapTip

图层地标提示。当鼠标在MapCanvas上移动时,MapTip被一个定时器驱动,这时MapTip将当前地图坐标作为中心点,围绕这个点产生一个选择区域(  double searchRadius = mpMapCanvas->extent().width() * (QGis::DEFAULT_IDENTIFY_RADIUS / 100.0 );)

这个区域作为搜寻区域提交给ogr-provider查找地图的Feature对象

再找Featrue的可显示的字段,然后用QToolTip进行显示。 QToolTip最终是要被替换掉的

QgsFieldMap

typedef QMap<int, QgsField> QgsFieldMap;

矢量图层的对象具有多个属性,可以在添加编辑对象时设置这些属性

<!--[if !vml]--><!--[endif]-->

attributeFields[CmtAttr] = QgsField(attr[CmtAttr], QVariant::String, "text");

以上代码就可以添加一种属性类型

地图距离单位:

METERS,

FEET,

DEGREES,

Mbr : 可能全称 Max boundary Rectangle

坐标转换:

      1.空间坐标转换: long/lat坐标投影到世界地图坐标 【QgsCoordinateTransform实现】

       2.世界坐标转换到屏幕坐标【QgsMapToPixel实现】

//数学宏

#define PI 3.1415926

//角度转弧度

#define DEG_TO_RAD(ang) ((ang)*PI/180.0)

//弧度转角度

#define RAD_TO_DEG(rad) ((rad)*180.0/PI)

//取得x~y之间任意一个值

#define RAND_RANGE(x,y) ((x) + rand() % ((y) - (x) + 1)))

GPX

http://www.gpsbabel.org/ 是不同gps日志数据的通用解析和转换工具

gps log数据分类:

<!--[if !supportLists]-->l         <!--[endif]-->Waypoints: 我的行径上要路过的点。比如我去北京,顺便到徐州拜访朋友,所以途经的徐州是我要停留的waypoint

<!--[if !supportLists]-->l         <!--[endif]-->Routes: 是指所有WayPoint的集合构成的线路

<!--[if !supportLists]-->l         <!--[endif]-->Tracks: 我途经的路上所有走过的轨迹点(因该是最多的数据量)

WayPoint和route我理解为是面向应用的,而Track就是基础数据,是物理的记录

看看老外的注释

> a) waypoint
 
A geopoint with some special tags like name, comment and the like. 
Usually used to mark special locations as your home, a hotel or a 
geocache. Huge collections of gas stations, post boxes, shops and the 
like are called "points of interest" (aka POIs).
 
> b) track
 
A collection of geopoints recorded by your GPS device while traveling. A 
trackpoint doesn't have a name or comment, but it usually has a 
timestamp. This distibguishes a trackpoint from a waypoint.
 
> c) route
 
A collection of waypoints defining the route you want to pass while 
traveling. 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值