业务数据关联地图定位功能分析
by zhouyilong 20150408
设计思路
目前需要实现的功能是知道某一条业务数据,通过这条数据在地图上定位到具体的位置。这里想到,在R_GIS_MIS表中,通过业务编码可以查找到地图编码。得到地图编码之后,就可以遍历图层来得到需要的地图信息。为了使遍历图层更加有效率,固增加相关的配置文件,配置出需要遍历的图层。
定位相关的文件
- SVC.Dependencylib.BusinessCtrl.LocateBC:定位主要的业务操作层
- SVC.Dependencylib.Config.LocateXML.xml:表对应图层URL列的配置文件
- SVC.Dependencylib.Model.LocateField:用来解析定位配置文件的对象
- USPart.DependencyLib.BusinessObj.Locate:主要实现定位功能
Locate文件详细分析
Locate中所有的字段
- locateLayer:定位专用的图层,生命周期和Locate对象一致
- dependencylibwebservice:公共wcf的操作工具,用于获得定位相关的配置文件
- locateTopics:保存获得的定位相关的配置文件信息
Locate中的所有方法
- Locate():构造函数,定位图层加入地图中,并得定位相关的配置文件
- StartLocate(codeGis,topicName):传入地图编码和配置文件主题标记名,调用QueryMapExtent(codeGis,locateUrls),开始定位
- StopLocate():结束定位,移出定位图层
- QueryMapExtent(codeGis,locateUrls):遍历图层
- queryTask_Failed(sender,e):未找到相关地图信息后执行
- queryTask_ExecuteCompleted(sender,e):查找成功后执行,定位到地图中
Locate的使用规范
注意这里注意说到的是在公共窗体中使用Locate对象
- 在需要使用定位功能的控件初始化的时候初始化一个Locate对象,请不要在实现定位的代码中每次都重新New一个Locate对象,保持只有一个Locate实例存在。
定位方法中使用代码示例如下:
//定位 public void locateOperation(CommonToolArgs commonToolArgs) { D0_LAND currentParcel = parcellist.ElementAt(dgList.SelectedIndex); dependencylibwebservice.Client.GetCodeGisByCodeMisAsync(currentParcel != null ? currentParcel.D0_CODE : string.Empty); }
- 在外层window窗体关闭的时候调用StopLocate()结束定位(这里并没有在控件的unload事件中结束定位,主要原因是unload事件并不是一定会执行),注意需要显示结束定位。