CÁC LƢU ĐỒ VÀ GIẢI THUẬT CHÍNH

Một phần của tài liệu Công nghệ GIS và ứng dụng với mapinfo (Trang 38)

Diễn giải: Khi click vào đối tượng đường hay địa điểm sẽ xuất hiện Dialog cập nhật đối tượng gồm các thông tin của đối tượng đó. Sẽ có 2 lựa chọn: “Update” để cập nhật dữ liệu hoặc chọn “Cancel” để hủy chức năng.

3.2.2 Lƣu đồ giải thuật tìm một con đƣờng - một địa điểm

Hình 14: Lưu đồ giải thuật tìm một con đường, một địa điểm

Diễn giải: Sau khi nhập xong tên đường hoặc địa điểm và click vào nút tìm kiếm thì chương trình tiến hành truy cập cơ sở dữ liệu để tìm kiếm tên đường, địa điểm gần giống với chuỗi đã nhập. Nếu chỉ có một dòng thích hợp với chuỗi thì sẽ hiển thị con đường hay địa điểm đó ra màn hình, nếu có nhiều dòng thích hợp thì sẽ xuất hiện một Dialog danh sách các con đường hay đại điểm tìm được và người dùng chọn một tên đường để hiển thị, nếu không có dòng dữ liệu nào thích hợp thì sẽ in ra thông báo “Chuỗi không tồn tại trong cơ sở dữ liệu”.

3.2.3 Lƣu đồ giải thuật thêm và xóa điểm

Hình 15: Lưu đồ giải thuật thêm và xóa một địa điểm

Diễn giải: Khi khởi động chức năng thêm mới hoặc xóa một địa điểm, chương trình yêu cầu click vào một điểm xác định trên bản đồ. Sau đó sẽ xuất hiện 1 Dialog “ Bạn có muốn xóa địa điểm này không” hoặc thông tin cần nhập cho địa điểm mới. Sẽ có 2 lựa chọn: chọn “có” đối với chức năng xóa và “create” đối với chức năng thêm để thực hiện chức năng, hoặc chọn “không” và “Cancel” để hủy chức năng.

3.2.4 Lƣu đồ giải thuật Dijkstra

a. Lý thuyết về thuật toán tìm đƣờng đi ngắn nhất: Khái niệm về đồ thị :

Đồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh chứa các đỉnh này. Chúng ta phân biệt các loại đồ thị khác nhau bởi kiểu và số lượng cạnh nối hai đỉnh nào đó của đồ thị.

Hình 16: Đồ thị 1

Nhận thấy như trên thì giữa 2 điểm bất kỳ chỉ có một cạnh liên kết chúng lại và các đỉnh thì không nối lại được chính nó. Từ đó ta đi đến định nghĩa đơn đồ thị vô hướng :

Định nghĩa 1. Đơn đồ thị vô hướng G=(V,E) bao gồm V là tập đỉnh, và E là tập các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh.

Ta có định nghĩa đa đồ thị vô hướng :

Định nghĩa 2. Đa đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh. Hai cạnh e1 va e2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh.

Trong trường hợp này ta thấy xuất hiện những cạnh khuyên (cạnh nối đỉnh với chính nó).

Định nghĩa 3. Giả đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E là họ các cặp không có thứ tự gồm hai phần tử (không nhất thiết phải khác nhau) của V gọi là các cạnh. Cạnh e được gọi là khuyên nếu có dạng e=(u,u).

Hình 18: Đồ thị 3

Mỗi điểm có thể liên kết với nhau theo 2 chiều trên cùng một mạng được thể hiện bằng 2 chiều ngược nhau.

Ta đi đến định nghĩa sau:

Hình 19: Đồ thị 4

Định nghĩa 4. Đơn đồ thị có hướng G=(V,E)bao gồm V là tập các đỉnh, và E là

tập các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung.

Nếu trong mạng có thể có đa kênh thoại một chiều, ta sẽ phải sử dụng đến khái niệm đa đồ thị có hướng:

Định nghĩa 5. Đa đồ thị có hướngG=(V,E) bao gồm V là tập các đỉnh, và E là

họ các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung. Hai cung e1 và e2 tương ứng với cùng một cặp đỉnh được gọi là cung lặp.

Nhắc lại định nghĩa đƣờng đi,chu trình,đồ thị liên thông

Định nghĩa 1. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên

xo, x1 , ... , xn-1 , xn

trong đó u=x0 , v=xn , ( xi , xi+1 ) E , i= 0, 1, 2 ,..., n-1.

Đường đi nói trên còn có thể biểu diễn dưới dạng các cạnh: (x0 , x1 ) , ( x1 , x2), ... , ( xn-1 , xn ). (adsbygoogle = window.adsbygoogle || []).push({});

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh đầu trùng với đỉnh cuối ( tức là u=v) được gọi là chu trình. Đường đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại.

Định nghĩa 2. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên

dương, trên đồ thị có hướng G=(V,A) là dãy xo, x1 , ... , xn-1 , xn

trong đó u=x0 , v=xn , ( xi , xi+1 )  A , i= 0, 1, 2 ,..., n-1.

Đường đi nói trên còn có thể biểu diễn dưới dạng các cung: (x0 , x1 ) , ( x1 , x2), ... , ( xn-1 , xn ).

Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh đầu trùng với đỉnh cuối ( tức là u=v) được gọi là chu trình.

Đường đi hay chu trình được gọi là đơn nếu như không có cung nào bị lặp lại.

Địng nghĩa 3. Đồ thị vô hướng G=(V,E) được gọi là liên thông nếu luôn tìm

được đường đi giữa hai đỉnh bất kỳ của nó.

Giải thuật Dijkstra

Nội dung : có rất nhiều giải thuật để tìm kiếm đường đi ngắn nhất giữa 2 cặp đỉnh của một đồ thị.Trong chương trình tìm đường đi ngắn nhất này ta áp dụng giải thuật Dijkstra để giải quyết bài toán. Giải thuật Dijkstra là một giải thuật để giải bài toán đường đi ngắn nhất nguồn đơn trên một đồ thị có trọng số cạnh mà tất cả các trọng số đều không âm.

Ở mỗi đỉnh v, giải thuật Dijkstra xác định 3 thông tin: kv, dvpv.

kv: có giá trị boolean, xác định trạng thái được chọn của đỉnh v. Ban đầu ta khởi tạo tất cả các đỉnh v chưa được chọn, nghĩa là:

kv = false, v V.

dv: là chiều dài đường đi mà ta tìm thấy cho đến thời điểm đang xét từ a đến v. Khởi tạo, dv = , v V \{a}, da = 0.

pv: là đỉnh trước của đỉnh v trên đường đi ngắn nhất từ a đến b. Đường đi ngắn nhất từ a đến b có dạng {a,...,pv,v,...,b}. Khởi tạo, pv = null, v V.

Sau đây là các bước của giải thuật Dijkstra:

B1. Khởi tạo: Đặt kv:= falsev V; dv:=,v V \ {a}, da:=0.

B2. Chọn v V sao cho kv = falsedv = min {dt / t V, kt = false} Nếu dv =  thì kết thúc, không tồn tại đường đi từ a đến b.

B3. Đánh dấu đỉnh v, kv:= true.

Ngược lại nếu v b sang B5.

B5. Với mỗi đỉnh u kề với vku = false, kiểm tra Nếu du > dv + w(v,u) thì du:= dv + w(v,u) Ghi nhớ đỉnh v: pu:= v.Quay lại B2. Các tham số trong giải thuật Dijkstra:

mn : là số đỉnh của đồ thị và cũng là số dòng và số cột của ma trận.

node_begin : là đỉnh bắt đầu .

node_end : là đỉnh cần đi đến.

L(i) : độ dài của đỉnh thứ i

T(i) : xác định trạng thái của đỉnh i, giá trị khởi tạo ban đầu là 1, sau khi nhãn được chọn thì gán giá trị là 0

DD(i) : mảng lưu trữ các đỉnh của đường đi

Mang2c() : ma trận trọng số, là mảng 1 chiều dùng để sử dụng như mảng 2 chiều

V : là tập hợp các đỉnh của đồ thị (adsbygoogle = window.adsbygoogle || []).push({});

Lƣu đồ giải thuật Dijkstra :

Độ phức tạp của giải thuật Dijkstra: Ma trận kề :

Gọi f(n) là số lần khảo sát các cạnh đồ thị trong trường hợp xấu nhất. Khi đó ta có:

f(n) < O(|V|2)

3.3 SƠ ĐỒ CHỨC NĂNG CỦA CHƢƠNG TRÌNH

3.4 GIỚI THIỆU CHƢƠNG TRÌNH

3.4.1 Chức năng tìm kiếm đƣờng ngắn nhất từ danh sách điểm: a.Mô tả chức năng : a.Mô tả chức năng :

Khi chọn chức năng tìm đường với danh sách điểm thì sẽ xuất hiện một dialog yêu cầu chọn điểm bắt đầu và điểm kết thúc mà ta cần tìm đường đi ngắn nhất.

b.Giao diện demo :

Hình 22: Giao diện chức năng tìm đường đi ngắn nhất từ danh sách điểm

3.4.2 Chức năng tìm kiếm đƣờng ngắn nhất từ 2 điểm bất kì khi click a.Mô tả chức năng: a.Mô tả chức năng:

Khi người dùng chọn chức năng này thì sẽ xuất hiện buttonpad có biểu tượng chọn điểm bắt đầu và kết thúc của đường đi. Sau khi chọn xong 2 điểm thì sẽ xuất hiện dialog tìm đường

Hình 23: Giao diện chức năng tìm đường đi ngắn nhất từ 2 điểm bất kỳ Kết quả hiển thị tìm đường :

3.4.3 Chức năng tìm kiếm một con đƣờng và địa điểm a.Mô tả chức năng : a.Mô tả chức năng :

_Khi chọn Tim Duong-Dia Diem trên thanh menu bar thì sẽ xuất hiện hộp dialog yêu cầu điền tên đường hay địa điểm vào.

_Nếu bạn đánh chính xác tên một đường hay địa điểm thì nó sẽ hiển thị và phóng to tại con đường hoặc địa điểm đó.

_Nếu bạn đánh gần đúng thì sẽ xuất hiện một hộp dialog với các tên gần giống với tên mà bạn đánh. Khi đó bạn sẽ chọn được chính xác hơn.

Hình 25: Giao diện chức năng tìm đường hoặc địa điểm 1

b.Giao diện demo chƣơng trình :

3.4.4 Chức năng chỉnh sửa đối tƣợng-thêm địa điểm-xóa địa điểm: a.Mô tả chức năng : a.Mô tả chức năng :

Khi bạn chọn Công Cụ trên thanh menu bar thì một button pad xuất hiện.

Hình 27: Thanh Công Cụ Bao gồm các chức năng :

 Chỉnh sửa thông tin các đối tượng đường điểm khi click  Chức năng thêm địa điểm

 Chức năng xóa một địa điểm

b.Giao diện demo chƣơng trình :

KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 4.1 KẾT LUẬN CHUNG

GIS là một hệ thống thông tin bao hàm nhiều khái niệm, kỹ thuật, quy trình và được ứng dụng vào nhiều lĩnh vực khác nhau. Hiện nay, GIS được hỗ trợ với nhiều công cụ mạnh mẽ và ngày càng trở nên phổ biến hơn. Trong những năm gần đây, cùng với sự phát triển của cộng đồng mã nguồn mở Việt Nam nói chung và thế giới nói riêng đã có những thành tựu nhất định trong công nghệ GIS. Đề tài luận văn: “Xây dựng bản đồ giao thông thành phố Cần Thơ với công nghệ MapInfo” đã tìm hiểu về GIS, công nghệ MapInfo và xây dựng được ứng dụng với các chức năng chính:

 Xây dựng bản đồ giao thông thành phố Cần Thơ, thể hiện các địa điểm quan trọng

 Xây dựng ứng dụng chỉ đường trên Desktop với công nghệ MapBasic  Chức năng chỉnh sửa các đối tượng

 Tìm kiếm các địa điểm, con đường (adsbygoogle = window.adsbygoogle || []).push({});

Mong rằng chương trình sẽ áp dụng tốt trong thực tiễn sử dụng và đóng góp một phần nhỏ vào ngôi nhà GIS của Việt Nam.

4.1.1 Nhận xét kết quả đạt đƣợc

Qua thời gian nghiên cứu và xây dựng chương trình nhóm đã thu được một số kiến thức và kinh nghiệm nhất định:

_Về bản thân:

 Hiểu được công nghệ GIS và số hóa bản đồ.

 Sử dụng thông thạo phần mềm MapInfo, một hệ GIS mạnh và thông dụng hiện nay.

 Tìm hiểu ngôn ngữ lập trình MapBasic trên nền MapInfo.  Học tập được nhiều kinh nghiệm làm việc nhóm

_Về chương trình :

 Xây dựng được chương trình thỏa mãn yêu cầu của đề tài luận văn  Giao diện đẹp và thân thiện với người sử dụng

 Có thể áp dụng vào thực tiễn _Về thực tiễn :

 Thấy được sự phát triển mạnh mẽ của công nghệ GIS trong tương lai  Am hiểu các khả năng đa dạng và mạnh mẽ trong việc xây dựng bản

đồ, hỗ trợ ra quyết định, lập các báo cáo từ số liệu sẵn có, khả năng tự động hóa bằng MapBasic … của MapInfo.

4.1.2 Hạn chế

Tuy nhiên với sự hạn hẹp về thời gian nghiên cứu và lượng kiến thức không nhiều nên vẫn còn tồn tại những hạn chế nhất định:

_Chủ quan:

 Chưa có nhiều kinh nghiệm trong việc thực hiện các đề tài khoa học  Chưa nghiên cứu được các giải thuật khác nhằm tối ưu hóa chương

trình

 Các trường dữ liệu mô tả cho các đối tượng đường hay địa điểm chưa phong phú

_Khách quan:

 Mặc dù có hỗ trợ tiếng việt (bảng mã: TCVN3, Font: .vnArial), nhưng các Dialog của MapInfo thì chỉ hiển thị được các kí tự không dấu do đó dữ liệu về tên đường, địa điểm, quận huyện… hiển thị chưa được như ý.

 Ngôn ngữ MapBasic không hỗ trợ kiểu con trỏ và mảng 2 chiều, đồng thời số phần tử mảng 1 chiều được hỗ trợ cũng không nhiều. Vì thế chương trình sẽ gặp khó khăn với lượng dữ liệu lớn.

4.2 ĐỀ NGHỊ VÀ HƢỚNG PHÁT TRIỂN

 Chương trình cần có thời gian để tiến hành kiểm thử nhiều trường hợp khác nhau để khắc phục hay hạn chế các lỗi gặp phải.

 Triển khai chương trình vào thực tế để từ đó thấy được nhu cầu người dùng và các hạn chế của chương trình.

 Mở rộng các trường dữ liệu để thông tin thêm phong phú và đa dạng.  Mở rộng phạm vi của bản đồ

 Áp dụng hướng phát triển này vào các thiết bị di động nhằm làm tăng tính tiện dụng cho phần mềm

PHỤ LỤC: CÁC HÀM CHÍNH SỬ DỤNG TRONG CHƢƠNG TRÌNH

Các hàm quan trọng sử dụng trong chương trình:

OverlayNodes() :

OverlayNodes(input_object,overlay_object) (adsbygoogle = window.adsbygoogle || []).push({});

input_object : là đối tượng mà những node sẽ được thêm vào, không cho phép là điểm pointer của text

overlay_object : là đối tượng phủ lên đối tượng input, không cho phép là điểm pointer của text

Hàm sẽ trả về một object đã tồn tại chứa tất cả các node của đối tượng input và những node của đối tượng overlay_object phủ lên đối tượng input_object.

Đối tượng mới giữ nguyên style của input_object

ObjectNodeX(), ObjectNodeY()

ObjectNodeX(object,polygon_num,node_num) ObjectNodeY(object,polygon_num,node_num)

Hàm trả về tọa độ những node của đối tượng object là polyline hay region.

object : là một đối tượng polyline hay region

polygon_num : là số nguyên định danh của một region hay polyline(đối với polyline là 1)

node_num : vị trí của node (1,2…)

IntersectNodes()

IntersectNodes(object1,object2,point_to_include)

Trả về một polyline chứa toàn bộ những node của hai object giao nhau.

object1,object2 : là 2 đối tượng tượng giao nhau.

point_to_include : là một trong các giá trị :

INCL_CROSSINGS : trả về các điểm point khi các đoạn cắt nhau  INCL_COMMON : trả về điểm cuối chồng lên nhau

INCL_ALL : trả về toàn bộ các điểm của 2 thành phần trên.

CartesianConnectObject()

CartesianConnectObject(object1, object2, min)

object1, object2 là 2 đối tượng

min là một giá trị logical mang giá trị TRUE hoặc FALSE , min= TRUE thì hàm trả về polyline có khoảng cách nhỏ nhất, min=FALSE thì hàm trả về polyline có khoảng cách lớn nhất giữa 2 object.

Hàm không thể tính toán được khi chọn hệ tọa độ Lat/Long .

SearchPoint()

SearchPoint(map_window_id, x, y)

Trả về số đối tượng tìm thấy tại điểm có tọa độ (x,y) Với map_window_id là mã của cửa sổ hiện hành

SearchRect()

SearchRect(map_window_id, x1, y1, x2, y2)

Trả về số đối tượng tìm thấy trong hình vuông có tọa độ 2 điểm đầu mút của đường chéo là (x1,y1) và (x2,y2)

Với map_window_id là mã của cửa sổ hiện hành

SearchInfo() (adsbygoogle = window.adsbygoogle || []).push({});

SearchInfo(sequence_number, attribute) Trả về giá trị tùy theo attribute

Với sequence_number là số thứ tự các đối tượng được tìm thấy từ hàm SearchRect() và SearchPoint()

Attribute là các thông số gồm:

 SEARCH_INFO_TABLE: tên bảng chứa đối tượng  SEARCH_INFO_ROW: số ID của đối tượng

Like(): so sánh chuỗi

Like(string, pattern_string, escape_char) Trả về một giá trị đúng hoặc sai

String: đoạn chuỗi cần kiểm tra

pattern_string: Chuỗi mang những kí hiệu đại diện  _ đại diện 1 kí tự

 % đại diện cho nhiều kí tự escape_char: mang giá trị “ ” hoặc “\” Ví dụ:

Like( string_var, "South%", "") Like( string_var, "\_%", "\")

TÀI LIỆU THAM KHẢO

[1] Thạc sĩ Nguyễn Văn Linh. Giải Thuật. Khoa Công Nghệ Thông Tin & Truyền Thông. Năm 2006

[2] Nguyễn Đức Nghĩa, Nguyễn Tô Thành. Toán Rời Rạc. NXB Giáo Dục. Năm 1997.

[3] User Guide, Help MapBasic 9.5 và Mapinfo 10.5

Một phần của tài liệu Công nghệ GIS và ứng dụng với mapinfo (Trang 38)