Tải bản đầy đủ (.pdf) (22 trang)

một số vấn đề khi phát triển ứng dụng gis trên pocket pc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (530.24 KB, 22 trang )

Khoa CNTT
Mt s vn đ khi phát trin ng dng GIS trên Pocket PC
Dng Anh c - Lê Thy Anh – Võ S Nam -  Lnh Hùng Sn
Khoa Công Ngh Thông Tin
i hc Khoa hc T nhiên Thành ph H Chí Minh
E-mail:
; ;
;
Pocket PC là mt dng thit b cm tay giúp ngi s dng lu tr các
thông tin cá nhân, công vic cn thit cng nh các phn mm ti thiu trên mt
thit b nh gn. Pocket PC chy trên nn h điu hành nhúng Windows CE, h
điu hành đa nhim 32-bits ch cung cp b nh mt cách gii hn cho các ng
dng phát trin trên nó. Vì vy, các ng dng liên quan ti h thng thông tin đa
lý (Geography Information System – GIS) phát trin trên Pocket PC và h điu
hành Windows CE gp phi các vn đ v ti u hoá b nh cng nh tc đ ng
dng. Trong bài vit này, chúng tôi trình bày mt s vn đ khi xây dng ng
dng GIS trên Pocket PC và h điu hành Windows CE 3.0.
Some Issues of Developing GIS Applications on Pocket PC
Dng Anh c - Lê Thy Anh – Võ S Nam -  Lnh Hùng Sn
Khoa Công Ngh Thông Tin
i hc Khoa hc T nhiên Thành ph H Chí Minh
E-mail: ; ;
;
Designed with mobile professionals in mind, Pocket PCs let users keep
their vital personal and business information up-to-date and close at hand.
PocketPC runs on embedded operating system Windows CE, which provides
limited memory to applications developed on it. Therefore, when developing
Geography Information System (GIS) applications on PocketPCs and Windows
CE, it is recommended that we optimize memory usage and enhance the speed of
these applications.
In this paper, we present some problems about building GIS applications on


Pocket PC and Windows CE 3.0.
Khoa CNTT
1 T VN 
S phát trin mnh m ca Internet, cng nh kh nng ca công ngh phn
cng, đã dn đn s ra đi ca các thitb ng dng Internet. Theo các nhà nghiên
cu th trng, mc dù PC vn gi vai trò ch yu trong vic x lý và h tr công
vic, nhng các thit b Internet hay thit b h tr cá nhân s ngày càng khng
đnh đc vai trò ca nó trên th trng.
Ra đi vào nhng nm 90 ca th k 20, Pocket PC là mt dng thit b cm
tay PDA (Personal Digital Assistant) s dng h điu hành Pocket PC, mt bin
th ca Windows CE, mt h điu hành nhúng đc Microsoft phát trin cho các
thit b không là PC (non-PC).
Do đc trng nh gn, đc thit k vi mc đích giúp ngi s dng lu
tr các thông tin cá nhân, công vic cn thit cng nh các phn mm ti thiu
trên mt thit b nh gn, và s dng mt h điu hành h hàng Windows, Pocket
PC đã đc khá nhiu nhà snxut phn mm quan tâm trong lnh vc phát trin
ng dng, trong đó có các ng dng GIS.
Tuy nhiên, Pocket PC chy trên nn h điu hành nhúng Windows CE, h
điu hành ch cung cp b nh mt cách gii hn cho các ng dng phát trin trên
nó. Vì vy, các ng dng liên quan ti h thng GIS phát trin trên Pocket PC và
h điu hành Windows CE gp phi các vn đ v ti u hoá b nh cng nh tc
đ và thng có tc đ chm hn nhiu so vi các ng dng trên PC thông
thng. Ngoài ra, do kh nng lu tr có gii hn, vic ng dng GIS trên môi
trng này cng gp không ít khó khn.
2MT S KHÓ KHN KHI PHÁT TRIN NG DNG GIS TRÊN
POCKET PC
2.1 KH NNG TÍNH TOÁN CA POCKET PC
Pocket PC s dng mt loi CPU khác vi CPU thông thng. Máy Pocket
PC 2002 s dng CPU StrongARM hoc XScale ca Intel. Các CPU này đc
gi là các b x lý RISC (Reduced Instruction Set Computer) vì nó ch thc hin

Khoa CNTT
mt lnh trong mt chu kì CPU. (Mi chu kì CPU trong mt giây gi là 1 Hertz
hay 1 Hz). Máy PC thông thng ca chúng ta s dng b x lý CISC (Complex
Instruction Set Computer), đòi hi nhiu chu kì CPU đ x lý mt lnh xác đnh.
Do đó, các b x lý RISC nh StrongARM theo lý thuyt, có th tính toán lên ti
206 triu lnh mt giây nu nó x lý  tc đ 206 Mhz.
Các b x lý StrongARM và XScale cng x lý các lnh 32bit, ging nh
PC thông thng. Tuy nhiên, li có mt khác bit ln trong vic x lý kích thc
lnh. B x lý CISC cho phép lnh có th có chiu dài bin đi, vì vy, nó phi
tính toán kích thc ca d liu cn đc khi x lý lnh. Trong kin trúc RISC, mi
lnh 32bit s có 32 d liu đi kèm. Vì vy, b x lý luôn bit đc phi đc bao
nhiêu d liu., đây là mt đim mnh ca kin trúc này.
 rng ca bus cùng vi tc đ bus cng có mt nh hng ln đn tc đ
x lý và tính toán ca máy tính.  rng ca bus ch ra s lng bit (hay byte) d
liu có th đc t / ghi lên RAM vào b vi x lý. Còn tc đ bus ch ra d liu có
th đc đc t RAM vào b vi x lý vi đ nhanh nh th nào. Ta có th hình
dung, đ rng bus nh s làn giao thông trên xa l, còn tc đ bus nh gii hn v
tc đ khi lu thông. Hin này, StrongARM và XScale s dng bus tc đ
100Mhz và thit k hin nay ca Pocket PC cho phép dùng bus 16bit. iu này có
ngha là tc đ bus ti đa là 200MB/giây.
Vn đ đt ra  đây là nh vy, b vi x lý có th đt đc tc đ x lý bao
nhiêu. Do chúng ta cn đc 8bytes d liu trc khi x lý mt lnh, nên gi s
chúng ta có đc tc đ bus ti đa là 200MB/giây, thì thc s, b x lý ch thi
hành đc 25 triu lnh.
Ngoài ra, li có mt vn đ khác, đó là cache. Cache là mt loi RAM đc
bit đc cha bên trong CPU và x lý vi cùng tc đ ca CPU. Cache trong b
x lý StrongARM là 16K cho mã chng trình và 8K cho d liu, cache trong
XScale là 32K cho mã chng trình và 32K cho d liu. Nu d liu và mã
chng trình cn x lý đc cha trn trong cache, h thng s có th thi hành vi
tc đ tht ca CPU. Nh vy, tc đ ca ng dng có th đc thi hành s có th

Khoa CNTT
tng t 25 lên 206 triu lnh mt giây, tu theo chng trình và d liu có va vi
kích thc cache không. Tc đ ca h thng cng ph thuc vào ngun cung cp
nng lng, do đó, khi s dng Pocket PC, ta có th nhn thy s khác bit v tc
đ khi thc thi chng trình.
Bây gi, s dng các đ so sánh v hiu sut hot đng gia máy
DesktopPC và Pocket PC. Các h thng Desktop PC hin ti thng s dng bus
100-133 Mhz. Pentium IV có th s dng DDR RAM hoc RAM BUS (RD
RAM) có tc đ t 200-800Mhz. Vì vy, ch xét trên phung din RAM, nus
dng RAM 133Mhz, hiu sut Desktop PC đã tng 1/3 ln (25 lên 33 triu lnh
mt giây). Tc đ CPU ca Desktop cng ln hn rt nhiu khi hin ti đã đt ti
tc đ trên 3Ghz dn đn hiu sut toàn h thng cao hn.
Khi lp trình ng dng GIS trên Pocket PC, đc đim v b x lý cng nh
tc đ ca Pocket PC nh hng rt ln đn tc đ hin th, x lý cng nh tìm
kim thông tin GIS.  gii quyt vn đ này, ta cn có nhng gii pháp phù hp
đ tng hiu nng ca ng dng, giúp ngi s dng có th s dng đc chng
trình vi tc đ chp nhn đc.
2.2 TC  VÀ CÁC H TR KH NNG HIN TH
i vi các ng dng GIS, mt trong nhng vn đ quan trng nht cn
phi quan tâm, đó là h tr hin th ca môi trng.
Tng t trên môi trng Windows – phiên bn desktop, các đi tng trc
quan nh vn bn, đ ho đc GDI (Graphics Device Interface) điu khin. Vi
các hàm GDI này, ng dng có th v hoc hin th đng thng, đng cong, các
đng khép kín, vn bn và các bitmap. Màu và kiu ca các đi tng này da
trên các đi tng đ ho mà lp trình viên to ra và s dng.
GDI trên Windows CE cng s dng mt ng cnh thit b (device context )
đ lu tr d liu cn đc hin th trên thit b. Các đi tng đ ho đc lu
tr trong device context  môi trng Windows CE bao gm mt bút v (pen) đ
v nét, chi v (brush) đ tô màu, font ch đ hin th ch, bitmap phc v cho
Khoa CNTT

vic sao chép hoc kéo, bng màu (palette) đ ch đnh màu v, và vùng clipping.
Windows CE h tr ng cnh thit b máy in (printer device context) ca máy in
đ v lên máy in, ng cnh thit b hin th (display device context) đ v lên thit
b video, ng cnh b nh (memory device context ) đ v lên b nh.
Khi xây dng ng dng GIS trên Pocket PC, cn chú ý ti vic ch đc s
dng các tính nng GDI đc h tr trên môi trng này. Danh sách các tính nng
đc h tr đc lit kê trong bng sau.
Tính nng GDI Mô t
Font Raster và TrueType Các font True Type có th kéo giãn hoc quay
đc.
H tr sn 7 font Raster trong ROM.
Windows CE ch h tr mt loi font, c raster ln
TrueType trên 1 loi thit b xác đnh
Bng màu H tr các đ sâu màu 1, 2, 4, 8, 16, 24, và 32 bits
per pixel (bpp). Mt bpp depth of 2 is unique to
Windows CE.
Các hàm dch khi bit và thao
tác theo vch
Cho phép quay, đnh c và ni các bitmap
Enables you to transform and combine bitmaps
Pen và brush H tr các loi dashed, wide, và solid pen, patterne
d
brush
In H tr in n đ ho (graphics printing)
Con tr H tr đy đ v con tr, bao gm c con tr do
ngi dùng đnh ngha.
Các thao tác v hình (Shape
drawing)
H tr v ellipse, polygon, rectangle, và roun
d

rectangle
Bng 1: Các tính nng GDI đc h tr trên Windows CE 3.0
Khoa CNTT
Ta nhn thy, do cn phi thu gn kin trúc cng nh các h tr nhm mc
đích ti u tc đ cho các thit b nhúng có tài nguyên gii hn, Windows CE đã
ch cung cp mt cách gii hn các tính nng ca GDI.
Windows CE GDI không h tr các đc tính:
• Thay đi to đ không gian, nh SetMapMode, GetMapMode,
SetViewportExt, và SetWindowExt. Ta đ không gian s tng ng vi
không gian ca thit b.
• Các hàm World Transform API
• Các hàm MoveTo và LineTo
• Con tr có màu sc, con tr đng (animated)
Và điu này cng là mt trong nhng lí do dn đn các th vin đ ho ca
MFC cng không h tr rt nhiu hàm liên quan ti vn đ hin th. Th nhìn qua
các hàm không đc h tr hoc h tr nhng có thay đi ca CWnd, lp đi
tng hin th chun ca MFC, trên môi trng Windows CE 3.0, ta đã thy rt
nhiu tính nng quan trng cn phi s dng trong ng dng GIS không đc h
tr, mt khó khn ln trong quá trình xây dng ng dng GIS.
ArrangeIconicWindows OnDeviceChange OnNcRButtonDown
CancelToolTips OnDevModeChange OnNcRButtonUp
ChangeClipboardChain OnDrawClipboard OnPaintClipboard
CreateCaret OnDropFiles OnPaletteIsChanging
CreateGrayCaret OnDSCNotify OnParentNotify
DlgDirList OnEndSession OnQueryDragIcon
DlgDirListComboBox OnEnterIdle OnQueryEndSession
DlgDirSelect OnEnterMenuLoop OnQueryNewPalette
DlgDirSelectComboBox OnExitMenuLoop OnQueryOpen
DragAcceptFiles OnGetMinMaxInfo OnRButtonDblClk
DrawMenuBar OnHScrollClipboard OnRButtonDown

EnableScrollBar OnIconEraseBkgnd OnRButtonUp
EnableToolTips OnInitMenu OnRegisteredMouseWheel
Khoa CNTT
FilterToolTipMessage OnMButtonDblClk OnSetCursor
FlashWindow OnMButtonDown OnSizeClipboard
GetClipboardViewer OnMButtonUp OnSizing
GetDCEx OnMDIActivate OnSpoolerStatus
GetDSCCursor OnMenuSelect OnStyleChanging
GetLastActivePopup OnMouseActivate OnSysColorChange
GetSystemMenu OnMouseWheel OnTimeChange
GetUpdateRgn OnMoving OnToolHitTest
GetWindowContextHelpIdOnNcActivate OnVScrollClipboard
GetWindowPlacement OnNcCalcSize OnWindowPosChanging
GetWindowRgn OnNcCreate SetClipboardViewer
HiliteMenuItem OnNcHitTest SetMenu
InvalidateRgn OnNcLButtonDblClk SetWindowContextHelpId
IsZoomed OnNcLButtonDown SetWindowPlacement
LockWindowUpdate OnNcLButtonUp SetWindowRgn
OnActivateApp OnNcMButtonDblClkShowOwnedPopups
OnAskCbFormatName OnNcMButtonDown ShowScrollBar
OnChangeCbChain OnNcMButtonUp UnockWindowUpdate
OnChildActivate OnNcMouseMove ValidateRgn
OnCompacting OnNcPaint
OnContextMenu OnNcRButtonDblClk
Bng 2: Các hàm thuc CWnd không đc h tr trên Windows CE
2.3 KH NNG VÀ HÌNH THC LU TR
Các Pocket PC chuyên dng có ROM ít nht là 12MB, RAM ít nht là
16MB. Các Pocket PC thông thng có ROM ít nht là 8MB, RAM ít nht là
8MB, thông thng là khong 32-64MB. Tuy nhiên, yêu cu v dung lng ca
RAM và ROM tu thuc vào loi CPU s dng, nhng thành phn mà nhà sn

xut h tr trên Pocket PC và tu thuc vào loi Pocket PC.
Do hn ch v ngun nng lng pin và kích thc ca thit b, Pocket PC
không s dng các thit b lu tr nh đa cng hay đa mm mà nó s dng mt
c ch gi là B lu tr đi tng (Object store). Object store là mt vùng RAM
đc ngi dùng đnh ngha, dùng đ lu tr các tp tin, các thông tin registry và
các database (gi là Object Store dng Storage). Vùng RAM còn li dùng làm b
Khoa CNTT
nh cho các chng trình đc thc thi (gi là Object Store dng Program).
Object store lu các thông tin di mt dng do h điu hành quy đnh, khác vi
trên Desktop và vn lu gi đc thông tin ca các ng dng và d liu ngay c
khi nng lng cung cp chính b mt nh ngun pin d tr. Có th xem Object
Store nh là đa cng trên thit b dùng Windows CE vì các end-user không bit
v Object Store do Microsoft đã cung cp trình WinCE Explorer đ đc ni dung
ca nó (tng t nh Microsoft Windows Expoler đ đc ni dung ca đa cng
trên máy desktop PC)
im khác bit ch yu mà ta cn lu ý là object store trên Windows CE là
vic thiu các kí t  đa. Windows CE s dng các th mc di th mc gc
cho vic cài đt các thit b ca ngi dùng. Ví d, nu ngi dùng gn mt flash
card vào máy, Windows CE s to ra mt th mc /Storage Card 1. C mi flash
card đc gn vào, con s này s tng lên (/Storage Card 2,…)
ng dn ti tp tin đc gii hn bi MAX_PATH (có th dài ti đa 260
kí t, ging nh trên Windows) Tuy nhiên, trên Windows CE không có khái nim
th mc hin hành, ta phi truy xut các tp tin bng các đng dn dy đ ca nó.
Trên Windows CE 2.0, các tp tin có kích thc ti đa là 4MB và s lng
ti đa trong object store là 65535. Trên Windows CE 3.0, kích thc ti đa cho
mt tp tin là 32MB, s lng ti đa đi tng lu tr trong object store là gn
4.000.000.
Do b nh ca thit b gii hn, và phi chia x làm hai phn Object Store
dng Storage và dng Program, nên các ng dng luôn phi tính toán sao cho s
dng ti u Object Store, không s dng quá nhiu Object Store dng Storage,

song không đc vì lí do này mà lúc np chng trình thc thi, li s dng quá
nhiu Object Store dng Program.
2.4 CP PHÁT B NH
i vi ng dng GIS, mt vn đ thng gp là phi cp phát b nh
nhiu ln. Vic s dng d tha hay sai sót trong cp phát, gii phóng b nh có
Khoa CNTT
th đ li hu qu rt nghiêm trng, đc bit là khi s lng đnh ca đ th là rt
ln. Trên môi trng Pocket PC, vic đ li nhng vùng nh d tha s làm chm
toàn b h thng, đng thi xy ra nhng li rt nghiêm trng, do dung lng b
nh không nhiu.
Windows CE s dng các hàm API liên quan ti b nh o đ cp phát b
nh cho vùng heap và stack. im li ca s dng b nh o là b nh o không
phân mnh: Windows CE luôn cp phát mt s nguyên các trang. Vì Windows CE
qun lý b nh o theo các khi 64KB, do đó khi chng trình không s dng ht
vùng nh 64KB thì nên dùng mt vùng nh heap đ tránh lãng phí.
2.4.1 CÁC C CH S DNG B NH
• Local Heap
Heap là mt vùng không gian b nh o d tr mà Windows CE qun lý đ
cp phát cho chng trình. Kích thc ca heap khong 4bytes hay 8bytes, tùy
thuc loi CPU
• Separate Heap
Thay vì tng thêm kích thc heap cc b, ta nên to mt vài vùng heap
nh nhm tng tính hiu qu.
• Stack
Stack là mt vùng nh lu tr cho các bin đc tham chiu trong mt hàm.
Windows CE cp phát b nh cho mt bin t stack và thu hi b nh sau khi hàm
hoàn tt. Khi mt tin trình hay tiu trình bt đu, Windows CE cp phát mt trang
b nh stack cho tiu trình đó. Mi tiu trình có mt stack và mi stack có mt
vùng 2KB cui cùng đ điu khin tràn stack.
• Static data block

Khi d liu tnh (Static data block) là mt khi nh mà Windows CE dành
cho chng trình. Khi này cha chui, buffer, và các giá tr tnh khác mà chng
trình s dng trong sut quá trình thc thi. Ta có th gim kích thc ca các khi
d liu bng cách khai báo d liu trong phn read/write vi khai báo const.
Khoa CNTT
2.4.2 NHN BIT TÌNH TRNG THIU B NH
Cho dù cp phát b nh hiu qu th nào và chng trình có s dng b
nh RAM hiu qu th nào, thit b Pocket PC vn có th b thiu b nh.  mc
đ lp trình, ta có th bit đc tình trng thiu b nh theo nhng cách sau:
• Hàm Virtual Alloc tr v 0, cho bit cp phát không thành công
• LocalAlloc hoc HeapAlloc tr v 0, cho bit vic tng kích thc vùng
heap không thành công
• Windows CE tr v mt li stack cho chng trình, cho bit cp phát
stack không thành công.
• Khi mt chng trình có yêu cu cp phát b nh, Windows CE kim
tra và lc yêu cu, nhm tránh vic s dng tt c b nh có sn cho
mt cp phát ln. Khi Windows CE bc vào tình trng thiu b nh,
nó s gim gii hn b nh ti đa cho chng trình
• Windows CE gi thông đip WM_HIBERNATION ti các ng dng
nhm thông báo tình trng thiu b nh.
2.5 TNG TÁC GIA NGI S DNG VÀ THIT B
Ngi s dng tng tác vi thit b thông qua mt màn hình touch-screen
LCD (màn hình cm nhn). Không s dng bàn phím (keyboard) và chut
(mouse) thông thng, Pocket PC h tr nhp liu thông qua mt bàn phím logic,
gi là SIP (Soft Input Panel). Bàn phím logic này thc cht là mt khung ca s
luôn tn ti trên màn hình, mô t và sp xp các phím tng t trên máy PC thông
thng. Ngi dùng s giao tip vi SIP thông qua ngón tay hoc stylus (mt cây
vit vt lý, cho phép nhp liu bng cách vit trc tip lên màn hình)
Thay th cho vic nhn Enter hay nhn đúp chut, Pocket PC s dng c
ch single-tapping (nhn đn) lên touch screen. Ngi dùng ch cn nhn mt ln

lên mt đi tng hoc liên kt, h điu hành s m đi tng/liên kt tng ng.
Khoa CNTT
Ngoài ra, đ giao tip vi ng dng, ngi dùng có th nhn-và-gi (tap-
and-hold). ây là c ch có tác dng tng t nh vic s dng context-menu
bng cách nhn phi chut trên PC. Khi ngi dùng nhn-và-gi trên mt đi
tng, có th mt menu hoc mt tooltip s hin ra, tu theo đi tng đó x lý
nh th nào.
Trong ng dng GIS, ta nhn thy vic nghiên cu và x lý các cách tng
tác trên là rt cn thit, bi trong dng ng dng này, vic di chuyn, phóng to, thu
nh, tra cu bn đ là nhng hành đng rt thng xuyên xy ra. Bên cnh đó,
phi đnh ngha li trong ng dng các hardware keys (phím vt lý) nhm tn dng
các phím di chuyn sn có ca thit b Pocket PC nhm tng tc đ tng tác cho
ngi dùng khi xem bn đ.
3T CHC LU TR D LIU GIS TRÊN POCKET PC
Các ng dng liên quan ti h thng thông tin đa lý (Geography
Information System – GIS) phát trin trên Pocket PC và h điu hành Windows
CE gp phi các vn đ v ti u hoá b nh cng nh tc đ ng dng do nhng
vn đ đã trình bày  phn trên. Khi đa ra các gii pháp cho ng dng bn đ trên
Pocket PC, cn phi
• Bo đm vic t chc lu tr thông tin và d liu ti u trên Object
Store dng Program
• Bo đm lu tr ít nht thông tin có th trên Object Store dng Storage
• Bo đm đc tc đ khi x lý tính toán đ hin th và tìm kim, tra cu
thông tin.
 đây, chúng tôi xin phép trình bày mt s vn đ liên quan đn t chc lu
tr thông tin GIS đã đc th nghim đi vi d liu bn đ TPHCM đc s hoá
t phn mm Smart Map Editor ([ 3]). D liu bn đ ngun bao gm các file
dng vn bn có cu trúc (text), các file dng nh phân có cu trúc (DBF, SHP).
Các d liu ngun này mô t thông tin ca các đi tng trên bn đ, c th nh
sau:

Khoa CNTT
• Các file dng vn bn có cu trúc, phn m rng (.MNT) mô t thông tin
không gian nh vector ca các con đng, các đng biên ca các
qun…
• Các file c s d liu DBF, lu gi thông tin mô t ph cho các file
.MNT và các file .SHP. Tùy thuc vào file .MNT hay .SHP mà các file
DBF có s trng (field) và giá tr d liu khác nhau.
• Các file dng SHP lu tr thông tin vector ca các đa đim. Tên đa
đim đc lu trong các file .DBF
3.1 LU TR D LIU KHÔNG GIAN
3.1.1 T CHC D LIU QUN/HUYN
D liu ngun qun huyn đc lu tr trong các file .MNT và.DBF
Bng mô t cu trúc file qun/huyn(DBF)
STT Tên trng Ý ngha
1ID ch s ca qun/huyn
2 NAME Tên qun/huyn
3 COLOR Màu ca qun huyn
Bng 3-1: D liu DBF qun/huyn
File .MNT cu trúc qun/huyn đc quy c nh sau
PathCount (đã đc đ cp trong cu trúc file .MNT)
S PathCount = S qun huyn + 1
Vi các Arc có Path=0 (đây là đng bao)
Vi các Arc có Path > 0 (đây là đng ch qun huyn)
Có bao nhiêu qun huyn thì có by nhiêu Arc có Path > 0 tng ng
Khoa CNTT
Hình 3-1: ng bao qun/huyn
Nh vy qun/huyn ch xác đnh đc nh vào đng ch qun huyn
(Path>0), còn đng ranh gii (đng bao) ca qun/huyn thì không đc xác
đnh. Ta ch có th v đc đng ranh gii qun/huyn mà không bit đc các
cung nào thuc qun huyn nào. Vic tip theo ta cn làm là xác đnh xem cung

nào thuc qun huyn nào
Ý tng nh sau:
Mi cung có Path=0 s thuc ít nht là mt qun và nhiu nht là hai qun.
Vì vy ta đánh du xem cung thuc nhng qun nào
Da vào các cung đã đc đánh du, ta xây dng li các đng ranh gii
qun/huyn
Lu đ vic đánh du qun huyn cho các cung
Gi cung đang xét là arc
Gi danh sách các cung là arrArc
Gi arcCur là cung đang xét trong danh sách arrArc
Loang cung đang xét arc ra mi hng
Ti các hng
B0: arcCur=0
Khoa CNTT
B1: Nu arc tip xúc vi arcCur qua B2
Ngc li qua B3
B2: Nu arcCur có Path > 0
đánh du qun cho arc
B3: Nu arcCur là cung cui cùng trong arrArc qua B4
Tng arcCur
Qua B1
B4: Kt thúc
Kt thúc lu đ: cung đã đc đánh du qun/huyn
Lu đ xây dng li đng ranh gii cho 1 qun/huyn
Gi qun/huyn đang xét là d
Gi các cung đang xét là arrCandidate
Gi các cung ca qun là arrGoal
Gi cung tìm thy là arcFound
Gi node là đnh đang xét
Gi arcCur là cung đang xét trong arrCandidate

B0: Ly các cung có đánh du qun là d đa vào arrCandidate
arrGoal =[]
arcFound=0
node=nh th 2 ca cung arcFound
B1: a cung arcFound trong arrCandidate vào arrGoal
arrGoal=arrGoal + [ arcFound ]
Xóa cung arcFound ra khi arrCandidate
arrCandidate= arrCandidate – arcFound
B2: arcFound= - 1
arcCur=0
B3: Nu arcCur có 1 đnh = node
node= đnh còn li ca arcCur
Khoa CNTT
arcFound=arcCur
Qua bc 1
Ngc li qua B4
B4: Nu arcCur là cung cui cùng trong arrCandidate qua B5
Ngc li qua B3
B5: Kt thúc
Kt thúc lu đ: Các cung ca qun đã đc sp th t liên tc trong danh
sách arrGoal
Sau khi đã xác đnh đc ranh gii qun huyn ta tin hành lu thông tin
các qun/huyn lên file .
Cu trúc file nh sau
Trng KiuGiá tr Ý ngha
UnicodeFormat long FFFE ây là file dng Unicode
Kiu file long Kiu file ây là file qun/huyn
MBR float MBR Hình cha nht bao
S qunIntS qunS qun
Tip theo là thông tin tng qun

Màu Int Màu Màu ca qun
MBR Float MBR Hình ch nht bao ca qun
XFloatX
YFloatY
im điu khin đ xut tên
qun
S đimIntS đimS đim ca đng ranh gii
Chiu dài tên Int Chiu dài tên Chiu dài tên qun
Tên TCHAR* Tên Tên qun
Tip theo là danh sách các đim
XfloatX
YfloatY
im ranh gii
Khoa CNTT
Bng 3-2: Cu trúc file qun huyn
3.1.2 T CHC D LIU NG
D liu qun huyn đc lu tr trong các file .MNT và .DBF
Bng mô t cu trúc file qun/huyn (DBF)
STT Tên trng Ý ngha
1 ROAD_NAME Tên đng
2 LENGTH Chiu dài đng
3 DAI_LO ây là đi l
4 LOGIOIVE Kích thc đng
Bng 3-3: File d liu đng dngDBF
File .MNT cu trúc qun/huyn đc quy c nh sau:
PathCount (đã đc đ cp trong cu trúc file .MNT)
S PathCount = S đng
Khoa CNTT
Ta s t chc lu tr li d liu lên file
Trng KiuGiá tr Ý ngha

UnicodeFormat long FFFE ây là file dng Unicode
Kiu file long Kiu file ây là file đng
MBR float[4] MBR Hình ch nht bao
S cung int S cung S cung
S đimintS đimS đim
S đ rng int S đ rng S đ rng
S đng int S đng S đng
Tip theo là danh sách các đ rng
 rng int  rng  rng
Tip theo là danh sách các đim
XfloatX
YfloatY
To đ đim
Tip theo là danh sách các cung
MBR float[4] MBR Hình ch nht bao
Node1 int Node1 im bt đu
Node2 int Node2 im kt thúc
PathID int PathID cung này thuc đng có
PathID
Hng unsigned
char
Hng Hng ca đng (1 chiu
hoc 2 chiu + chiu đi)
Sô đim ph int S đim ph S đim ph đ v cung
Tip theo là danh sách đnh ph
XfloatX
YfloatY
To đ đnh ph
Tip theo là thông tin các con đng
MBR float[4] MBR Hình ch nht bao ca con

Khoa CNTT
đng
Chiu dài tên unsigned
char
Chiu dài tên Chiu dài tên đng
Tên đng TCHAR* Tên đng Tên con đng
 rng int  rng  rng ca con đng
S nhánh int S nhánh S nhánh đng
S cung int S cung S cung ca đng
Tip theo là danh sách các cung
Bng 3-4: File d liu đng
3.1.3 T CHC D LIU A IM
D liu qun huyn đc lu tr trong các file .SHP và.DBF
Bng mô t cu trúc file đa đim (DBF)
STT Tên trng Ý ngha
1ID Ch s ca đa đim
2 NAME Tên đa đim
Bng 3-5: File d liu đa đim DBF
a đim trong d liu ngun cha đc phân loi c th. Mi loi đa đim
s đc lu trên các file riêng r. Ví d nh các thông tin v trng hc s đc
lu trong TruongHoc.SHP và TruongHoc.DBF. Do đó vi d liu ngun ta cn
phân loi li đa đim đ lu chúng vào trong mt tp tin.
Cu trúc file đa đim nh sau:
Trng KiuGiá tr Ý ngha
UnicodeFormat long FFFE ây là file dng Unicode
Kiu file long Kiu file ây là file đa đim
Danh sách tên phân loi đa đim
Chiu dài unsigned char Chiu dài Chiu dài tên
Tên TCHAR* Tên Tên phân loi
Khoa CNTT

Tip theo là danh sách tên ca tt c các đa đim
Chiu dài unsigned char Chiu dài Chiu dài tên
Tên TCHAR* Tên Tên đa đim
Tip theo là danh sách tt c các to đ ca đa đim
XfloatX
YfloatY
To đ đa đim
Bng 3-6: File d liu đa đim
3.2 LU TR D LIU PHI KHÔNG GIAN
Tìm kim thông tin phi không gian liên quan trc tip ti vic s dng các
cu trúc d liu thích hp đ lu tr và biu din các thông tin cn thit. Nu so
sánh, thì có th nói vic tìm kim thông tin này tng đi ging vi vic tra cu
ngha ca mt t trong t đin. Tuy nhiên, khác vi t đin, đi vi mt ng dng
GIS, mt s thông tin cn tìm kim, hoc có th đã đc lu tr sn, hoc cng có
th đc phát sinh ti thi đim tra cu. iu này dn đn vic phi tính toán nên
chn la hình thc cung cp thông tin nào (lu tr trc hoc phát sinh ti thi
đim tra cu). Sau đó, da vào hình thc này mi quyt đnh cu trúc d liu thích
hp đ biu din trong ng dng. Vic chn la này đc bit quan trng trong môi
trng Windows CE, vi tài nguyên và tc đ x lý chm.
Xem xét trên mt s thông tin ph tiêu biu  đây, liên quan đn đng, bao
gm: tng chiu dài con đng, đng này giao vi nhng đng nào, đng này
thuc qun nào theo hai phng án
3.2.1 LU TR THÔNG TIN TRÊN OBJECT STORE
Các thông tin ph có th đc lu tr trong Object Store trc khi thc thi
ng dng. Theo đó, đ gii quyt vn đ, s phi qua các bc sau:
• Nhn thông tin tra cu t ngi s dng
• Tra cu đ tìm v trí thông tin tng ng da trên mt ID duy nht
• Truy xut Object Store đ cung cp cho ngi s dng
Khoa CNTT
Do Object Store là c ch s dng b nh RAM, nên vic tra cu này nu

da trên các đi tng file hoc database có cu trúc rõ ràng và d tra cu thì chi
phí thi gian b ra không đáng k so vi c ch tìm kim trên b nh ngoài trên
môi trung Windows desktop. Tuy nhiên, ta s phi tn thêm mt vùng nh
Object Store cho các thông tin cn đc lu tr sn, trong khi kh nng lu tr ca
Pocket PC b hn ch.
3.2.2 TÍNH TOÁN TI THI IM TRA CU
Các thông tin cn tra cu s đc tính toán, kt xut t các thông tin khác
liên quan đã đc lu tr trc đó. Ví d, chiu dài con đng s bng tng chiu
dài ca các cung và cung con thuc con đng y.  tính toán đc giá tr cn
thit, phi s dng các phép toán so sánh đi vi tt c các cung tnti trong đ
th đ tìm các cung thuc con đng tra cu, sau đó là phép cng s thc đ ra
đc chiu dài.
3.2.3 NHN XÉT
Có hai vn đ  đây: th nht, nu tính chiu dài cho tt c các con đng, s phép
tính là rt ln. Tuy nhiên,  đây, ch cn thit tính chiu dài ca mt con đng
đang đc tra cu, vì vy có th chp nhn đc; th hai, các thông tin liên quan
đn quá trình tra cu đã đc to lp trc trong quá trình np d liu hin th cho
bn đ t các d liu cn thit. Nói cách khác, các thông tin này đã đc biu din
trc đó theo mt cu trúc đnh sn trong b nh, có ngha là không cn tn thêm
không gian Object Store đ lu tr. Nh vy, tt nht là áp dng và phi hp c
hai phng pháp này đ ti u hoá ng dng.
4KT LUN
Bài vit đã trình bày mt s vn đ khó khn chính mà các nhà phát trin
gp phi trong quá trình xây dng ng dng GIS trên môi trng Pocket PC. Ta
d dàng nhn thy rng, do cn phi bo đm đc tính nh gn cng nh ti thiu
hoá các module h tr ca hđiu hành đi vi thit b, Pocket PC có nhiu hn
Khoa CNTT
ch v nhiu mt, trong đó đc bit là vn đ v b nh, GDI và tc đ x lý tính
toán.
Vic kho sát và xác đnh các vn đ hn ch trên Pocket PC đóng vai trò

rt quan trng trong quá trình xây dng ng dng GIS trên môi trng này. Da
vào các kho sát này, các nhà phát trin mi có thđa ra nhng gii pháp thích
hp đ gii quyt các vn đ v ti u hoá b nh cng nh tc đ ng dng do
hn ch ca môi trng.
Chúng tôi cng đã trình bày mt s vn đ v t chc lu tr thông tin trên
Pocket PC. ây là vn đ đóng vai trò rt quan trng trong quá trình xây dng ng
dng GIS trên môi trng này, do nu t chc không tt s gây chm toàn b h
thng, đng thi xy ra nhng li rt nghiêm trng, do dung lng b nh không
nhiu.
Chúng tôi đã th nghim các bin pháp t chc lu tr thông tin nh đã
trình bày  trên và đã đt đc kt qu khá tt đi vi d liu bn đ TP.HCM (tt
c thông tin đc lu tr trong các tp tin vi tng kích thc khong 300KB).
Hng phát trin sp ti, s s dng phng pháp t chc d liu này b
sung thêm các thông tin hin th và tìm kim các tuyn giao thông công cng nh
xe buýt, tàu đin ngm ây là mt nhu cu rt thc t và có kh nng ng dng
cao.
cd
Tài liu tham kho
Tài liu vit:
[ 1] Hoàng Kim (ch biên)- Dng Anh c- Lê ình Duy- V Hi Quân, C s
đ ho máy tính, 2001
[ 2] Nick Grattan - Marshall Brain, Windows CE 3.0 Application Programming,
Prentice Hall PTR, 2000
Khoa CNTT
[3] Lê Thy Anh- inh Bá Tin, Xây dng h thng ch dn giao thông, Lun vn
c nhân tin hc, i hc Khoa hc T nhiên Tp.H Chí Minh, 2000
[ 4] Jason P.Nottingham – Steven Makofsky – Andrew Tucker- Teach Yourself
Windows CE Programming in 24 hours- SAMS – 2001
[5]ESRI,ESRI Shapefile Technical Description, July 1998
[ 6] Robin Wilson, Introduction to Graph Theory, Fourth Edition, Oliver & Boyd,

1996
[ 7] Microsoft, Microsoft eMbedded Visual C++ Guide
[ 8] Microsoft, Microsoft Developer Network, 4-2003
Website:
[ 9] Chris De Herrera's Windows CE Site,
/>[ 10] Pocket PC Developer Network,
[ 11] Windows CE Developers FAQ, />[ 12] GeoCommunity handheld, />[ 13] The CodeProject eMbedded and Mobile, />[ 14] The Codeguru Sites, />[ 15] Network of Windows CE,
[ 16] Microsoft Embedded homepage,
/>[ 17] Field Software Homepage,
[ 18] IconToday,

×