热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于PDA、GPS等动态资源的几种GIS解决方案(转)

今年来GIS发展迅速,特别是实时监控中引入了GPS,PDA等动态资源,使得GIS在各个行业的应用更为广泛。1.在这些动态资源资源的监控中主

今年来GIS发展迅速,特别是实时监控中引入了GPS,PDA等动态资源,使得GIS在各个行业的应用更为广泛。

1.在这些动态资源资源的监控中主要要求的功能如下:
(1).动态标绘:动态标绘各种形状的资源
(2).轨迹模拟:动态显示轨迹
(3).轨迹回放:回放模拟历史轨迹状况
(4).移动资源:移动拖放资源放到任意位置
以上功能均是根据数据库实时更新读取和保存的

以下是本人对于PDA、GPS等动态资源的几种GIS解决方案的一些思考

2.基于BS的做法
比较简单
(1).使用控件画出来
(2).使用VML语言进行绘制

3.基于CS的做法
比较麻烦

(1).使用控件画出来
缺点:
拖放地图是必须隐藏控件,因联动占用内存较大,切效果很差;
当资源控件布满地图控件时无法用鼠标点击触发地图控件,因资源控件挡住了地图控件

(2).使用IElement
以下是可用的接口和根据接口可实现的功能
IGraphicsContainer 添加 IElement

组添加管理
IGroupElement

IGraphicsContainer.LocateElementsByEnvelope
获取Envelope内的Element

IGraphicsContainer.LocateElements
通过点及缓冲获取Element

IGraphicsContainer.UpdateElement
修改Element(包括位置)

IGraphicsContainer.DeleteElement
删除Element 可以组删除

IGraphicsContainerSelect
管理选择,不选或获取选择的接口

IElementProperties(IElement)
用以自定义Element属性信息的接口
可以存取用户自定义信息

IElement的可视控制
通过删除
或者移动到视图外边

IGroupElement3.ReplaceElement
用以修改位置

缺点:使用Element是效率很低的,或者说最低的方案,程序写不好还会由内存泄漏问题。尤其做监控系统,多个目标可能会长时间使用,因为监控系统往往很多天不关闭或重启。

本人做了Element的实现类,可以实现轨道的模拟,和数据库的动态交互

(3).AE中的GPS模块

ArcMap中的GPS模块。进到帮助里找到这么几个核心的接口:IGpsConnection负责与GPS的连接;IGpsDisplay负责地图上的实时显示;IGpsFeed用来测试连接状态。

    要在地图上实时显示GPS的运动轨迹,必然要先连接GPS。IGpsConnection中有BaudRate(波特率)、CoomPort(通讯端口)、Parity(奇偶)、DataBits(数据位)、StopBits这些属性可以在连接之前进行设置。

GPS Support(CoClass)

GPS 支持的Coclass和接口主要在Carto库,还有一些class和接口(例如GpsExtension)可以在ArcMapUI库找到。

主要的coclass是RealTimeFeedManager,通过这个对象,你可以访问和控制realtime feed从GPS装置,或者模拟feed 从feature class.

利用GpsFeed与GpsConnection结合可以连接GPS设备。

如果你想回放数据,可以利用RealTimeFeedSimulator。

RealTimeFeedManager的IGpsDisplayProperties,你可以定制显示位置。也可以利用IRealTimeDestination控制目标属性,通过IPositionTrails控制位置特征。也可以通过IRealTImeLog接口在Feature class存贮位置。

(4).动态图层
该种方法比较麻烦,但是效果和内存节约情况很好。主要是实现自己的IDynamicLayer类

以下是可用的接口:
IDynamicDisplay接口进行绘画 InterfaceProvides access to Dynamic Display.
DrawLine Draws a line between the specified points on the dynamic display.
DrawMarker Draws a marker at the specified point on the dynamic display.
DrawMultipleLines Draws specified lines on the dynamic display.
DrawMultipleMarkers Draws a marker at the specified points on the dynamic display.
DrawPolygon Draws specified polygon with fill and line on the dynamic display.
DrawPolyline Draws specified polyline on the dynamic display.
DrawRectangle Draws specified rectangle with fill and line on the dynamic display.
DrawText Draws text at the specified point on the dynamic display.
DynamicGlyphFactory Retrieves the dynamic glyph factory.

在动态图层中,需要自己写一个继承自Control, ILayer, IDynamicLayer, IGeoDataset, IPersistVariant, ILayerGeneralProperties, ILayerExtensions, IEnumerable, IDisposable的类`并实现IDynamicLayer.DrawDynamicLayer方法,将对象的重绘方法写在些方法内,绘制对象可采用ESRI.ArcGIS.Display.IDynamicDisplay.DrawMarker()或者DrawPolygon()等方法,也可以直接采用csgl(OPENGL For C#)的方法进行绘制.

        如以下OPENGL方法

        GL.glPushMatrix();
        GL.glLoadIdentity();

        //draw the compass list
        GL.glPushMatrix();
        GL.glTranslatef((float)m_deviceFrame.left + 70.0f, (float)m_deviceFrame.top + 70.0f, 0.0f);
        GL.glScalef(90.0f, 90.0f, 0.0f);
        GL.glRotatef((float)Display.DisplayTransformation.Rotation, 0.0f, 0.0f, 1.0f);
        GL.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
        GL.glCallList(m_compassList);
        GL.glPopMatrix();


经过测试采用DynamicLayer的方法在地图上绘制上千个移动点对象在亚秒级时间间隔下也是非常的流畅.测试机器为(Pentium M 1.6G,1.5G RAM,FX5200  32bit 64M RAM  ).

动态图层可以很好的利用在交通、航空等移动对象跟踪的领域.


(5).使用动态生成图层并更新起Featureclass

这种方式就是读取属性表并生成点图层,然后刷新图层,这样在对GPS的操作上更为方便,就是对图层的操作。但是这种有一

点确定,对于大数据量的时候,速度方面是个限制。我已对这种做法进行测试。

(6).使用IMapcontrol.DrawShape方法

这种方式,速度上有一定的优越性,但是对于GPS点的选取和调度有点麻烦,且速度不可取。
现自己对GPS点选择的一种思路:当鼠标点击下时,对鼠标点击点进行缓冲生成面元素,然后使用

IRelationalOperator.Within接口逐个判断哪个GPS点在该范围内。

以上方案只是本人对GPS,PDA实现思路的一直初步研究,希望博友提出更好的意见。

 

转自:http://gis-conquer.blog.sohu.com/105685261.html

转:https://www.cnblogs.com/willwayer/archive/2010/10/16/1852965.html



推荐阅读
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • 地球坐标、火星坐标及百度坐标间的转换算法 C# 实现
    本文介绍了WGS84坐标系统及其精度改进历程,探讨了火星坐标系统的安全性和应用背景,并详细解析了火星坐标与百度坐标之间的转换算法,提供了C#语言的实现代码。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 智慧城市建设现状及未来趋势
    随着新基建政策的推进及‘十四五’规划的实施,我国正步入以5G、人工智能等先进技术引领的智慧经济新时代。规划强调加速数字化转型,促进数字政府建设,新基建政策亦倡导城市基础设施的全面数字化。本文探讨了智慧城市的发展背景、全球及国内进展、市场规模、架构设计,以及百度、阿里、腾讯、华为等领军企业在该领域的布局策略。 ... [详细]
author-avatar
透支的灬漂移_255
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有