移动定位是原理是什么?

移动定位是原理是什么?,第1张

目前基于GSM网获取用户位置信息(亦称LBS)的技术主要有以下3种:
1. COO(Cell of Origin)
COO定位技术即基于Cell-ID的定位技术,是美国E911无线定位呼叫的第一阶段采用的技术,也是定业务平台首先采用的定位方式。这种技术不需要更改手机或者网络,因此能够在现存的手机的基础上构造位置查找系统。它通过采集移动台所处的小区识别号(Cell-ID号)来确定用户的位置。只要系统能够采集到移动台所在小区基站在地图上的地理位置,以及小区的覆盖半径,则当移动台在所处小区注册后,系统就会知道移动台处于哪一小区,当然小区的定位精度取决于其半径。在城市商业区,COO定位完全能够满足要求。
COO技术具体实现又分为两种:
(1)基于网络的实现方法:服务器从网元(如MSC/VLR和SGSN)获得Cell-ID,再由服务器把Cell-ID翻译成可以直接应用的经纬度数据。这种方法的好处是手机不需任何改变,只需对现网稍做改动(仅升级交换机软件)就可支持定位服务。
(2)基于手机的实现方法:手机把它的Cell-ID通过WAP或SMS发给服务器;服务器把Cell-ID翻译成可以直接应用的经纬度数据。这种方法的好处是不需对现网做任何改动,只需手机增加相应功能(如使用STK卡)就可支持定位功能。
2 E-OTD 增强观测时差技术
E-OTD定位技术是从测量时间差(OTD)发展而来的,OTD指测量时间差,E-OTD指测量的方式。具体实现方式如下:
·手机需要测量至少三个基站的到达测量时间量(OTD值);
·然后手机把上述OTD测量值上传到SMLC(SERVING MOBILE LOCATION CENTER),SMLC一般放置在BSC内完成位置计算;
·同时放置在BTS侧的LMU(LOCATION MEASUREMENT UNIT)测量基站的参考时间量(RTD)并上传到SMLC;
·SMLC根据得到的测量时间差(OTD)和参考时间差(RTD)算出几何时间量(GTD),GTD=OTD-RTD,由GTD可以计算出手机的位置(通过测量三个 BTS到手机的信号传输时间,则可分别确定 三个BTS与手机之间的几何距离,然后再根据此距离进行计算,最终确定手机的位置)完成定位服务。
上述第三步之所以要考虑测量参考时间量,是因为GSM网基站并不严格同步,因此需增加测量基站参考时间量这一环节。
3 AGPS
直接采用GPS接收机定位实现简单但面临一个问题,由于在市区内或建筑物内一般很难收到卫星发回的GPS信号,无法实现定位,因此引入了A-GPS定位方法。
它的基本思想是通过在卫星信号接收效果较好的位置上设置若干参考GPS接收机,并利用GSM网把接收到的辅助GPS信号发给手机;同时配有GPS计算晶片的手机根据GSM网传来的GPS数据计算手机位置,这种方法将GPS与GSM网结合,实现一种精度高、定位快的方式--辅助GPS定位。
综合考虑投入成本、对现网的改变、对手机的要求等因素,目前世界上基于GSM网实现无线定位的技术方案主要采用基于Cell-ID的定位技术,因为这种技术实现简单灵活,虽然存在精度不太高的缺点,但考虑到大多数服务定位精度要求并不需要太高的背景下,已经可以利用这种技术来实现许多位置服务。
目前基于CDMA网络的定位技术主要有以下几种:
1 Cell-ID
根据CDMA蜂窝小区概念,由网络侧获取用户当前所在的Cell信息,然后根据用户上报的自身所处小区号等参数,获取用户当前位置。一般采用的方法是将用户所处小区的中心点位置估算为用户当前位置。此法与GSM网的同类方法类似。
2 AGPS
获取GPS卫星信号作为定位算法计算参数,确定用户位置的定位技术。用户将GPS卫星作为地理位置已知点,把获得的GPS伪距作为已知点到达未知点的距离来计算自身地理位置。此法同样在GSM网中也有应用,特点相同,在此不再复述。
3 AFLT
本法是采用用户接收到的CDMA基站信号来作为参数计算用户位置的定位技术。CDMA网络中,用户的导频集中有多个基站导频信号,只要用户可以接收到3个或者3个以上的基站信号,就可以把这些基站作为地理位置已知点,把由基站信号到达时间计算出来的信号传播距离作为已知点到未知点的距离,根据三边定位算法确定用户位置。此法原理上与GSM网的E-OTD技术类似,但25代CDMA网络特别是3G网络是同步的,所以本法比GSM网的类似方法更快捷、准确。
就移动网络定位技术的发展前景而言,混合定位技术应该是最佳的,适于专业应用,此法是卫星定位(GPS或其它)和AFLT等技术的结合,经互相补充正好弥补彼此的不足,是快速、精确定位的最佳方法。当然,对移动通讯用户而言,这也是最昂贵的方法,目前已有这样的高端手机产品上市。

移动数据库系统结构特点和移动数据库系统同步复制机制, 在此基础上重点研究SQLServer合并复制同步方式和基于XML的数据同步方式, 对两种同步方式优缺点进行了深入分析,同时对传输通信技术进行深入探讨。 最后针对于湖北省水路规费移动征稽系统实际的需求,结合两种同步方式的优 点,提出了根据具体网络情况可选择不同数据同步方案的策略,并给出该方案 的具体实现过程,达到数据的一致性目标,使数据同步过程更加灵活可靠。
(转载)
独创性声明 作者声明,所呈交的论文是本人在导师指导下进行的研究工作及 取得的研究成果。尽我所知,除了文中特另tIDN以标注和致谢的地方外, 论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得 武汉理工大学和其它教育机构的学位和证书而使用过的材料。与我一 同工作的同志对本研究所作的任何贡献均己在论文中作了明确的说 明并表示了感谢。 签名:.起量鱼 日期: 互:查i 关于论文使用授权的说明 本人完全了解武汉理工大学有关保留、使用学位论文的规定,即 学校有权保留交向国家有关部门或机构送交论文的复印件和电子版, 允许论文被查阅和借阅。本人授权武汉理工大学可以将本学位论文的 全部内容编入有关数据库进行检索,可以采用影印、缩印或其他复制 手段保存或汇编本学位论文。同时授权经武汉理工大学认可的国家有 关机构或论文数据库使用或收录本学位论文,并向社会公众提供信息 服务。 (保密的论文在解密后应遵守此规定) 研究生(签名):杠如 导师(签 日期 武汉理工大学硕士学位论文 1.1课题的背景及意义 第1章引言 随着移动通信与计算技术的结合发展,移动终端拥有了更多的计算能力, 人们使用移动终端来处理和存储各种数据一名片、日程安排、邮件乃至文档、 目录等各种结构化/非结构化的数据,同时这些数据又经常需要在不同用户之间 进行交换以完成复杂的交互与合作。为了保证这种协作任务的正确完成,必须 有一种手段确保不同设备上的数据集内容的及时性与一致性,我们把这种手段 定义为数据同步,数据同步已经成为移动计算的一种基础应用模式,目前一些 国际著名的数据库厂商也纷纷推出了自己的移动数据库系统。 由于受到诸如网络条件、无线通讯费用、移动设备本身资源等多方面因素 的限制,移动设备通常不能和网络保持实时通信,因此大部分时间移动设备和 网络断开连接。这种情况下,为了要满足移动用户在断开状态下对数据的存取 需求,目前最常用的解决方案是采用数据同步技术,即把用户所需数据先下载 在移动设备上,这些数据成为主数据库中的数据在移动设备上的数据副本。当 移动设备和网络断开连接时,对数据的存取 *** 作在本地数据副本上进行。这必 然要求系统提供一种同步机制,使得移动设备和网络连通时,能够将移动设备 上数据更新反映到主数据库中,并且将主数据库中的最新数据下载到移动设备 上,以使移动设备的本地数据副本和主数据库取得一致。由于多个移动用户异 步地在各自的数据副本上进行数据存取,在进行数据同步时,很容易产生冲突 问题,如何有效地检测和解决冲突问题,也是一个完整的同步机制必须要考虑 的重要方面。 数据同步不仅可以使个人用户通过很简单的 *** 作自动保持各种终端同类型 数据的一致,而且帮助企业用户迅速提升信息其竞争力。随着市场竞争的日益 激烈,企业需要快速高效地对客户的需求做出反应,并提供高质量的服务,而 随时随地从企业信息中心获取和更新各种客户信息以便快速反应就成了致胜的 关键。数据同步产品可以让企业雇员无论何时何地都能够通过各种终端设备获 武汉理工大学硕士学位论文 取和更新各种客户信息,制定销售和服务决策,并快速实施。 在本文的讨论中,选择移动事务分两次在移动设备和主数据库服务器上执 行的方法。数据同步包括数据传输、同步冲突检测和解决这三个方面。 1.2课题来源和研究内容 本课题来源于交通部湖北港航局信息系统二期工程《湖北水路规费征稽管 理系统》软件开发项目中的移动征稽子系统。 该系统是按照交通部有关规费管理的规范开发,适用于以省级港航管理局 (规费中心)为龙头,覆盖各市州港航局(所、处)规费中心和各县市港航处 (所),各基层费收站点的四级网络规费征稽系统,兼容了光纤专线、电信专线、 ADSL和MODEM拨号等多种网络通信方式。规费征稽的网络传输系统具备数 据实时性功能,确保数据的一致性与准确性。该子系统完成的主要功能为:利 用移动设备PDA和微型打印机实现移动征稽以及规费数据业务信息管理。 本系统涵盖湖北境内长江所有流域,目前移动通信网络在长江沿线存在着 部分盲点不能保障网络通信的实时性,而本系统业务对时间的要求较高,尤其 是现场开票业务,要求现场能查询到船舶的基本信息并根据相关信息开票收费。 为了进一步提升稽查的强度和力度,同时降低网络使用费用成本,采用在移动 设备中存储数据库副本的方式,分别在移动设备和远程数据库服务器上处理各 自数据,这样就引出了移动数据库和远程数据库的数据同步问题。 本文的主要内容是对现有同步机制进行研究,在深入研究基于XML数据同 步方式和合并复制两种数据同步机制的基础上提出了一种移动数据库数据同步 实现模式,并编程实现移动设备上的数据与数据库服务器数据的同步,最终达 到数据统一。具体研究内容如下: 1)深入研究移动计算的特点,移动数据库的结构特点及其应用现状。 2)深入研究数据同步技术的原理,在流行的基于XML复制和合并复制数 据同步技术的基础上提出了一种移动数据库同步实现模式。 3)设计并实现移动数据库的数据同步技术,将其应用于实际项目中。 4)结合实际应用中出现的问题分析原因,改进同步技术。 2 武汉理工大学硕士学位论文 1.3研究现状 1.3.1移动数据库研究现状 移动计算技术l的发展导致了普遍化计算概念的出现。普遍化计算即无所不 在的计算,它要求人们摆脱以往相对单一的计算平台所造成的局限,而提供个 性化的服务,即系统可以根据用户的爱好、需求进行自由的裁剪和定制,这些 需求的出现使得移动数据库技术成为移动计算技术的基础和核心。鉴于以上考 虑,移动数据库已经成为一个十分活跃的研究领域,并引起了越来越广泛的关 注。以下仅仅列出近年在移动数据库及其相关领域具有代表性的研究成果: 1)Purdue大学对移动事务处理、移动数据库同步等技术进行了大量的研究, 并提出了许多有效的算法,如移动数据库加锁机制,移动事务管理机制等; 2)CarnegieMellon大学(CMU)对移动技术平台进行了大量的研究,并对 系统的自适应性(Adaptation)进行了分析。代表性的成果包括Odyssey系统和 Coda系统。Odyssey系统是一个 *** 作平台,它集中了 *** 作系统和网络通讯的核 心功能,是CMU研究自适应性的基础设施;Coda系统是一个文件系统,它是 ~个应用支撑软件,CMU的许多工作,如复制技术,各种应用规模的分析比较 等均是基于Coda系统完成的; 3)Rutgers大学对移动数据库技术进行了较为全面的研究,如移动技术体系 结构、移动复制算法、移动事务处理、移动通讯及数据管理等,他们获得了许 多有价值的成果,在移动计算领域处于领先地位; 4)Monash大学(澳大利亚),Pittsburgh大学、Washington大学、Bilkent 大学(土耳其)、SouthMethodist大学、Okiahoma大学等对移动事务处理、位置 相关数据的处理等进行了研究; 5)澳大利亚国立大学、Stanford大学、Bilkent大学、Southwestern Louisiana 大学、香港理工大学、香港城市大学、新加坡国立大学等对数据广播技术、移 动信息发表技术及数据广播环境下的查询技术进行了研究; 在国内,中国人民大学、哈尔滨工业大学、国防科技大学、华中科技大学 等对移动数据库进行了研究。在系统开发方面,各大数据库厂商均对嵌入式移 动数据库的研制给予了相当的关注,把开发相应主打数据库系统的嵌入式移动 数据库系统作为一个重要的发展方向。Sybase、Oracle、IBM分别推出了各自的 3 武汉理丁大学硕士学位论文 嵌入式数据库系统Sybase Ultralite、OracleLite、DB2 Everywhere。1 999年7月 中国人民大学研究和开发了“小金灵”基于掌上电脑的嵌入式移动数据库系统, 开始了对嵌入式移动数据库系统的研究。 1.3.2数据同步研究现状 市面上主要存在下面几种数据同步技术2J: 1)PalmHotSyncProtocol:Palm运行系统通常运用在个人掌上电脑和个人 领航器上,这些装置通过掌上 *** 作系统的界面,运用其提出的协议如HotSync来 同步(HotSync仅提供两种模式的 *** 作:慢同步和快同步)。 2)IntellisyncProtocol:Intellisync公司为了减少联系的时间,积极寻求快同 步而提出同步协议。全部技术都是建立在远程服务器架构上,远程服务器上存 储每个嵌入式设备的修改和状态标志,只用发送最新发生变化的同步,即快速 同步方式。微软公司的Outlook和Exchange采用了这个同步系统,将其运用在 包括台式和移动设备中的个人掌上电脑、微型PC机中。某些symbian设备中也 使用了这个协议。这个协议的主要缺点在于它的集中架构,如它在两个设备中 要通过服务器来同步,不能自己相互同步。 3)ActiveSync:ActiveSync是运用在微软公司Windows平台的微型PC机 上的同步协议。它有一套配套软件建立在微软 *** 作系统平台上。使用该软件可 以同步Web收藏夹、Outlook等,并且可以自动感测同步数据中内容的改变。 目前,主流的商业数据库管理系统DBMS(DatabaseManagementSystem) 如Oracle、Sybase、DB2、SQL Server等在移动计算环境下,针对分布式系统的 实际需求提出了各自的移动数据同步方案。实现的技术手段有同步技术、复制 技术和刷新技术。所适用的网络类型有高速局域网、广域网、较低速率的拨号 上网、无线、间接连接。采用的系统拓扑结构有对等(Peer-To—Peer)和级联/树 状(Hierarchical);对应的产品种类繁多,在这里选用主流DBMS的产品来加以 分析。 1.3.3移动数据库复制研究现状 随着数据仓库技术的发展、联机分析处理(OLAP)、决策支持系统(DSS)、 电子商务等需求的推动下,海量数据存储、数据实时更新、数据一致性维护愈显 4 武汉理工大学硕士学位论文 重要。目前主要的数据库管理系统如Oracle,MSSQLServer,Sybase,DB2,My SQL等都在原有的数据复制功能上,添加更多的组件,提供了许多数据复制工具, 针对不同的应用提出并研究了各种数据复制方法,增加了更强大的技术支持。 (1)Oracle复制系统 Oracle复制系统主要支持多主复制(MultimasterReplication)、实体化视图 复制(Materializedview Replication)、多主和实体化视图混和复制(Multimaster andmaterializedview hybridReplication)以及程序复制这四种类型的复制。 多主复制是一种对等复制,每个主站点都有相同的权限,每个站点都可以 修改复制数据库的数据,并传播到其它站点。 实体化视图又称为快照复制,就是在某个时间点上从目标数据库中获得数 据库副本,刷新组定时按照增量方式刷新实体化视图。实体化视图包括只读实 体化视图、可更新实体化视图、可写实体化视图。实体化视图本身又可以作为 其它的站点实体化视图的目标数据库,而且还可以一级一级进行下去,成为多 层实体化视图。 多主和实体化视图混和模式,顾名思义,就是在数据复制环境中进行多主 复制与实体化视图混和配置的复制。一个复制站点可以既是多主复制站点,又 是实体化视图站点。 程序复制指对于大量数据行更新的复制,不是将变化的数据直接进行复制, 而是产生与源站点相同的包含事务 *** 作的包,在其它站点执行。 (2)MS SQLServer复制技术 MS SQLServer支持快照复制、事务复制以及合并复制。 快照复制是一种较简单的复制方法,它将出版方的出版物通过快照代理拷 贝到分发者的分送工作,再通过分发代理拷贝到订阅者。 事务复制要通过日志代理完成。系统通过日志阅读器代理将出版服务器上 的事务传送到分发服务器的分送数据库,再通过分发代理将分发数据库的数据 传送到订阅服务器上。 合并复制中允许发布者和订阅者修改复制的数据,它能自动监视数据库内 容的变化,并定期进行结果合并,然后将合并后的结果发布给所以订阅者。 (3)Sybase数据复制技术 Sybase数据复制技术采用一种基本的“发布一预定”模式来实现跨网络的 数据复制。复制模式有基本主复制模式、分布式主段、Corporaterollup模式、 Redistributed CorporateRollup模式。 5 武汉理工大学硕士学位论文 基本主复制模式中,指定主数据库中的源表为主表,该表的其他副本为复 制表,对主表可进行读/写 *** 作,对复制表只能执行读 *** 作。因此复制过程比较 简单,只需从一个主数据库将更新分发到一个和多个副本数据库就可以确保数 据的一致性。 分布式主段复制模式中,每个站点上的复制服务器把对本地数据的修改分 发到其他站点,并把其他站点接收到的修改应用到本地复制的数据。 Corporaterollup模式有多个分布式主段和一个集合式合并复制表。每个主站 点上的表只包含对该站点而言是主数据的数据,没有任何数据复制到这些站点, 最后这些站点的数据变化合并到Corporaterollup表。 Redistributed CorporateRollup模式与CorporateRollup模式相似,不同的是 在每个分布式主段上有一个复制代理将合并表当成主数据来进行处理,并且将 这些数据转发给复制服务器,分发给预定方。 (4)DB2的复制技术 DB2的主要复制方式是PeerToPeer的方法。PeerToPeer复制给每个站点 都赋予了同等的权限,通过复制代理服务器进行数据复制,通过触发器获取变 化的数据并进行传播。 (5)MySQL数据复制技术 MySQL数据库提供数据复制的主要方法是通过在中心数据库服务器上跟 踪二进制同志,将变化的部分发送到副本数据库服务器,然后在副本数据库服 务器中读耿日志,在副本上执行相应的 *** 作。 1.4本文的结构安排 本文主要研究移动数据库的数据同步技术,全文共分七章,其主要内容如下: 第1章绪论,概述课题的研究背景及意义,分析国内外相关方向的研究 情况,给出论文的组织结构。 第2章介绍移动计算环境下的移动数据库系统结构特征,以及移动数据 关键技术及应用,深入分析移动数据库数据同步复制系统特征,从数据捕获、 分发、冲突的检测与处理等方面详细介绍了移动数据库同步复制过程中涉及的 关键技术。 第3章 以湖北水路规费征稽管理移动子系统为背景提出移动数据库同步 6 武汉理下大学硕十学位论文 方案,并对该方案的运用同步技术进行介绍。根据提出的方案,从同步各个功 能模块出发,详细介绍了系统各功能模块的设计思想及可行性。 第4章给出系统详细设计,详细介绍各功能模块的类库设计及相关实现。 第5章对实际应用中遇到的问题进行总结,并提出同步模型改进方向。 7 武汉理工大学硕十学位论文 第2章移动数据库复制和同步机制 随着网络技术的迅速发展和不断渗透,在任何时候、任何地点能接入信息 网获得所需的信息成为人类的普遍需求,移动数据库复制和同步机技术将使得 这种需求得以实现。本章介绍移动计算及其特点、移动数据库的特点、移动数 据应用。数据库同步复制按照过程划分,可以分为变化捕获、分发、冲突检测 与解决三个阶段。本章将对当前常见的复制模型中所使用的同步复制技术进行 详细介绍。 2.1移动计算概述 移动计算的英文是“MobileComputing”。狭义的定义为:使用便携终端在 流动中进行信息处理。便携终端通常指体积小、重量轻、集成度高的便携机, 如笔记本电脑、掌上型的个人数字助理(PDA)、个人通信器(Personal Communicator)。移动计算的作用在于,将有用、准确、及时的信息与中央信息 系统相互作用,分担中央信息系统的计算压力,使有用、准确、及时的信息能 提供给在任何时间、任何地点需要它的任何用户l71。 在传统的分布计算系统中,各个结点之间都是假定通过固定网络连接,并 保持网络的持续连接性,而移动计算系统改变了这种假设条件。移动计算系统 是由固定结点和移动结点构成的分布计算系统,它将使用户不再需要停留在固 定位置不变,而是可以携带着移动计算机自由移动,并在移动的同时通过移动 通信网络保持与固定将固定结点或其他移动结点的连接。 一个典型的移动计算系统由移动客户机、无线单元、移动支持结点、固定 结点和固定网络连接组成。其中高速固定网络构成连接固定结点的主干;固定 结点包含通常的文件服务器和数据库服务器;移动支持结点则是带有支持无线 通信的接口,负责建立一个无线网络单元;无线网络单元内的移动计算机通过 无线网络和移动支持结点连接,进而通过移动支持结点和固定网络和固定结点 以及其他移动计算机连接,从而实现自由的移动性。 8 武汉理rT大学硕+学位论文 由于移动计算环境的上述特点,使得传统的分布式数据库技术不能支持或 是不能有效支持移动计算环境。因此,研究移动计算技术、移动数据库技术成 为目前分布式数据库研究的一个新的方向。 2.2移动数据库 与固定网络的传统分布计算环境相比,移动计算环境具有特点使得传统的 分布式数据库技术不能支持或是不能有效地支持移动计算环境。因此必须对已 有的传统的分布式数据库加以改进,或者重新设计,形成一种能全面支持移动 计算环境的崭新数据库技术——移动数据库Ljl(Mobiledatabase)。 移动数据库是指在移动环境中的分布式数据库,其数据在地理上(或物理 上)分布而在逻辑上集中的,是一种动态的分布式数据库。它包含两层含义: ①人在移动时可以存取后台数据或其副本;②人可以带着后台数据库的副本移 动。由于移动数据库系统通常应用在诸如掌上电脑、PDA。车载设备、移动电 话等嵌入式设备中,因此又被称为嵌入式移动数据库系统。 2.2.1移动数据库系统结构及特点 通常认为,带有移动连接性的分布式系统,有完整的数据库系统功能,能 支持完全的空间移动性,支持无线和有线的网络连接的系统可以称之为一个移 动数据库系统14〕。移动数据库系统和传统的分布式数据库管理系统有很多相似的 方面。一般把移动数据库系统看作是分布式数据库管理系统的继承和发展5,是 对分布式数据库的延伸和推广。 根据参考文献〔6,一个典型的移动数据库系统结构如图2.1所示。网络分 为两个部分,分别为固定网络部分和无线网络部分。固定网络具有较高的传输 速率和较好的可靠性,又称为可信部分17。 可信部分包括了数据库服务器DBSVR(DatabaseServer)、位置服务器LS (Location Server)和同步服务器Sync Server。DBSVR可以是大型数据库系统, 如Oracle、Sybase、DB2、SQLServer,一般为固定结点。每个DBSVR上维护 本地数掘库的一个完整的副本,服务器之间由可靠的高速互联网连接在一起, 构成一个传统意义上的分布数据库系统。DBSVR同时可以处理客户的联机请求, 并可以保持所有请求的历史记录。无线网络部分主要包括移动支持结点MSS (Mobile SupportStation)、移动客户机MC(MobileClient)、本地数据库副本 9 武汉理T大学硕士学位论文 Rcp(Replication)s和嵌入式移动数据库EMDB(EmbeddedManagement Database)。 MSS位于高速网络中,并具有无线联网能力,它们用于支持一个无线网络 单元(Cell),该单元内的移动客户机既可以通过无线链路与一个MSS通信,从 而与整个固定网络连通,也可以接收由MSS发送的广播信息。服务器与MSS 可以是同一物理设备。 MC处理能力与存储能力相对于DBSVR来说非常有限,且具有移动性(即 可以出现在任意一个无线单元中),经常与服务器断开(指MC无法与服务器联 机通信)。而且由于MC所处的网络环境(即当时可用的无线单元)多变,MC 图2.1 典型的移动数据库系统结构 10 武汉理T大学硕士学位论文 移动数据库与固定网络的传统分布式数据库相比,它具备有以下的主要特 点: �9�9 移动性及位置相关性 移动数据库可以在无线通讯单元内及单元间自由移动,而且在移动的同时 仍然可能保存通讯连接。此外,应用程序及数据查询可能是位置相关的¨1,这 一要求MDB支持移动性,解决区切换问题,并实现位置相关的处理。 �9�9 频繁的断接性 MDB与固定网络之间经常处于主动或被动的断接状态,这要求MDB中的 事务在断接情况下仍能继续运行,或者自动进入休眠状态,而不会因网络断接 而撤销。 ●网络条件的多样性 在整个移动计算空间中,不同的时间和地点连网条件相差十分悬殊。因此, MDB应该提供充分的灵活性和适应性,提供多种系统运行方式和资源优化方式, 以适应网络条件的变化。 ◆系统规模庞大 在移动计算环境下,用户规模比常规网络环境庞大得多,采用普通的处理 方法将导致MDB的效率极为低下。系统的安全性及可靠性较差。由于移动计算 平台可以远程访问系统资源,从而带来新的不安全因素。此外,移动主机遗失、 失窃等现象也容易发生。因此,MDB应该提供比普通数据库系统更强的安全机 制。 ●资源的有限性 移动设备的电源通常只能维持几个小时。此外,移动设备还受通讯带宽、 存储容量、处理能力的限制。MDB必须考虑这些限制,在查询优化、事务处理、 存储管理等环节提供资源的利用效率。

可以使用二进制读写Excel的开源组件orgin2bitsMyXlsdll导出真正的Excel文件。
以下是我简单封装的一个ExcelHelper
using System;
using SystemData;
using SystemConfiguration;
using SystemWeb;
using SystemWebSecurity;
using SystemWebUI;
using SystemWebUIHtmlControls;
using SystemWebUIWebControls;
using SystemWebUIWebControlsWebParts;
using SystemCollectionsGeneric;
using orgin2bitsMyXls;
using orgin2bitsMyXlsByteUtil;
/// <summary>
///ExcelHelper 的摘要说明
/// </summary>
public class ExcelHelper
{
protected ExcelHelper()
{
}
public class TableStruct
{
private string _TableName;
private string _TableCaption;
private List<ColumnStruct> _ColumnInfoAry;
public string TableName
{
get
{
if (stringIsNullOrEmpty(_TableName))
{
return stringEmpty;
}
return _TableName;
}
set
{
_TableName = value;
}
}
public string TableCaption
{
get
{
if (stringIsNullOrEmpty(_TableCaption))
{
return TableName;
}
return _TableCaption;
}
set
{
_TableCaption = value;
}
}
public List<ColumnStruct> ColumnInfoAry
{
get
{
if (_ColumnInfoAry == null)
{
_ColumnInfoAry = new List<ColumnStruct>();
}
return _ColumnInfoAry;
}
}
public void AddColumnInfo(ColumnStruct ColumnInfo)
{
if (ColumnInfo == null)
{
return;
}
if (_ColumnInfoAry == null)
{
_ColumnInfoAry = new List<ColumnStruct>();
}
foreach (ColumnStruct col in _ColumnInfoAry)
{
if (colColumnNameEquals(ColumnInfoColumnName, StringComparisonOrdinalIgnoreCase))
{
return;
}
}
_ColumnInfoAryAdd(ColumnInfo);
}
public ColumnStruct GetColumnInfo(string ColumnName)
{
if (stringIsNullOrEmpty(ColumnName) )
{
return null;
}
if (_ColumnInfoAry == null)
{
return null;
}
ColumnStruct ColumnInfo = null;
foreach (ColumnStruct col in _ColumnInfoAry)
{
if (colColumnNameEquals(ColumnName, StringComparisonOrdinalIgnoreCase))
{
ColumnInfo = col;
}
}
return ColumnInfo;
}
}
public class ColumnStruct
{
private string _ColumnName;
private string _ColumnCaption;
private string _ColumnTextFormat;
public string ColumnName
{
get
{
if (stringIsNullOrEmpty(_ColumnName))
{
return stringEmpty;
}
return _ColumnName;
}
set
{
_ColumnName = value;
}
}
public string ColumnCaption
{
get
{
if (stringIsNullOrEmpty(_ColumnCaption))
{
return ColumnName;
}
return _ColumnCaption;
}
set
{
_ColumnCaption = value;
}
}
public string ColumnTextFormat
{
get
{
if (stringIsNullOrEmpty(_ColumnTextFormat))
{
return stringEmpty;
}
return _ColumnTextFormat;
}
set
{
_ColumnTextFormat = value;
}
}
}
public static void ExportToExcel(DataSet ds,List<TableStruct> TableInfoAry)
{
if (ds == null)
{
ds = new DataSet();
}
if ( TableInfoAry == null )
{
TableInfoAry = new List<TableStruct>();
}
XlsDocument xls = new XlsDocument();
xlsFileName = DateTimeNowToString("yyyyMMddHHmmssffff",SystemGlobalizationDateTimeFormatInfoInvariantInfo);
xlsSummaryInformationAuthor = "wangmh"; //填加xls文件作者信息
xlsSummaryInformationNameOfCreatingApplication = "Microsoft Excel"; //填加xls文件创建程序信息
xlsSummaryInformationLastSavedBy = "wangmh"; //填加xls文件最后保存者信息
xlsSummaryInformationComments = "Gwm"; //填加xls文件作者信息
xlsSummaryInformationTitle = "Gwm"; //填加xls文件标题信息
xlsSummaryInformationSubject = "Gwm";//填加文件主题信息
xlsDocumentSummaryInformationCompany = "Gwm";//填加文件公司信息
foreach (TableStruct TableInfo in TableInfoAry)
{
DataTable dt = dsTables[TableInfoTableName];
if (dt == null)
{
continue;
}
Worksheet sheet = xlsWorkbookWorksheetsAdd(TableInfoTableCaption);

//设置标头栏
ushort ColumnIndex = 1;
foreach (ColumnStruct ColStruct in TableInfoColumnInfoAry)
{
ushort RowIndex = 1;
Row row = sheetRowsAddRow(RowIndex);
if (!dtColumnsContains(ColStructColumnName))
{
continue;
}
Cell cell = null;
if (rowCellExists(ColumnIndex))
{
cell = rowGetCell(ColumnIndex);
}
else
{
cell = sheetCellsAdd(RowIndex, ColumnIndex, null);
//rowAddCell(cell);
}
cellValue = ColStructColumnCaption;
cellFontWeight = FontWeightBold;
cellHorizontalAlignment = HorizontalAlignmentsCentered;
cellBottomLineStyle = 2;
cellBottomLineColor = ColorsGrey;
cellFontHeight = 10 20;
cellVerticalAlignment = VerticalAlignmentsCentered;
ushort ColumnMaxLength = GetColumnValueMaxLength(dt, ColStruct);
//设定列宽为自适应宽度
ColumnInfo colInfo = new ColumnInfo(xls, sheet);//生成列格式对象
//设定colInfo格式的起作用的列为第1列到第5列(列格式为0-base)
colInfoColumnIndexStart = (ushort)(ColumnIndex-1);
colInfoColumnIndexEnd = colInfoColumnIndexStart;
colInfoWidth = (ushort)(ColumnMaxLength 256);//列的宽度计量单位为 1/256 字符宽
sheetAddColumnInfo(colInfo);//把格式附加到sheet页上(注:AddColumnInfo方法有点小问题,不能把colInfo对象多次附给sheet页)
ColumnIndex++;
}
for (ushort i = 0; i < dtRowsCount; i++)
{
ushort RowIndex = (ushort)(i + 2);
Row row = sheetRowsAddRow(RowIndex);
int j = 0;
foreach (ColumnStruct ColStruct in TableInfoColumnInfoAry)
{
if ( !dtColumnsContains(ColStructColumnName) )
{
continue;
}
ColumnIndex = (ushort)(j + 1);
Cell cell = null;
if (rowCellExists(ColumnIndex))
{
cell = rowGetCell(ColumnIndex);
}
else
{
cell = sheetCellsAdd(RowIndex, ColumnIndex, null);
//rowAddCell(cell);
}
object objValue = dtRows[i][ColStructColumnName];
cellValue = GetColumnValueFormat(dt,ColStruct,objValue);
cellFontWeight = FontWeightNormal;
cellHorizontalAlignment = HorizontalAlignmentsCentered;
j++;
}
}
}
xlsSend();
}
private static string GetColumnValueFormat(DataTable dt, ColumnStruct ColStruct, Object ObjValue)
{
string ColumnValue = stringEmpty;
if ( ObjValue != null && ObjValue!= DBNullValue )
{
string ColumnDataType = dtColumns[ColStructColumnName]DataTypeToString();
switch (ColumnDataType)
{
case "SystemBoolean":
case "SystemByte":
{
ColumnValue = ObjValueToString();
break;
}
case "SystemDecimal":
{
if (stringIsNullOrEmpty(ColStructColumnTextFormat))
{
ColumnValue = ConvertToDecimal(ObjValue)ToString();
}
else
{
ColumnValue = ConvertToDecimal(ObjValue)ToString(ColStructColumnTextFormat);
}
break;
}
case "SystemDouble":
{
if (stringIsNullOrEmpty(ColStructColumnTextFormat))
{
ColumnValue = ConvertToDouble(ObjValue)ToString();
}
else
{
ColumnValue = ConvertToDouble(ObjValue)ToString(ColStructColumnTextFormat);
}
break;
}
case "SystemInt64":
{
if (stringIsNullOrEmpty(ColStructColumnTextFormat))
{
ColumnValue = ConvertToInt64(ObjValue)ToString();
}
else
{
ColumnValue = ConvertToInt64(ObjValue)ToString(ColStructColumnTextFormat);
}
break;
}
case "SystemInt16":
{
if (stringIsNullOrEmpty(ColStructColumnTextFormat))
{
ColumnValue = ConvertToInt16(ObjValue)ToString();
}
else
{
ColumnValue = ConvertToInt16(ObjValue)ToString(ColStructColumnTextFormat);
}
break;
}
case "SystemInt32":
{
if (stringIsNullOrEmpty(ColStructColumnTextFormat))
{
ColumnValue = ConvertToInt32(ObjValue)ToString();
}
else
{
ColumnValue = ConvertToInt32(ObjValue)ToString(ColStructColumnTextFormat);
}
break;
}
case "SystemDateTime":
{
if (stringIsNullOrEmpty(ColStructColumnTextFormat))
{
ColumnValue = ConvertToDateTime(ObjValue)ToString();
}
else
{
ColumnValue = ConvertToDateTime(ObjValue)ToString(ColStructColumnTextFormat,SystemGlobalizationDateTimeFormatInfoInvariantInfo);
}
break;
}
default:
{
ColumnValue = ObjValueToString();
break;
}
}
}
return ColumnValueTrim();
}
private static ushort GetColumnValueMaxLength(DataTable dt, ColumnStruct ColStruct)
{
ushort InitLenth = (ushort)SystemTextEncodingDefaultGetByteCount(ColStructColumnCaption);
ushort MaxLenth = InitLenth;
foreach (DataRow Row in dtRows)
{
object ObjValue = Row[ColStructColumnName];
if (ObjValue == null || ObjValue == DBNullValue)
{
continue;
}
string ColumnValue = GetColumnValueFormat(dt,ColStruct,ObjValue);
ushort ColumnValueLenth = (ushort)SystemTextEncodingDefaultGetByteCount(ColumnValue);
MaxLenth = ColumnValueLenth > MaxLenth ColumnValueLenth : MaxLenth;
}
if (MaxLenth == InitLenth)
{
//标题栏字体较大
MaxLenth += 4;
}
else
{
//内容文本前后与边框空余出一字的间隔
MaxLenth += 2;
}
return (ushort)(MaxLenth 12);
}
}
页面调用ExcelHelper类中的静态方法ExportDataToExcel导出数据集中指定Table的制定列到Excel文件并输出文件到浏览器客户端。XmlManagerGetString是多语言实现的相关方法,可以直接修改为返回当前列标题字符串。
private void ExportDataToExcel(DSSummary_DetailsQuery_SellInfo ds)
{
SystemCollectionsGenericList<ExcelHelperTableStruct> TableInfoAry = new SystemCollectionsGenericList<ExcelHelperTableStruct>();
ExcelHelperTableStruct TableInfo = new ExcelHelperTableStruct();
TableInfoTableName = dsDS_StockTableName;
TableInfoTableCaption = XmlManagerGetString("Summary_DetailsQuery_ViewCarInfoCustormerDetail_TitleTxt");
ExcelHelperColumnStruct ColStruct = new ExcelHelperColumnStruct();
ColStructColumnName = "C_CarNo";
ColStructColumnTextFormat = stringEmpty;
ColStructColumnCaption = XmlManagerGetString("IAMS_System_CarInfo_CarNo");
TableInfoAddColumnInfo(ColStruct);
//……添加其他列信息
TableInfoAryAdd(TableInfo);
ExcelHelperExportToExcel(ds, TableInfoAry);
}
希望可以帮到你,有什么问题可以联系我。Email:wangminghu2000@163com

cell是View和你数据一点关系都没有,楼主概念不清楚啊。
cell的重用数量是根据出现在屏幕的数量决定的,比如有10个cell出现在屏幕上,那么可能总共会有12个cell在重用池里,也就是说tableviewController一次载入12个cell,然后10个cell显示在屏幕上,每次滑动表单的时候,滑出屏幕的cell自动添加到重用池里备用,而滑进屏幕的cell也就是从那些在重用池里备用的cell。
按照你说的数据源更新了,按照MVC的架构,view负责显示就好了,你reloaddata之后,既然数据源数量变了,不知道你相应的datasource方法里的数量变过来没比如 tableView:numberOfRowsInSecion:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13472699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-14
下一篇 2023-08-14

发表评论

登录后才能评论

评论列表(0条)

保存