地图与地图标注api用户手册

上传人:第*** 文档编号:38741852 上传时间:2018-05-07 格式:PDF 页数:29 大小:283.84KB
返回 下载 相关 举报
地图与地图标注api用户手册_第1页
第1页 / 共29页
地图与地图标注api用户手册_第2页
第2页 / 共29页
地图与地图标注api用户手册_第3页
第3页 / 共29页
地图与地图标注api用户手册_第4页
第4页 / 共29页
地图与地图标注api用户手册_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《地图与地图标注api用户手册》由会员分享,可在线阅读,更多相关《地图与地图标注api用户手册(29页珍藏版)》请在金锄头文库上搜索。

1、高德软件1 / 29地图地图与与地图地图图图层层APIAPI 用户手册用户手册版本版本 V V2 2.0.0高德软件有限公司高德软件有限公司2 20 01 10 0 年年 1 12 2 月月高德软件2 / 29目录目录1 概述 .31.1 说明 .31.2 约定 .31.3 定义 .51.3.1 EAnchorRectLocationType 锚点定义.51.3.2 本 API 中使用的点.51.3.3 本 API 中使用的区域.61.3.4 本 API 中定义的按键键值.71.3.5 本 API 中所有的 Item 的图标。.81.3.6 本 API 中绘制适量地图的效果设置 .81.3.7

2、 本 API 中地图下载时的网络状态 .82 结构 .92.1 概要框架图.92.1.1 主要类及基本结构图.92.1.2 绘制事件结构图.112.1.3 键盘事件及触摸屏事件处理.113 主要模块的功能概述.123.1MapView视图框架模块.123.2TGeoPoint 地图使用的经纬度坐标类.163.3Overlay 模板类.173.4OverlayBundle Overlay 管理模块.183.5PointizedOverlay 点 Overlay 模块.203.6OverlayItem 类.233.7PointItem 点.233.8LineizedOverlay 类.243.9L

3、ineItem 线 Item.273.10 API 的图标管理.283.11 MapController 地图动作模块.29高德软件3 / 291 概述概述1.1 说明说明该文档详细描述了地图与基于地图的图层标注在 Symbian 平台的实现以及类的功能和结构。 。1.2 约定约定 引擎中主要有 5 个模块: MapView(视图模块), MapController(地图管理模块),OverlayBundle (Overlay 管理模块),Overlay,OverlayItem。5 个模块地图引擎 MapController 里使用的图标最终位 CFbsBitmap 图片,MapControl

4、ler 模块已封装到了 MapView 中,用户请使用MapView 对地图进行操作。 点 Item,则以地图图标底线中心点为锚点。 Overlay 是纯虚类需要派生才能使用。 用户通过 OverlayBundle 管理模块中的函数添加多个 Overlay。OverlayBundle 已封装到了 MapView 中,请使用 MapView 对OverlayBundle 进行操作。 每个 Overlay 可以管理多个 OverlayItem,并且有自己的 事件高德软件4 / 29处理模块和绘制方法,用户可以覆盖重写。 OverlayItem 是纯虚类,需要有此派生出点,线面等。 每个层里用户可以

5、通过函数添加多个 OverlayItem。 点位于地图中心时展开 Label。 当点位于地图中心时,按 OK 按钮将点设置为所在层的焦点,当再次点击时执行点击动作。 当第二次点击别的点或空区域时,焦点丢失。 线是多个地理坐标点的集合。 线中某个点位于地图中心时展开 Label。 触摸屏当点击线段中某个点时,展开 Label。 地图模块可以对地图进行放大缩小移动等功能。 地图模块可以根据经纬度定位地图中心点。 试图框架模块具有 Symbian 简单的架构, 用户可以根据自身需求覆盖其绘制,事件处理等方法。 为了便于移植,将 Symbian 一些类和变量在 map_common.h文件中从新命名。

6、 了便于移植,Overlay,OverlayItem 以及地图 MapController 所有数据都为 UTF-8 格式编码以 char 数组形势保存字符串。 在具体的绘制方法中,绘制时需要将 UTF-8 转码。高德软件5 / 291.3 定义定义1.3.1EAnchorRectLocationType 锚点锚点定义定义锚点只一个点的中心点在具体图表的什么位置。以下为具体定义,默认点 Item 锚点为EAnchorTypeDownMid,即 7enum EAnchorRectLocationType/*0*1*2*3*4*5*6*7*8*/EAnchorTypeUpLeft = 0,EAnc

7、horTypeUpMid,EAnchorTypeUpRight,EAnchorTypeMidLeft,EAnchorTypeMidMid,EAnchorTypeMidRight,EAnchorTypeDownLeft,EAnchorTypeDownMid,EAnchorTypeDownRight;1.3.2 本本 API 中使用的点中使用的点为了地图 API 便于在其他平台使用和移植,本 API 对于系统的点和区域,进行从新定义,在使用 Symbian 视图框架,进行绘制时,只能使用 Symbian 的定义struct MPointpublic:高德软件6 / 29int iX;int iY;

8、MPoint()iX = 0;iY = 0;MPoint(int ax,int ay)iX = ax;iY = ay;MPoint(MPoint& apoint)iX = apoint.iX;iY = apoint.iY;MPoint(const TPoint& apoint)iX = apoint.iX;iY = apoint.iY;1.3.3 本本 API 中使用的区域中使用的区域struct MRectpublic:int iTx;int iTy;int iBx;int iBy;MRect()iTx = 0;iTy = 0;iBx = 0;iBy = 0;MRect(int ax,int

9、 ay,int abx,int aby)iTx = ax;高德软件7 / 29iTy = ay;iBx = abx;iBy = aby;MRect(const TRect& aTRect)iTx = aTRect.iTl.iX;iTy = aTRect.iTl.iY;iBx = aTRect.iBr.iX;iBy = aTRect.iBr.iY;MRect(const MRect& aMRect)iTx = aMRect.iTx;iTy = aMRect.iTy;iBx = aMRect.iBx;iBy = aMRect.iBy;1.3.4 本本 API 中定义的按键键值中定义的按键键值为了地

10、图 API 便于在其他平台使用和移植,本 API 对于案件事件进行从新定义,只是在涉及到 Symbian 的视图框架时,继续使用 Symbian 的定义。enum KeyEventTypeEKeyNone = 0,EKeyUp,EKeyDown,EKeyLeft,EKeyRight,EKeyOk, / ok 按钮EKeyNkp1,/* 键盘 1 */EKeyNkp2,/* 键盘 2 */EKeyNkp3,/* 键盘 3 */EKeyNkp4,/* 键盘 4 */EKeyNkp5,/* 键盘 5 */EKeyNkp6,/* 键盘 6 */EKeyNkp7,/* 键盘 7 */EKeyNkp8,/

11、* 键盘 8 */EKeyNkp9,/* 键盘 9 */高德软件8 / 29EKeyNkp0,EKeyHash,/* 键盘(#) */EKeyNkpAsterisk,/* 键盘 (*)*/;1.3.5 本本 API 中所有的中所有的 Item 的图标的图标。API 中的图标都由 ItemIco 来提供, 用户需要手动向 ItemIco 来添加默认的图标, 如果没有图标,API 中设计到图标的地方不会绘制,涉及到图标运算的时候,会抛出异常。请参考 3.10 API 的图标管理1.3.6 本本 API 中绘制中绘制适量地图的适量地图的效果设置效果设置enum EvmmDetailLevel / 设

12、置适量地图的效果详细程度EVmmLowest = 0,/ 有锯齿但效率高EVmmNormal = 1,EVmmHigh= 2/ 抗锯齿,默认设置;1.3.7 本本 API 中地图下载时的网络状态中地图下载时的网络状态/ 地图下载模块的网络状态回调class MapStatusObserverpublic:enum TMapStatusEMapStatusMapBlockReady,/一个图块下载完成EMapStatusUserCancel,/用户取消EMapStatusNetFailed,/网络失败EMapStatusFinishDownload,/完成下载EMapStatusConnecti

13、ng,/正在连接EmapStatusReconnecting/重新连接;高德软件9 / 29/ 回调接口,用户可以继承 MapView 中的 MapStatusNotify()函数来接受地图模块的网络回调。virtual void MapStatusNotify(TMapStatus aMapStatus,TInt aTotalSize, TInt aCurrentSize)=0;/当返回结果为 EMapStatusMapBlockReady 时 TInt aTotalSize 总大小, TInt aCurrentSize 当前已得到的数值为有效数值。其他状态为 0 为无效。;2 结构结构2.

14、1 概要概要框架框架图图2.1.1 主要类主要类及及基本基本结构图结构图Class Overlay纯虚类,主要定义了绘制接口,事件处理接口和对于 Item 进行增删改查等管理的接口。Class PointizedOverlay : public Overlay对点进行管理的 Overlay,并继承实现了Overlay 的基本功能Class LineizedOverlay : public Overlay对线进行管理的 Overlay,并继承实现了Overlay 的基本功能主要成员:Array iPointArray;/点的指针数组主要成员:Array iLineItemArray;/线的指针数

15、组Class OverlayItem所有点,线,面等元素的基类主要成员:Char* iTitle;Class PointItem : publc OverlayItem对点处理的 Item 继承 OverlayItemClass LineItem: overlayItem对线处理的 Item 继承 OverlayItem高德软件10 / 29Class MapView : public CCoeControlMapView 主要继承了 Symbian 的视图框架,接受系统传入的事件,并将事件传给Overlay 管理模块和地图管理模块。主要成员:OverlayBundle*iOverlayBun

16、dle;/ Overlay 管理模块MapController* iMiniMap;/ 地图管理模块Class OverlayBundle管理多个 Overlay, 并对多个 Overlay进行增删改查等操作主要成员:ArrayiOverlayArray; /Overlay的指针数组ClassMapController负责地图的计算,移动,绘制,以及经纬度和坐标之间的换算等。主要成员:底层地图引擎class PointizedOverlay : public Overlay用于点管理的 Overlay, 继承并实现了Overlay 的方法,并管理多个点。主要成员:Array iPointArr

17、ay; / 点的指针数组class LineizedOverlay : public Overlay用于线管理的 Overlay,继承并实现了 Overlay 的方法,并管理多个线。主要成员:Array iLintArray; / 线的指针数组高德软件11 / 292.1.2 绘制事件结构图绘制事件结构图2.1.3 键盘事件及触摸屏事件处理键盘事件及触摸屏事件处理箭头上的编号代表执行循序。MapView 类的 Draw() 调用地图绘制和 OverlayBundle 绘制方法地 图 绘 制 方 法DrawMap (aRect);OverlayBundle 的 Draw 开始遍历所有的Overl

18、ay 并调用 Overlay 的 DrawOverlay 的派生类根据定义的规则并读取OverlayItem 的数据进行绘制MapView 将事件传给 OverlayBundle1OverlayBundle 将事件传给所有的 Overlay如果 Overlay 处理了这个事件就返回 true,否则返回 false当发现有一个 Overlay 处理了这个事件直接返回,不再向其他 Overlay 转发。层模块会遍历自己所有的 Item,并处理这个事件,当处理了这个事件则 returntrue否则继续处理下一个 Item.没有处理则返回假.23返回事件是否被这层处理将事件传给地图模块当所有的元素都没

19、有 处 理 这 个 事 件时,视图框架就将这个事件传给地图模块45高德软件12 / 293 主要模块的功能概述主要模块的功能概述3.1MapView视图视图框架框架模块模块视图框架模块主要是继承了 symbian 的基本绘制和事件处理,并将动作传给 OverlayBundle和地图模块。方法概述MapView*NewL(const int aWide , const int aHigh,const TDesC8& aKey ,const TDesC8&aRootPath,const int aIAPid = -1);构造函数const int aWide ,传入一个宽,来决定地图的尺寸cons

20、t int aHigh,const传入一个高,来决定地图的尺寸const TDesC8& aKey用户的keyconst TDesC8& aRootPath用户传入一个程序的根目录,比如传入e:dataMyMap则程序的所有数据都会放入这个目录里,注意相关pkg文件也必须和次路径统一,比如资源文件。e:DataMyMapAPIdataicon.ind。注意:e:DataMyMapAPI 是用户传入的根路径,dataicon.ind 是系统自动读取根路径中的data文件夹。const int aIAPid = -1连接网络时的接入点 ID,默认- 1 会自动弹出接入点ID 供最终用户选择。voi

21、dMapViewConstructL(const int aWide , const int aHigh,const TDesC8& aKey ,const int aIAPid = -1);初始化 MapAPI 数据函数也是二次构造方法。注意:当用户 NewL()一个 MapView 时不需要调用,当用户继承 MapView时,需要在子类的二次构造函数中直接调用 MapViewConstructL()函数来初始化 MapView。const int aWide ,传入一个宽,来决定地图的尺寸const int aHigh,const传入一个高,来决定地图的尺寸const TDesC8& aK

22、ey用户的keyconst int aIAPid = -1连接网络时的接入点ID,默认- 1会自动弹出接入点ID供最终用户选择。高德软件13 / 29voidMapZoomIn();地图放大voidMapZoomout();地图缩小voidDraw(const TRect& aRect) const绘制,此绘制不做任何处理,直接调用 DrawMap()和 DrawOverlayBundle()voidDrawMap(const TRect& aRect) const绘制地图voidDrawOverlayBundle(const TRect& aRect) const绘制 OverlayBund

23、levoidMapStatusNotify(MapStatusObserver:TMapStatusaMapStatus,TIntaTotalSize, TInt aCurrentSize)地图模块的网络状态回调MapStatusObserver:TMapStatus 为当前网络的状态TInt aTotalSize,需要下载的地图数据的总大小TInt aCurrentSize当前已下载的地图数据的大小voidHandlePointerEventL(const TPointerEvent& aPointerEvent);系统的触摸屏事件不做任何处理直接将事件传给OverlayHandleEven

24、t()如果返回false则没有Item触发事件,则将事件传给MapHandleEvent();来处理地图内容TKeyResponseOfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType);系统的键盘事件处理函数,不做任何处理直接将事件传给OfferKeyToOverlayBoolOfferKeyToOverlay( const TKeyEvent &aKeyEvent, TEventCode aType );将键盘事件传给OverlayBundle如果没有处理,则再传给OfferKeyToMap.返回true为已经处理了这个事件

25、,false没有处理这个事件boolOfferKeyToMap( KeyEventType aKeyType );将事件传给MapController()返回true为已经处理了这个事件,false没有处理这个事件boolMapHandleEvent(const TPointerEvent& aPointerEvent);地图的触摸屏处理事件,主要计算用户是电击还是拖拽地图。boolOverlayHandleEvent (const TPointerEvent& aPointerEvent);Overlay的触摸屏处理事件。返回true为已经处理了这个事件,false没有处理这个事件intAd

26、dNewOverlay(Overlay* aOverlay);调用OverlayBundle添加一个OverlayOverlay返回添加的Overlay的索引值 - 1添加失败boolAddItemToOverlay(int aOverlayIndex,OverlayItem* aItem);调用OverlayBundle向指定的层添加一个itemIntaOverlayIndex为Overlayl在数组中的位置返回true为添加成功,false添加失败高德软件14 / 29boolAddItemToOverlay(Overlay* aOverlay,OverlayItem* aItem);调用

27、OverlayBundle向指定的aOverlay添加一个aItem返回true为添加成功,false添加失败Overlay*GetOverlay (OverlayItem* aItem)const;查找Item属于哪个overlay返回NULL为没找到 否则返回找到的 Overlay指针Overlay*GetOverlay (const char* aName,int aNameL)const;通过名字找overlaychar* aName : 名字的指针int aNameL : 名字的长度返回NULL为没找到 否则返回找到的 Overlay指针 Overlay*GetOverlay (in

28、t aIndex)const;通过索引找overlayIntaIndex为Overlayl在数组中的位置返回NULL为没找到 否则返回找到的 Overlay指针intGetOverlayCounter ()const; / 得到Overlay总数boolbool DelOverlay(char* aOverlayName,int aNameL);根据名字删除overlay返回true为删除成功,false删除失败boolBool DelOverlay(int aIndex);根据索引删除overlayIntaIndex为Overlayl在数组中的位置返回true为删除成功,false删除失败b

29、oolbool DelAllOverlay();删除所有overlay返回true为删除成功,false删除失败voidClean();清空Overlay中所有的Overlay的指针,但不释放所有的Overlay和Item资源,便于用户外部排序筛选Item后从新添加到Overlay中。voidInsert(Overlay* aOverlay,int aLocation = -1);插入在指定的位置插入一个Overlay索引,默认插入到序列末尾,Overlay* aOverlay 要插入的Overlay指针int aLocation要插入的位置,如果小于0或者大于当前数组的长度, 则认为添加到序

30、列末尾。高德软件15 / 29voidrawVMDetailLevel(EvmmDetailLevel aDetailLevel);绘制适量地图的质量详细等级分三级,最低级无抗锯齿,但绘制效率高,一般用户推拽或动画等过程中使用,提高绘制效率。见1.3.6 本API中绘制适量地图的效果设置以下为地图相关处理函数voidvoid GetGcXY(int aSurveyX , int aSurveyY ,int& ax , int& ay)const;给一个经纬度坐标,转换成屏幕坐标int aSurveyX , int aSurveyY为传入的经纬度坐标int& ax , int& ay为计算结果后

31、的屏幕坐标voidSetMapLevel(const TInt& aLevel);修改地图等级 TInt& aLevel 为120voidSetMapCenterLonLat(const TGeoPoint& aGeoPoint);以经纬度坐标设置地图中心点TGeoPoint& aGeoPoint: 中心点经纬度voidMove(KeyEventType aMoveDriection,const TInt aStep = 10);传入键盘事件,调整地图TInt aStep = 10 : 手机屏幕的10个像素voidMoveToPosition(const TPoint& aPoint);以屏幕

32、坐标设置地图中心CFbsBitmap*GetBitmap()const;得到地图的最终结果,返回计算完后的地图内容,用户可以得到地图的Bit后将其绘制到用户指定的区域。TIntGetMapLevel();得到地图等级返回地图等级120TGeoPoint*GetMapCenter();返回地图中心点经纬度,NULL为地层地图模块没有正常初始化voidGetMapCenter(TPoint& aCenterPoint);得到地图中心点的地理坐标TPoint& aCenterPoint存放地图中心点地理坐标voidGetScreenPointByLonLat(TPoint& aScreenPoint

33、,const TGeoPoint&aGeoPoint,TBool aGPS);获取给定地理坐标位置的屏幕坐标const TGeoPoint& aGeoPoint:给出的经纬度TPoint& aScreenPoint: 得到的屏幕坐标TBool aGPS:是否是gps定位,默认为falsevoidSetMapSize(int aW,int aH);在使用过程中修改地图模块的大小高德软件16 / 29aW : 宽aH:高voidCancelNetwork();停止map的网络引擎,在修改地图大小尺寸和删格适量引擎时,必须断掉网络引擎,从新构造内部数据void GetMapPixelCenter(l

34、ong &nCenterX, long &nCenterY);void TransformGeographyToPixel(int dLon, int dLat, int &pixelX, int &pixelY);void TransformPixelToGeography(int pixelX, int pixelY, int &dLon, int &dLat);删除这3个函数。已不提供任何20级像素功能voidSetIapID(int aIAPid);修改网络连接的接入点ID,如果改动接入点,建议从新生成MapAPI。intGetIapID();得到当前的IapIdintint GetV

35、ersion(TDes& aVersion);给一个字符串返回版本号.如 1.1 , 1.2 , 2.0等3.2TGeoPoint 地图地图使用的经纬度坐标类使用的经纬度坐标类地图模块会用到坐标系统,TGeoPoint 类将经纬度封装起来方便用户使用。TGeoPoint();构造函数,经纬度默认为 0。TGeoPoint(const TInt32& aLongitudeE6,const TInt32& aLatitudeE6);构造函数TInt32& aLongitudeE6 经度TInt32& aLatitudeE6 纬度TGeoPoint(const TReal& aSourceLongi

36、tude,const TReal& aSourceLatitude);构造函数TReal& aSourceLongitude 经度TReal& aSourceLatitude 纬度TGeoPoint(const int aSourceLongitude,const int aSourceLatitude);构造函数int aSourceLongitude 经度int aSourceLatitude 纬度TInt32GetLongitudeE6得经度TInt32GetLatitudeE6高德软件17 / 29得纬度3.3Overlay 模板类模板类Overlay 类是所有Overlay的基类,为

37、纯虚类,子类需要继承char*GetTitle(int& aTitleL)const;获得TitleInt aTitleL:title的长度voidSetTitle(char* aTitle,int TitleL);修改titlevoidDraw(WinGC& canvas, MapController& mapView, bool shadow = false)const=0;画item纯虚函数boolDraw(WinGC& canvas, MapController& mapView, bool shadow, longwhen)const=0;画item纯虚函数voidDrawAt(Wi

38、nGC& canvas, int aItemIndex,int x, int y, bool shadow)const=0;画item纯虚函数boolKeyEvent(KeyEventType event, MapController& mapView)=0;键盘事件处理boolTouchEvent(const TouchEventType& e, MapController& mapView)=0;触摸屏事件OverlayItem*GetItem(const char* aItemName,int aL)const=0;通过名字查找item返回NULL为没找到OverlayItem*GetI

39、tem(const int& aIndex)const=0;根据item的索引,即item在数组中的位置查找返回NULL为没找到intGetItemCount()const=0;得到item总数boolSearchItem(OverlayItem* aItem)=0;搜索本层是否有此ItemboolDelItem(OverlayItem* aItem)=0;删除指定的点boolDelItem(const int index)=0;根据item在数组中的位置删除高德软件18 / 29boolDelAllItem()=0;删除所有itemvoidClean()=0;清空所有Item指针,但不释放I

40、tem资源boolAddItem(OverlayItem* aItem)=0;添加itemboolGetShow()constreturn iShow;本层是否显示voidSetShow(bool aShow)iShow = aShow;修改本层是否显示intGetFocus()const=0;得到该层得焦点返回该层焦点,- 1为本曾没有焦点voidSetFocus(int aPointItemIndex)=0;设置该层得焦点int aPointItemIndex :当前层中,处于焦点的item的索引值voidvoid DrawFocusItem( WinGC& aGc, MapControl

41、ler& aMap ,int aItemIndex)const= 0;画overlay中一个指定的item的标题,有时系统需要从新绘制当前焦点的item的title3.4OverlayBundle Overlay 管理管理模块模块负责增删改查所有的 Overlay,并将所有的事件下发给所有的 Overlay方法概述intAddNewOverlay(Overlay* aOverlay);添加一个OverlayOverlay并返回添加的Overlay的索引值boolAddItemToOverlay(int aOverlayIndex,OverlayItem* aItem);向指定的层添加一个ite

42、mIntaOverlayIndex为Overlayl在数组中的位置返回true为添加成功,false添加失败高德软件19 / 29boolAddItemToOverlay(Overlay* aOverlay,OverlayItem* aItem);向指定的aOverlay添加一个aItem返回true为添加成功,false添加失败Overlay*GetOverlay (OverlayItem* aItem)const;查找Item属于哪个overlay返回NULL为没找到 否则返回找到的 Overlay指针Overlay*GetOverlay (const char* aName,int aN

43、ameL)const;通过名字找overlaychar* aName : 名字的指针int aNameL : 名字的长度返回NULL为没找到 否则返回找到的 Overlay指针 Overlay*GetOverlay (int aIndex)const;通过索引找overlayIntaIndex为Overlayl在数组中的位置返回NULL为没找到 否则返回找到的 Overlay指针intGetOverlayCounter ()const; / 得到Overlay总数boolbool delOverlay(char* aOverlayName,int aNameL);根据名字删除overlay返回

44、true为删除成功,false删除失败boolbool delOverlay(int aIndex);根据索引删除overlayIntaIndex为Overlayl在数组中的位置返回true为删除成功,false删除失败boolbool delAllOverlay();删除所有overlay返回true为删除成功,false删除失败voidClean()=0;清空指针,但不释放资源voidDraw(WinGC& aGc)const;遍历所有的Overlay并调用所有的Overlay的DrawboolKeyEventL(KeyEventType aKeyType );遍历所有的Overlay并将

45、键盘事件传给Overlay.如果Overlay返回true则直接返回,否则继续传给下一个Overlay高德软件20 / 29boolTouchEvent(const TouchEventType& aPointerEvent );遍历所有的Overlay并将触摸屏事件传给Overlay.如果Overlay返回true则直接返回,否则继续传给下一个Overlay3.5PointizedOverlay 点点 Overlay 模块模块PointizedOverlay 里面提供了管理点的增删改查方法,和自身的绘制,事件处理方法,用户可以派生或重载。方法概述virtual boolKeyEvent(Ke

46、yEventType aKeyType , MapController& iMiniMap);处理键盘事件,返回是否处理返回true为已经处理了这个事件,false没有处理这个事件virtual boolTouchEvent( const TouchEventType& aPointerEvent ,MapController& aMiniMap );处理 触摸屏事件,返回是否处理返回true为已经处理了这个事件,false没有处理这个事件virtual PointItem*GetPointItem(const char* aItemName,int aL)const;通过名字查找Item返回

47、NULL为没找到virtual PointItem*GetPointItem(const int& aIndex)const;通过索引查找Itemint aIndex : Item在数组中的位置返回NULL为没找到virtual boolDelPointItem (const int index);过索引索引删int index : Item在数组中的位置返回是否成virtual boolDelAllItem();删除所有的item返回是否成功voidClean();清空指针,但不释放资源高德软件21 / 29virtual intGetItemCount()const得到item总数virt

48、ual voidDraw (WinGC& canvas, MapController& mapView, bool shadow= false)const遍历并绘制所有ItemWinGC& canvas :GC画布MapController& mapView 地图模块bool shadow : 是否绘制阴影virtual voidDraw (WinGC& canvas, MapController& mapView, boolshadow, long when)const遍历并绘制所有ItemWinGC& canvas :GC画布MapController& mapView 地图模块bool

49、shadow : 是否绘制阴影long when:时间戳virtual voidDraw At(WinGC& canvas, int aItemIndex,int x, int y, boolshadow)constvirtual boolAddPointItem(PointItem* aItem);添加item到本Overlay.注意:本类继承Overlay,并实现Overlay的AddItem,但本层为PointizedOverlay,所以不能添加任意Item,只能添加PointItem,所以AddItem被实现但被定义为私有函数,当系统调用AddItem时会自动调用AddPointIte

50、m。外部只能使用AddPointItemvirtual boolOfferKeyEventOK( MapController& aMiniMap );用户按了ok键键的处理virtual voidTouchClickEvent( MapController& aMiniMap , PointItem*aItem);当用户在触摸屏上点击了某个点,则开始执行这个点所对应的动作,用户可以重写这个函数,添加自己的动作。virtual boolIsItemCenter( MapController& aMiniMap , PointItem*aPointItem ,int aWideAllowPoor,

51、int aHighAllowPoor) const;判断一个item是否是屏幕中心点并且判断依据为屏幕中心点是否在此item的图标区域内,如果没有图标则以item为中心,以给定的偏移量查找屏幕中心点是否在偏移量范围内。查找范围为以item为中心,查找X轴和Y轴左右各偏移量的一半PointItem* aPointItem: 给定的点itemint aWideAllowPoor : 宽的总偏移量int aHighAllowPoor : 高的总偏移量高德软件22 / 29返回真则屏幕中心点在item范围内virtual boolIsTwoPointCoincide( MapController& a

52、MiniMap , PointItem*aPointItem,TPoint Gcxy, int aWideAllowPoor,intaHighAllowPoor) const;给一个点item,和一个坐标,查找其坐标是否在点item范围内。PointItem* aPointItem: 给定的点itemTPoint Gcxy :指定的坐标int aWideAllowPoor : 宽的总偏移量int aHighAllowPoor : 高的总偏移量返回真则屏幕中心点在item范围内virtual voidDrawFocusItem( WinGC& aGc, MapController& aMap ,

53、intaIndexItem)const;画一个指定的item的标题int aIndexItem: 画本Overlay的aIndexItem的Item的标题本函数是接口函数,DrawFocusTitle ( WinGC& aGc,MapController& aMiniMap ,PointItem& aPointItem)const;函数是具体实现,本接口直接调用实现函数virtual voidDrawFocusTitle ( WinGC& aGc, MapController&aMiniMap ,PointItem& aPointItem)const;画一个指定的 aPointItem 的标题

54、virtual PointItem*GetFocus();返回当前Overlay中处于焦点的Item返回为NULL则当前没焦点virtual PointItem*NextFocus();返回下一个焦点,即当前焦点在数组中的位置的下一个焦点返回为NULL则当前没焦点virtual voidSetFocus(PointItem* item);修改一个指定的Item为当前焦点PointItem* item 指定的itemvirtual voidSetFocus(int aPointItemIndex);修改一个指定的Item为当前焦点int aPointItemIndex 为Item在数组中的位置v

55、irtual intGetFocus()const返回当前层的焦点的索引值,无焦点则返回-1virtual TGeoPointGetFocusCenter ()const;返回当前焦点坐标,无交点则返回的坐标XY轴都是-1高德软件23 / 29voidSetFocusTitleRect(MRect aFocusTitleRect)const;当前焦点已被点击,当绘制当前焦点Title时需记录当前title的区域。以便在下次点击时判断是否是点击一个新焦点还是触发这个焦点的事件。aFocusTitleRect: 当前焦点的Title区域TBoolGetIsActivation()const;当前i

56、tem是否被激活3.6OverlayItem 类类所有点线面的基类OverlayItem(char* aTitle, int aTitleL);构造函数char* aTitle 标题int aTitleL 标题长度OverlayItem();析构函数char*GetTitle(int& TitleL)const;得到标题int& TitleL 标题长度voidSetTitle(char* aTitle,int TitleL);修改标题3.7PointItem 点点PointItem 是继承于 OverlayItem 类PointItem(char* aTitle, int aTitleL,in

57、t aLongitudeE6,intaLatitudeE6);构造方法char* aTitle, 标题int aTitleL, 标题长度int aLongitudeE6, 经度int aLatitudeE6 纬度高德软件24 / 29PointItem(TGeoPoint aPoint,char* aTitle, int aTitleL);构造方法TGeoPoint aPoint, 经纬度坐标char* aTitle, 标题名字int aTitleL 标题长度PointItem(TGeoPoint aPoint,char* aTitle, int aTitleL , char*aSnippet

58、 , int aSnippetL , int aIcoID = 0);构造方法TGeoPoint aPoint, 经纬度坐标char* aTitle, 标题名字int aTitleL 标题长度char* aSnippet , 描述文字int aSnippetL , 描述文字长度int aIcoID图标的id,由用户自己定义char*GetSnippet(int& aSnippetL);获得描述文字int& aSnippetL 描述文字的长度voidSetSnippet(char* aSnippet,int aSnippetL);修改描述文字intGetIcoId()return icoId;得

59、到图片idvoidSetIcoId(int aId)icoId = aId;修改图片idTGeoPointGetGeoPoint()return iPoint;获得点的经纬度坐标voidSaveGeoPoint(TGeoPoint aPoint)iPoint = aPoint;修改点的经纬度坐标voidSetAnchor(EAnchorRectLocationTypeaAnchorLocation);修改锚点在图标中的位置, 即Item中心点在图标的那个区域。默认为图表中下位置为准。EAnchorRectLocationType aAnchorLocation锚点位置EAnchorRectLo

60、cationTypeGetAnchor()const;得到当前锚点位置3.8LineizedOverlay 类类线层类,继承于 Overlay高德软件25 / 29主要函数LineizedOverlay();LineizedOverlay(const char* aTitle, int aTitleL);构造方法char* aTitle : 标题int aTitleL :标题长度virtual voidDraw(WinGC& canvas, MapController& mapView, boolshadow = false)const;绘制itemvirtual boolDraw(WinGC

61、& canvas, MapController& mapView, boolshadow, long when)const;绘制itemvirtual voidDrawAt(WinGC& canvas, int aItemIndex,int x, int y,bool shadow)const;绘制itemvirtual boolKeyEvent(KeyEventType event, MapController&mapView);键盘事件virtual boolTouchEvent(const TouchEventType& e,MapController& mapView);触摸屏事件vi

62、rtual voidFocusEvent (MapController& aMiniMap , LineItem* aItem);当前焦点被点击,开始执行这个焦点的动作事件virtual LineItem*GetLineItem(const char* aItemName,int aL)const;通过名字查找item返回NULL为没有找到virtual LineItem*GetLineItem(const int& aIndex)const;根据索引得到item返回NULL为没有找到virtual intGetItemCount()const return iLineArrayCounter

63、;得到item总数virtual boolDelItem(const int aIndex);根据索引删除一个itemvirtual boolDelAllItem();删除所有itemvoidClean();清空指针,但不释放资源高德软件26 / 29virtual boolAddLineItem(LineItem* aItem);添加一个item注意:本类实现了Overlay类的AddItem虚函数,但本类为线Overlay,不能随便添加OverlayItem,所以AddItem为私有函数,添加Item只能用AddLineItemvirtual voidDrawLineItemTitle(

64、WinGC& aGc, MapController&aMiniMap ,LineItem* aLine , intaLineOnPointIndex)const;给一个LineItem,开始绘制这个item的提示框和文本LineItem* aLine: 指定绘制的itemint aLineOnPointIndex : 线段item是有很多的点组成,在点数组中的当前焦点virtual voidDrawFocusItem( WinGC& aGc, MapController& aMap ,intaIndexItem)const;画一个指定的item的标题int aIndexItem: 画本Over

65、lay的索引值为aIndexItem的Item的标题。本函数是接口函数,IsLinePointCoincide函数是具体实现,本接口直接调用实现函数virtual intIsLinePointCoincide( MapController& aMiniMap ,LineItem* aPointItem,TPoint aReferencePoint, intaWideAllowPoor,int aHighAllowPoor) const;给一个ListItem和点,判断这个ListItem中是否有点和指定的点重叠。比如触摸屏中,点击某个线段中的点,则判断点击的点是否和LineItem* aPoi

66、ntItem中某个点重叠。LineItem* aPointItem, 要判断的点TPoint aReferencePoint, 给的坐标int aWideAllowPoor, 宽容差int aHighAllowPoor 高容差返回当前线段中于TPoint aReferencePoint重合的点的索引。如果线段中没有点与TPoint aReferencePoint重合,则返回-1voidSetFocusTitleRect(MRect aFocusTitleRect)const;当前焦点已被点击,当绘制当前焦点Title时需记录当前title的区域。 以便在下次点击时判断是否是点击一个新焦点还是触

67、发这个焦点的事件。aFocusTitleRect: 当前焦点的Title区域高德软件27 / 29TBoolGetIsActivation()const;当前item是否被激活3.9LineItem 线线 Item线 Item 继承与 OverlayItem, 线段是多个点合成一条线段。线中有 2 个保存经度和纬度的数组。一条线段可以插入多个点,以索引来读去个点的经纬度。LineItem();LineItem(char* aTitle, int aTitleL);构造函数char* aTitle, 名字int aTitleL名字长度voidLineAddPoint(int aX , int a

68、Y);添加线里一个点的经纬度坐标int aX 经度int aY 纬度voidLineDelOnPoint( int aPointIndex );根据索引删除一个点intGetPointCounter()const;得到当前线段一共有几个点voidGetOnSurveyPoint( int aIndex , int& aGetX , int&aGetY)const;根据索引得到当前线段当前点的经纬坐标voidGetOnSurveyPoint(int aIndex, TGeoPoint&aGeoPoint)const;根据索引得到当前线段当前点的经纬坐标TGeoPoint& aGeoPoint 为

69、得到的坐标char*GetSnippet(int& aGetSnippetL);得到当前线段的描述文字voidSendSnippet(char* aSnippet , int aSnippetL);修改当前线段面文字voidSetPointFocus(int aPointIndex);修改线段中为当前焦点的点的索引。intGetPointFocus();得到当前为焦点的点的索引高德软件28 / 293.10 API 的图标管理的图标管理API 中的图标都由 ItemIco 来提供, 用户需要手动向 ItemIco 来添加默认的图标, 如果没有图标,API 中设计到图标的地方不会绘制,涉及到图标

70、运算的时候,会抛出异常。ItemIco 提供静态方法,用户可以直接使用,不需要维护。static intGetBitmapIconCounter();得到图标总数static Bitmap*GetBitmapIcon(int aBitmapIndex);根据索引得到Bitmap对象的指针static Bitmap*GetBitmapMaskIcon(int aBitmapIndex);根据索引得到Bitmap对象的遮罩对象的指针static boolDelBitmapIcon(int aBitmapIndex);删除一个Bitmap图片及其遮罩对象static boolAddBitmapIco

71、n(Bitmap& aBitmap , Bitmap&aBitmapMask);添加一个图片及其遮罩,外部用户可以不用维护Bitmap,当调用DelAllBitmapIcon()删除所有Bitmap时会将new的空间全部删除static boolDelAllBitmapIcon(); /删除所有图片static boolReplaceBitmapIcon(Bitmap& aBitmap, Bitmap&aBitmapMask,int aBitmapIndex);替换指定的图片事例:添加图片TFileName aFullName =aFullName.Append(_L(c:DataApiDem

72、oIcomapico.mbm);CFbsBitmap* b0 = NULL;CFbsBitmap* b1 = NULL;b0 = GetFileBitmap(aFullName,EMbmMapicoPoint00);b1 = GetFileBitmap(aFullName,EMbmMapicoPoint00mask);ItemIco:AddBitmapIcon(*b0,*b1);b0 = GetFileBitmap(aFullName,EMbmMapicoPoint01);b1 = GetFileBitmap(aFullName,EMbmMapicoPoint00mask);高德软件29 /

73、29ItemIco:AddBitmapIcon(*b0,*b1);得到图片Bitmap* bit = ItemIco:GetBitmapIcon(0);Bitmap* bitMask = ItemIco:GetBitmapMaskIcon(0);3.11 MapController 地图动作模块地图动作模块此模块是对地图进行移动,拖拽,放大缩小等造作的具体模块,但所有功能都已封装到MapView 模块,用户尽量利用 MapView 模块对地图进行操作。在自绘控件中,用户可能需要得到地图的一些相关坐标等, 可以利用此模块读取, 也可以利用 MapView 模块进行读取。但用户不能自己创建此模块。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号