QGis读解。。。

来源:互联网 发布:一叶而天下知秋 编辑:程序博客网 时间:2024/05/09 05:08
 

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. 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信申诉怎么让好友发验证码怎么办 微信申诉好友都删除了怎么办 恋与制作人原来的帐号不见了怎么办 手机号被别人注册了手机银行怎么办 想上老婆的陌陌号但要验证码怎么办 中国家医居民端注册信息有误怎么办 别人给我充的q币怎么办 qq忘记密码手机号码也换了怎么办 手机号码不用了微信忘记密码怎么办 手机号码注销了微信忘记密码怎么办 微信忘记密码手机号码也换了怎么办 微信钱包里的钱莫名少了怎么办 被骗给人冲q币了怎么办 支付宝账户异常无法领取红包怎么办 微信q币支付错了怎么办 王者荣耀不小心把点卷用了怎么办 微信绑定的qq号密码忘记了怎么办 微信红包实名认证没银行卡怎么办 手机烂了换新手机微信支付宝怎么办 支付宝转账给别人号码没用了怎么办 微信转账验证码收不到怎么办 陌生网友生日叫我发红包怎么办 微信群的群主不小心推出群该怎么办 支付宝验证码被别人知道了怎么办 微信解除银行卡绑定零钱清零怎么办 qq号被盗了理财通的钱怎么办 工行转错账号的钱被冻结怎么办 微信20w限额满了怎么办 通过qq号申请微信被盗了怎么办 微信号被盗手机绑定被改怎么办 腾讯视频激活码兑换达到限制怎么办 虚拟服务购买自动每月扣q币怎么办 微信被骗充值Q币怎么办 微信给别人充q币怎么办 k歌别人送的k币怎么办 忘记了qq号码但记得密码怎么办 q自己的活干完了该怎么办 在应用宝下载的游戏搜不到了怎么办 衣服有图片在淘宝找不到同款怎么办 淘宝卖家小儿说质量不合格怎么办 订单显示显示已签收没收到货怎么办