Hiệu quả truy vấn khi sử dụng các cấu trúc dữ liệu cây

Một phần của tài liệu (LUẬN văn THẠC sĩ) các cấu trúc dữ liệu trong hệ thống thông tin địa lý (Trang 65 - 80)

Số lượng dữ liệu thu thập của GIS ngày càng lớn, chúng đòi hỏi bộ nhớ phải có dung lượng lơn để lưu trữ. Do vậy cần có kỹ thuật để quản lý khối lượng lớn của dữ liệu này, đó là các kỹ thuật liên quan đến tổ chức dữ liệu sao cho dễ quản lý và xâm nhập và các kỹ thuật ảnh hưởng đến số liệu. Chỉ số không gian làm tăng tốc độ

tìm kiếm thông tin đặc trưng địa lý khi truy vấn dựa trên cơ sở vị trí của chúng. Chìa khóa để thực hiện tìm kiếm và truy nhập nhanh.

Sau khi đã nghiên cứu một số cây dữ liệu trong GIS ta thấy: Các kỹ thuật lưu trữ dữ liệu n-chiều đều sử dụng việc tách “phân cấp” không gian và được biểu diễn bởi các cây. Gốc cây biểu diễn toàn bộ vùng. Nút biểu diễn vùng, cành biểu diễn việc phân hoạch vùng ra tiểu vùng. Có nhiều cấu trúc dữ liệu khác nhau được sử dụng để biểu diễn việc tách phân cấp vùng. Mỗi chúng thực hiện tách không gian theo cách khác nhau và có ưu điểm và nhược điểm riêng. Hiệu năng hệ thống rất thấp khi phải tải khối lượng dữ liệu quá lớn vào bộ nhớ trong của máy tính để xử lý. Tổ chức dữ liệu theo dạng cây nhằm giảm số lần xâm nhập đĩa. Tìm kiếm tuần tự rất chậm. Mỗi nút trong và lá của cây có kích thước tương ứng một blốc I/O dữ liệu. Một hoặc hai tầng cây nên để thường trú trong bộ nhớ chính để tăng tốc độ xâm nhập.

KẾT LUẬN

Tại Việt Nam công nghệ GIS cũng được thí điểm khá sớm, theo thống kê có đến 80% trong hoạt động kinh tế - xã hội có liên quan đến GIS. Muốn có GIS tốt, thì việc tìm hiểu giải pháp quản trị CSDL của các hệ GIS là hết sức quan trọng và chủ chốt, có giải pháp hợp lý về chi phí, đáp ứng vừa đủ nhu cầu và thuận tiện phát triển GIS cho công việc chuyên môn.

Xuất phát từ thực tế đó luận văn nhằm tìm hiểu tổng quan về hệ thống thông tin địa lý và cơ sở dữ liệu không gian, tìm hiểu sâu các cấu trúc dữ liệu của GIS và ứng dụng của chúng. Cụ thể luận văn đã đạt được các kết quả chính sau:

 Trình bày tổng quan về hệ thống thông tin địa lý và cơ sở dữ liệu không gian.  Hệ thống hóa các cấu trúc dữ liệu trong CSDL không gian.

 Trình bày một số ứng dụng của các cấu trúc dữ liệu trong CSDL không gian và cài đặt kỹ thuật cây tứ phân điểm (Point Quadtree).

Trong khuôn khổ luận văn hướng đến việc cài đặt kỹ thuật cây tứ phân điểm để hiểu rõ hơn hoạt động của nó và tìm hiểu tính hiệu quả của cây dữ liệu này ở khía cạnh cho phép tìm kiếm dữ liệu ngẫu nhiên chứ không phải tìm tiếm tuyến tính. Đây là điểm khác với những luận văn cũng tìm hiểu về hệ thông tin địa lý đã có. Một số vấn đề còn tồn tại trong luận văn là chưa đánh giá được hiệu suất lưu trữ của những kỹ thuật đã nêu.

Hướng nghiên cứu tiếp theo sẽ cài đặt các kỹ thuật còn lại và xây dựng phương pháp phân cụm dữ liệu trong cơ sở dữ liệu không gian.

Trong tương lai, em sẽ cố gắng để hoàn thiện các hạn chế và phát triển những vấn đề đã nêu. Em rất mong nhận được ý kiến đóng góp của quý thầy cô và bạn bè để luận văn ngày càng hoàn thiện hơn.

TÀI LIỆU THAM KHẢO Tiếng Việt:

[1]. Đặng Văn Đức, Hệ thống thông tin địa lý (2001), NXB Khoa học và kỹ thuật, Hà Nội.

Tiếng Anh:

[2]. Jacqueline Stoilkovic, The Design and Analysis of Spatial Data Structures

(2014), Addison-Wesley Publishing Company, Inc, USA.

[3]. Paul A. Longley, Michael F. Goodchild, David J. Maguire, David W. Rhind,

Geographic Information Systems and Science 2nd Edition (2005), John Wiley & Sons Ltd, The Atrium, Southern Gate, Chichester,West Sussex PO19 8SQ, England, pp.231-235.

[4]. Philippe Rigaux, Michel Scholl, Agnès Voisard, Spatial Databases With Application to GIS (2002), Elsevier Science, USA, pp. 237-251.

[5]. Samet Hanan, Applications of Spatial Data Structures (1990), Addison-Wesley Publishing Company, Inc, USA.

[6]. Samet Hanan, The Design and Analysis of Spatial Data Structures (1990), Addison-Wesley Publishing Company, Inc, USA.

PHỤ LỤC

PL1. THUẬT TOÁN ĐIỀU CHỈNH ĐƯỜNG ĐI; CHIA, ĐIỀU CHỈNH NÚT TRONG R-TREE

ADJUSTPATH (node: Node)

begin

if (node is the root) return else

// Tìm cha của nút parent =G

ETPARENT (node)

// Điều chỉnh các mục của nút cha

if (ADJUSTENTRY (parent, [node.mbb, node.id])) then // Các mục được sửa; điều chỉnh đường đi của nút cha ADJUSTPATH (parent)

end if end if end

SPLITANDADJUST (node: Node) begin

//Tạo nút mới và phân phối các mục new-node =S

PLIT (node)

if (node is the root) then

CREATENEWROOT (node, new-node) else

// Lấy cha của nút

parent =GETPARENT (node)

// Điều chỉnh các mục trong nút cha của nó ADJUSTENTRY (parent, [node.id, node.mbb])

// Chèn nút mới trong cha

INSERTINNODE (parent, [new-node.mbb, new-node.id]) if (parent overflows) then

SPLITANDADJUST(parent) else ADJUSTPATH (parent) end if end if end

PL2. GIỚI THIỆU SHARPMAP

SharpMap là một thư viện mã nguồn mở hỗ trợ các chức năng bản đồ dành cho ứng dụng desktop hoặc ứng dụng web. SharpMap hỗ trợ hiển thị các kiểu dữ liệu Shapefile, PostGreSQL/PostGIS, OLEDB, SQLServer, Oracle, SpatiaLite và các kiểu dữ liệu khác thông qua thư viện chuyển đổi GDAL/OGR.

Phiên bản ổn định hiện tại của SharpMap là 1.1. Phiên bản đang phát triển là SharpMap 2. Mã nguồn của SharpMap được quản lý theo hệ thống Subversion (SVN), lưu trữ tại địa chỉ http://sharpmap.codeplex.com/SourceControl/latest .

Phiên bản thử nghiệm đầu tiên được đặt tên là SharpGIS (Hình PL2.1), công bố vào tháng 4 năm 2005. Ở bản này, bộ thư viện đã có thể hiển thị được nhiều kiểu dữ liệu vector, dữ liệu PostGIS. Tuy nhiên chưa hiển thị được dữ liệu ảnh và công cụ thao tác bản đồ còn sơ sài.

Hình PL2.1 : Lược đồ các phiên bản SharpMap

Kiến trúc của SharpMap phiên bản v2.0 như Hình PL2.2. Đây là kiến trúc được thiết kế trước, phần mã nguồn thực thi đang được phát triển để hoàn thiện như thiết kế.

Hình PL2.2 : Kiến trúc SharpMap

Phần giao diện hiển thị bao gồm các control có chức năng hiển thị bản đồ. Có các loại control dành cho ứng dụng sử dụng framework WPF hoặc Windows Form. Có control dành cho ứng dụng trên nền web. Phần giao diện hiển thị được tách riêng trong kiến trúc thể hiện sự linh động của mã nguồn bên trong nhân SharpMap.

Phần trình diễn đóng vai trò là người điều phối vùng dữ liệu nào được hiển thị lên các control trong phần giao diện hiển thị. Bên cạnh đó, các đối tượng trình diễn còn đảm nhận việc thể hiện màu sắc, nhãn đối tượng và thuộc tính đối tượng.

Phần bản đồ bao gồm các đối tượng được hiển thị trên bản đồ gọi là lớp bản đồ và các công cụ thao tác bản đồ được xây dựng sẵn.

Đối tượng dữ liệu là các đối tượng lưu trữ thông tin dữ liệu được đọc vào từ các nguồn. Dữ liệu được đọc vào thông qua các “Provider”.

Phiên bản ổn định cho đến tháng 12/2014 là SharpMap v1.1. Kiến trúc của phiên bản này thiếu mất phần giao diện hiển thị so với phiên bản v2. Do đó, lập trình viên cần xây dựng riêng cho mình một control đóng vai trò hiển thị bản đồ và các thông tin liên quan khác như tọa độ, tỷ lệ, …

Phần trình diễn chỉ mới tách riêng đối tượng đảm nhận việc hiển thị dữ liệu vector, các thành phần khác như nhãn, màu sắc, dữ liệu ảnh được điều phối bên trong nhân SharpMap.

PL3. CẤU TRÚC FILE SHAPEFILE PL3.1. Main file header

Main file header có độ dài 100 bytes. ... chỉ ra các trường trong file header với vị trí byte, giá trị, kiểu và thứ tự byte của chúng. Trong bảng này, vị trí được là tương đối tính từ vị trí bắt đầu file.

Bảng P-1. Mô tả của Main file header

Position Field Value Type Byte Order

Byte 0 File Code 9994 Integer Big

Byte 4 Unused 0 Integer Big

Byte 8 Unused 0 Integer Big

Byte 12 Unused 0 Integer Big

Byte 16 Unused 0 Integer Big

Byte 20 Unused 0 Integer Big

Byte 24 File Length File Length Integer Big

Byte 28 Version 1000 Integer Little

Byte 32 Shape Type Shape Type Integer Little Byte 36 Bounding Box Xmin Double Little Byte 44 Bounding Box Ymin Double Little Byte 52 Bounding Box Xmax Double Little Byte 60 Bounding Box Ymax Double Little Byte 68* Bounding Box Zmin Double Little Byte 76* Bounding Box Zmax Double Little Byte 84* Bounding Box Mmin Double Little Byte 92* Bounding Box Mmax Double Little * Không dùng nếu có giá trị 0.0, nếu không thì là độ đo hoặc kiểu Z.

Giá trị của độ dài file là tổng độ dài của file theo đơn vị là các từ 16-bit, trong đó bao gồm 50 từ (tức là 100 byte) của file header. Tất cả các hình dạng

không null trong một shapefile phải có cùng kiểu shape. Các giá trị của kiểu được cho trong Bảng P-2.

Bảng P-2. Các giá trị của shape type.

Giá trị Kiểu Shape 0 Null Shape 1 Point 3 PolyLine 5 Polygon 8 MultiPoint 11 PointZ 13 PolyLineZ 15 PolygonZ 18 MultiPointZ 21 PointM 23 PolyLineM 25 PolygonM 28 MultiPointM 31 MultiPatch

Hộp biên (Bounding Box) trong main file header chứa phạm vi thực sự của các shape trong file: Hình chữ nhật bé nhất phủ toàn bộ các shape có cạnh song song với trục X và Y (và có khả năng mở rộng với trục M và Z). Nếu shapefile là rỗng (không có bản ghi nào) thì giá trị của Xmin, Ymin, Xmax, và Ymax không được xác định.

PL3.2. Các header bản ghi

Header cho mỗi bản ghi chứa số hiệu bản ghi và độ dài nội dung của bản ghi đó. Các header bản ghi có độ dài cố định là 8 byte.

Bảng P-3 mô tả các trường của header bản ghi, với vị trí được tính từ đầu

Bảng P-3. Mô tả header bản ghi.

Position Field Value Type Byte Order

Byte 0 Record Number Số hiệu bản ghi Integer Big Byte 4 Content Length Độ dài nội dung Integer Big

Số hiệu bản ghi bắt đầu từ 1. Độ dài nội dung bản ghi là độ dài của phần nội dung bản ghi theo đơn vị từ 16-bit. Do đó, mỗi bản ghi sẽ đóng góp số lượng từ 16- bit là (4 + độ dài nội dung) vào tổng độ dài của file (được chứa ở Byte 24 trong file header).

PL3.3. Nội dung bản ghi

Nội dung bản ghi shapefile bao gồm một kiểu shape, theo sau bởi dữ liệu hình học của shape đó. Độ dài của nội dung bản ghi phụ thuộc vào số thành phần và số đỉnh trong shape.

Tiếp sau đây trình bày một số nội dung bản ghi theo các kiểu shape trong hệ quy chiếu X, Y.

Kiểu Point (điểm). Một điểm bao gồm một cặp tọa độ kiểu double-precision theo thứ tự X, Y. Point { Double X // X coordinate Double Y // Y coordinate }

Bảng P-4. Nội dung bản ghi biểu diễn điểm.

Position Field Value Type Number Byte Order Byte 0 Shape Type 1 Integer 1 Little

Byte 4 X X Double 1 Little

Kiểu MultiPoint (đa điểm). Biểu diễn một tập các điểm, như sau: MultiPoint

{

Double[4] Box // Bounding Box

Integer NumPoints // Number of Points

Point[NumPoints] Points // The Points in the Set }

Hộp Biên (Bounding Box) được lưu theo thứ tự Xmin, Ymin, Xmax, Ymax.

Bảng P-5. Nội dung bản ghi biểu diễn đa điểm.

Position Field Value Type Number Byte Order

Byte 0 Shape Type 8 Integer 1 Little

Byte 4 Box Box Double 4 Little

Byte 36 NumPoints NumPoints Integer 1 Little Byte 40 Points Points Point NumPoints Little

Kiểu PolyLine (đa đoạn). Một PolyLine là một tập có thứ tự các đỉnh bao gồm một hoặc nhiều thành phần. Một phần là một thành phần liên thông gồm ít nhất hai đỉnh. Các phần có thể hoặc không liên thông với phần khác. Các phần có thể hoặc không cắt nhau với phần khác. Do là đặc tả này không cấm các điểm liên tục với các tọa độ trùng nhau, nên khi đọc shapefile phải kiểm soát được các trường hợp như vậy. Việc dẫn tới các phần thoái hóa có độ dài bằng không là không được phép.

PolyLine {

Double[4] Box // Bounding Box Integer NumParts // Number of Parts

Integer NumPoints // Total Number of Points

Integer[NumParts] Parts // Index to First Point in Part Point[NumPoints] Points // Points for All Parts

}

Các trường của một PolyLine được mô tả chi tiết sau đây:

 Box: Hộp Biên cho PolyLine được lưu theo thứ tự Xmin, Ymin, Xmax, Ymax.

 NumParts: Số các phần trong PolyLine.

 NumPoints: Tổng số các điểm trong tất cả các phần của PolyLine.

 Parts: Một mảng có độ dài NumParts chứa chỉ số của điểm đầu tiên của nó trong mảng các điểm. Các chỉ số mảng được đánh từ 0.

 Points: Một mảng cú độ dài NumPoints.

 ...

Bảng P-6. Nội dung bản ghi chi tiết đa đoạn.

Position Field Value Type Number Byte

Order

Byte 0 Shape Type 3 Integer 1 Little

Byte 4 Box Box Double 4 Little

Byte 36 NumParts NumParts Integer 1 Little Byte 40 NumPoints NumPoints Integer 1 Little Byte 44 Parts Parts Integer NumParts Little Byte X Points Points Point NumPoints Little

Chú ý: X = 44 + 4 * NumParts. Kiểu Polygon (Đa giác)

Một đa giác bao gồm một hoặc hơn một vành. Một vành là một chuỗi đóng liên thông của ít nhất 4 điểm, không tự cắt. Một đa giác có thể chứa nhiều vành ngoài. Thứ tự của các định hoặc hướng của một vành chỉ ra mặt nào của vành là phía trong của đa giác. Lân cận bên phải của người quan sát đi dọc theo vành theo thứ tự đỉnh là thuộc vùng phía trong của đa giác. Các đỉnh của các vành định nghĩa lỗ rỗng trong đa giác theo hướng ngược chiều kim đồng hồ. Các đỉnh của vành đơn do đó luôn có thứ tự thuận chiều kim đồng hồ. Các vành của một đa giác được cho bởi các part (phần) của nó.

Lưu ý là các điểm liên tiếp không nhất thiết phải phân biệt, nên khi đọc shapefile phải xử lý tình huống này. Cấu trúc của đa giác cũng giống như cấu trúc đa đoạn, như sau

Polygon {

Double[4] Box // Bounding Box Integer NumParts // Number of Parts

Integer NumPoints // Total Number of Points

Integer[NumParts] Parts // Index to First Point in Part Point[NumPoints] Points // Points for All Parts

}

Các trường của một đa giác được mô tả chi tiết như sau:

 Box: Hộp biên của đa giác theo thứ tự Xmin, Ymin, Xmax, Ymax.

 NumParts: Số vành trong đa giác.

 NumPoints: Tổng số điểm trong tất cả các vành.

 Parts: Một mảng gồm NumParts phần tử, chứa chỉ số điểm đầu tiên của mỗi vành trong mảng Points.

 Points: Một mảng gồm NumPoints phần tử. Các điểm cho vành 2 nối tiếp các điểm của vành 1 và cứ như vậy.

Một ví dụ về đa giác gồm 2 vành và 10 điểm như sau:

Thứ tự các đỉnh được lưu trữ trong shape file được minh họa bởi Hình P-2.

Hình P-2. Lưu trữ đa giác trong shapefile.

Bảng P-7. Nội dung bản ghi đa giác.

Position Field Value Type Number Byte

Order

Byte 0 Shape Type 5 Integer 1 Little

Byte 4 Box Box Double 4 Little

Byte 36 NumParts NumParts Integer 1 Little Byte 40 NumPoints NumPoints Integer 1 Little Byte 44 Parts Parts Integer NumParts Little Byte X Points Points Point NumPoints Little

Chú ý: X = 44 + 4 * NumParts.

Ngoài ra shapefile còn có các cấu trúc shape khác như: PointM, MultiPointM, PolyLineM, PolygonM (M là độ đo), PointZ, MultiPointZ, PolyLineZ, PolygonZ (trong hệ quy chiếu X, Y, Z) và cấu trúc MultiPatch (đa mảnh).

Một phần của tài liệu (LUẬN văn THẠC sĩ) các cấu trúc dữ liệu trong hệ thống thông tin địa lý (Trang 65 - 80)

Tải bản đầy đủ (PDF)

(80 trang)