CHƢƠNG 1 BÀI TOÁN THỰC TẾ VÀ GIS 3D
1.3. GIS-3D và phân tích khơng gian 3 chiều
1.3.5.4. Phân tích GIS trong các phần mềm thƣơng mại
Như chúng ta đã biết, u cầu về các phép Phân tích dữ liệu khơng gian trong các ngành Khoa học Trái đất là rất lớn và cấp thiết để có thể đưa ra những quyết định mang lại hiệu quả kinh tế - xã hội cao. Sau đây, chúng ta sẽ điểm qua một số phần mềm GIS-3D thương mại của các hãng lớn trên thế giới để xem mức độ phát triển của chúng đến đâu và khả năng đáp ứng đối với các yêu cầu này như thế nào.
(1) ArcGIS 3D: Đây là một phần mở rộng của phần mềm ArcGIS 9.2 do hãng
ERSI phát triển. Phần mềm này cho phép ta hiển thị và phân tích hiệu quả dữ liệu bề mặt.
Hình 1.13: Phần mềm ArcGIS 9.
(2) Google Earth: Google Earth có lẽ là phần mềm GIS-3D nổi tiếng nhất mà
bất cứ người dùng Internet nào đều biết tới. Phần mềm này có khả năng thực hiện một khối lượng lớn các phép Phân tích dữ liệu khơng gian 3D trên một dải bản đồ rộng và cung cấp các tính năng tương tác với bản đồ đó.
Hình 1.14: Phần mềm Google Earth.
(3) ArcView: ArcView® là phần mềm hệ thống thơng tin địa lý với đầy đủ chức
năng cho phép biểu diễn, quản lý, xây dựng và phân tích dữ liệu địa lý. Sử dụng ArcView, ta có thể hiểu được bối cảnh địa lý của dữ liệu, cho phép thể hiện các mối quan hệ và nhận dạng các mơ hình theo một cách mới. ArcView giúp cho hàng chục ngàn tổ chức ra những quyết định tốt hơn và giải quyết vấn đề nhanh chóng hơn.
Hình 1.15: Phần mềm ArcView GIS.
Sau đây là bảng tổng kết các chức năng 3D GIS trong mỗi bộ phần mềm:
Nhóm chức năng PTDLKG
Google Earth ArcGIS 3D ArcView
Phân tích bề mặt
- Sử dụng GPS và nhập dữ liệu vào Google Earth.
- Mơ hình địa bề mặt; Tạo mặt cắt; Tính tốn độ dốc, khối lượng, diện tích. - Tạo mơ hình TIN từ tập dữ liệu có giá trị Z; Hiển thị mơ hình TIN theo các biểu tượng khác nhau, chồng dữ liệu vector/ raster vào TIN. - Nội suy đường thẳng để tạo thông tin về bề mặt địa hình (dạng biểu đồ). - Tạo đường thẳng các điểm nhìn trên địa hình. - Tạo bề mặt dạng GRID từ mơ hình TIN. - Tạo bóng địa hình. - Nội suy đường bình độ, nội suy độ dốc từ một lưới độ cao, tính giá trị phần trăm độ dốc ra độ, nội suy hướng phơi địa hình, nội suy bề mặt từ các điểm mang giá trị. - Tính mật độ dân cư.
- Tạo mơ hình TIN từ những dữ liệu có giá trị Z.
Phân tích mạng
- In chi tiết đường đi từ 2 địa điểm khác nhau.
- Cho phép mô phỏng lại hành trình
đi từ điểm này đến điểm kia trên bản đồ.
Trực quan hoá
- Hiển thị độ cao, điểm nhìn.
- Xoay nghiêng, bay đến đối tượng.
- Tham quan địa điểm: mơ phỏng hành trình hoặc chuyến bay qua các địa điểm trong danh sách.
- Quan sát bầu trời. - Trình mơ phỏng bay. - Tạo phim với Google Earth và thay đổi chế độ xem.
- Thay đổi tốc độ xoay của quả địa cầu. - Tạo hoạt ảnh để lưu giữ việc tham quan khung cảnh.
- Biểu diễn dữ liệu 3D, chồng ảnh, xoay địa hình, tăng độ cao địa hình. Kết nối - Xác định khoảng cách từ những vị trí cho trước. - Xác định vùng giới hạn gần nhất. Phân tích hình học
- Đánh dấu địa điểm trên bản đồ.
- Lưu hình ảnh về địa điểm hiện tại.
- Vẽ đường dẫn và đa giác.
- Chỉnh sửa và viết mô tả cho địa điểm.
- Thay đổi độ cao, biểu tượng địa điểm.
- Đo đường hoặc đường đi.
- Đo bán kính đường trịn hoặc đa giác.
- Tính diện tích và thể tích của một bề mặt.
Truy xuất - Tìm kiếm một vị trí trên bản đồ như: tên thành phố, tỉnh, tiểu bang hay quốc gia. - Cho phép tìm cả doanh nghiệp hay trường đại học hoặc một tổ chức phổ biến trên thế giới. - Liên kết với Google Map để xem
thông tin cập nhật. - Cho phép lưu địa
- Hiển thị bản đồ theo các thuộc tính lựa chọn.
- Xem thông tin 3D của từng lớp.
điểm và hành trình để dùng.
- Điều hướng ảnh, thêm ảnh.
- Hiển thị thông tin đường trên bản đồ. - Có chế độ xem phố. - Hiển thị bản đồ địa hình.
- Hiển thị biên giới.
1.3.5.5. Một số phép phân tích khơng gian [2]
(1) Bài toán Hiển thị tọa độ - Ý nghĩa:
Trong một hệ thống thông tin địa lý, việc hiển thị toạ độ của các điểm trên bản đồ là rất quan trọng. Nó giúp ta biết được vị trí chính xác của các đối tượng trên bản đồ để từ đó phục vụ cho các thao tác phân tích phức tạp tiếp theo.
- Mô tả bài tốn:
Chương trình hiển thị một mảnh bản đồ ba chiều, yêu cầu khi người dùng click chuột trên bản đồ thì chương trình sẽ tự động hiển thị tọa độ của điểm trên bản đồ tương ứng với vị trí click của con trỏ chuột. Tọa độ hiển thị là tọa độ trong hệ thống UTM.
- Thuật toán:
Tư tưởng thuật toán rất đơn giản: khi người dùng nhấn chuột trên bản đồ thì bộ cảm biến sự kiện sẽ lưu giữ một xâu gồm các giá trị toạ độ theo các định dạng khác nhau tuỳ theo hệ toạ độ và khung tham chiếu khơng gian đang dùng là gì. Chúng ta chỉ cần lấy các giá trị đó, thực hiện việc tách xâu và in lên màn hình kết quả.
function print(value) { var s = value.split(' ',3); var s2 = s[2]; print(\"Co-ordinate:\") print(\"Lat()= \" + s[0]); print(\"Lon()= \" + s[1]); print(\"ELev()= \" + s[2]); }
Hình 1.16: Hiển thị tọa độ địa lý
(2) Bài tốn Phóng to và thu nhỏ địa hình - Ý nghĩa:
Chúng ta có thể quan sát các đối tượng ở các tỷ lệ độ cao khác nhau và như vậy làm cho thế giới trở nên giống thật hơn. Trong phần này, chúng ta sẽ thực hiện việc tăng giảm tỷ lệ độ cao của đối tượng hay phóng to hoặc thu nhỏ đối tượng.
- Mơ tả bài tốn:
Cho một bản đồ 3D. Hãy thiết kế nút để tăng hoặc giảm độ cao của đối tượng.
- Thuật toán:
Chúng ta thiết kế đối tượng hình cầu và gắn cho chúng sự kiện: Nếu ấn vào nút này thì sẽ đổi trạng thái phóng to hay thu nhỏ, sau đó ấn vào một vị trí bất kỳ trên bản đồ thì sẽ thực hiện một trong hai kiểu sau:
+ Hình cầu “tăng”: tỷ lệ= tỷ lệ + 1 hoặc + Hình cầu “giảm”: tỷ lệ= tỷ lệ - 1
Sau đó tiến hành cập nhật lại khung cảnh theo tỷ lệ mới sửa đổi.
Hình 1.17: Phóng to hoặc thu nhỏ địa hình
(3) Tính khoảng cách gấp khúc - Ý nghĩa:
Việc đo khoảng cách có ý nghĩa quan trọng trong GIS. Nó cho chúng ta biết được độ dài giữa các điểm trong thế giới thực là bao nhiêu. Khoảng cách gấp khúc được định nghĩa là một dãy (x1, x2, x3,…, xn) trong đó các đoạn (xi, xj) là các đoạn thẳng (tính theo đường chim bay). Trong thực tế, người ta rất hay đo khoảng cách gấp khúc này.
- Mơ tả bài tốn:
Cho một bản đồ 3D. Chúng ta tạo đường thẳng gấp khúc bằng cách nhấn vào một điểm trên bản đồ rồi nhấn tiếp vào điểm thứ hai để tạo đoạn thẳng thứ nhất. Tiếp tục nhấn vào điểm thứ ba trên bản đồ và điểm này sẽ được nối với điểm thứ hai để tạo thành đoạn thẳng thứ hai. Cứ tiếp tục như vậy cho đến khi kết thúc. Đoạn thẳng tổng hợp nhận được gọi là đoạn thẳng gấp khúc.
Câu hỏi đặt ra là: Tính khoảng cách gấp khúc đó như thế nào?
- Thuật tốn:
Tư tưởng thuật toán rất đơn giản. Xuất phát từ công thức: với 2 điểm trong không gian 3 chiều: A có tọa độ (x1,x2,x3) và B có tọa độ (y1,y2,y3) thì khoảng cách giữa 2 điểm này là:
Distance = (x1y1)2(x2y2)2(x3y3)2
Để tính khoảng cách gấp khúc, ta cộng dồn các khoảng cách đoạn thẳng là: TotalLength = distance
Để làm đơn giản thuật toán, chúng ta chỉ cần lưu giữ 2 biến d cho khoảng cách đoạn thẳng và td cho khoảng cách gấp khúc. Tương tự, cũng chỉ cần lưu giữ 2 điểm (x1,x2,x3) và (y1,y2,y3). Mỗi lần người dùng nhấn vào một điểm trên bản đồ, chúng ta thực hiện tính tốn khoảng cách và vẽ các đường nối các điểm lại. Thuật tốn có thể được viết như sau:
function tinh_khoang_cach () { var t; if (chuột được nhấn) { Toạ_độ_điểm_cuối = coords; t = coords.split(' ',3); i++; if (i%2==1) { x0=t[0]; x1=t[1]; x2=t[2];
if (i>1) “vẽ đường thẳng nối 2 điểm” }
if (i%2==0) {
y0=t[0]; y1=t[1]; y2=t[2];
if (i>1) “vẽ đường thẳng nối 2 điểm” } // Tính khoảng cách d=Math.sqrt((x0-y0)*(x0-y0)+(x1-y1)*(x1-y1)+(x2-y2)*(x2-y2)); if (i==1) {d=0; td=0;} td = td+d; print(\"Distance()= \" + d); print(\"Total length = \" + td); } } Kết quả:
Hình 1.18: Tính khoảng cách gấp khúc.
Chú ý: Để có thể vẽ đường thẳng lên bản đồ ta cần phải chuyển đổi hệ toạ độ
theo toạ độ của điểm nhìn hiện tại (GeoViewPoint). Cách thức quy đổi ta đã đề cập trong phần đầu của Chương này.
(4) Tính độ dài đường đi thực địa - Ý nghĩa:
Khoảng cách gấp khúc còn khá đơn giản. Trong thực tế, đôi khi ta muốn xấp xỉ độ dài đường đi trên thực địa theo mặt địa hình. Điều này có ý nghĩa vì các đường đi trong thực tế không phải lúc nào cũng ở dạng đoạn thẳng mà đôi khi là dạng đường cong.
- Mô tả bài toán:
Cho một bản đồ 3D. Chúng ta bắt đầu bằng cách nhấn vào một điểm trên bản đồ. Sau đó, mỗi khi con trỏ chuột di chuyển tới một vị trí nào đó thì hệ thống sẽ tự động hiển thị tọa độ con trỏ chuột và khoảng cách từ đó tới vị trí của con trỏ chuột trước đó, cho đến khi chúng ta nhấn vào một điểm trên bản đồ. Khoảng cách từ điểm nhấn đầu tiên và cuối cùng được gọi là độ dài đường đi thực địa. Câu hỏi: Tính độ dài đường đi thực địa đó?
- Thuật tốn:
Thực chất của bài tốn này là việc tính độ dài của tập các đường cong liên tiếp. Đường cong đó có thể là đoạn thẳng như đoạn (a, b) hay (c, d) trong ví dụ bên dưới hay là một parabol (b,c). Khoảng cách đường đi thực địa bằng tổng khoảng
cách các đoạn con. Thực tế, các đường con này có thể ở dạng bậc 1, 2, 3… nên rất phức tạp.
Hình 1.19: Mơ tả về đường đi gấp khúc
Để đơn giản hóa bài tốn, ta xuất phát từ nhận xét sau: Thực tế, các điểm a, b, c hay d ở hình vẽ trên chính là vị trí của con chuột trong các thời điểm t khác nhau: t0, t1, t2, t3. Do các thời điểm t này là tương đối gần nhau (cách nhau vài phần trăm mili giây) cho nên các khoảng cách a,b,c,d là khá sát nhau. Do vậy, chúng ta có thể xấp xỉ các đường cong bậc cao trở về đường cong bậc 1 tức là đoạn thẳng. Và do vậy, khoảng cách theo đường đi thực địa bằng tổng các đoạn thẳng liên tiếp.
Td = D ([a,b]) + D([b,c]) + D([c,d])
Đến đây, bài tốn này lại trở về bài tốn tính khoảng cách gấp khúc mà chúng ta đã xét ở trên.
Chúng ta thiết kế một hàm cal_distance để tính khoảng cách cập nhật và liên tục. Hàm này bao gồm hàm tinh_khoang_cach() đã đề cập trong phần trước và thêm phần vẽ đường thẳng giữa 2 điểm lên bản đồ. Khi vẽ phải chú ý tới việc chuyển hệ toạ độ GeoVRML.
Để mỗi khi ta đưa con trỏ chuột đến vị trí nào thì hàm cal_distance được gọi, ta kết nối các sự kiện:
ROUTE GEOTOUCH.hitGeoCoord_changed TO S.cal_distance ROUTE S.new_child TO GEOLOC_Trans.addChildren
Hình 1.20: Tính khoảng cách thực địa.
(5) Tính tốn độ dốc - Ý nghĩa:
Độ dốc để xác định độ nghiêng của bề mặt và những vị trí có độ dốc thấp phục vụ sản xuất hay xây dựng; cịn những vị trí có độ đốc lớn để ngăn chặn xói mịn hay trượt lở đất.
- Mơ tả bài tốn:
Cho một bản đồ 3D. Kẻ một đoạn thẳng từ hai điểm bất kỳ trên bản đồ, giả sử là A và B.
Câu hỏi: Xác định độ dốc trung bình của vùng giới hạn bởi 2 điểm A và B theo phần trăm thay đổi hay góc lệch thay đổi.
Hình 1.21: Tính tốn độ dốc .
Độ dốc được định nghĩa là tỷ số của trục Y đối với trục X giữa 2 điểm (đạo hàm bậc 1):
Hình 1.22. Mơ tả độ dốc địa hình
Trong ví dụ trên thì độ dốc giữa 2 điểm A - có tọa độ là (1, 2) và B - có toạ độ là (5, 4) là: 2 1 2 1 Y Y 4 2 2 m 50% X X 5 1 4 Nếu tính theo góc lệch thì: arctan (0.5) = 26.5650
Đây chỉ là ví dụ trong không gian 2 chiều. Đối với bản đồ 3D, ta có thuật tốn để xác định độ dốc như sau:
- Tính khoảng cách giữa A và B (độ dài thực tế): dAB
- Xác định tổng độ cao thay đổi dọc theo đoạn AB: AB hmaxhmin
- Khi đó, phần trăm độ dốc thay đổi là:
AB AB a % d - Góc lệch thay đổi là: b = arctan (a)
Điều này có nghĩa là, cứ 100 feet đoạn thẳng nằm trong bề mặt giới hạn bởi A, B thì độ cao lại tăng lên (giảm xuống) a*100 feet.
Chú ý:
- Có thể có cả trường hợp độ dốc khơng thay đổi. Đó là khi ta xét độ dốc trên một mặt núi với các điểm có độ cao như nhau. Trong trường hợp này, thuật tốn vẫn chạy tốt và sẽ cho thơng báo "Độ dốc không đổi".
- Để xác định tổng độ cao thay đổi dọc theo đoạn AB, ta có thể tính theo tọa độ của 2 điểm A và B. Bởi vì trong 2 điểm, sẽ có một điểm có độ cao nhỏ nhất và điểm cịn lại sẽ có độ cao lớn nhất. Nghĩa là:
AB hmax hmin hA hB
Tuy nhiên, ở đây có thể A và B khơng là các điểm lưới mà chỉ nằm trong một ô lưới nào đó thơi. Do vậy, để xác định độ cao của A và B, ta phải xác định xem nó nằm trong ơ lưới nào. Sau đó, tìm hình chiếu của điểm này lên ơ lưới và tính độ cao. Thuật toán này đã được mơ tả trong bài tốn "Tính độ cao tối thiểu của ngọn hải đăng".
- Để tính khoảng cách giữa 2 điểm A và B, ta tham khảo thuật tốn "Tính khoảng cách gấp khúc".
- Trong bản đồ 2D, để xác định tổng độ cao thay đổi dọc theo một đoạn, ta phải xác định độ cao của những điểm mà AB cắt ngang qua đường bình độ. Cách này hơi khác so với trên bản đồ 3D. Nói chung, việc xác định độ dốc trên cả bản đồ 2D và 3D đều có ý nghĩa trong thực tế.
Hình 1.23: Tính độ dốc trong bản đồ 2D
CHƢƠNG 2.
HỆ THỐNG WEBGIS MÃ NGUỒN MỞ
Bằng cách kết hợp nhiều công cụ mã nguồn mở khác nhau, ta có thể được một môi trường phát triển để xây dựng ứng dụng Web GIS. Dưới đây là các thành phần trong hệ thống và vai trò của chúng.
- Sử dụng Minesota MapServer để đưa bản đồ lên Web
- Sử dụng CSDL PosgreSQL và phần mở rộng postGIS để quản trị các dữ liệu thuộc tính và một số kiểu đối tượng hình học.
- Tăng cường trang Web bằng applet Rosa để cung cấp các chức năng tìm kiếm, truy vấn, phóng to, thu nhỏ.
Với kiến trúc hệ thống như trên, sự cộng tác của các chuyên gia phát triển khung ứng dụng, cộng đồng người sử dụng đồng thời như là các cộng tác viên góp phần cung cấp dữ liệu, cho phép xây dựng ứng dụng GIS trên mạng Internet phục vụ lợi ích cộng đồng
Tuy nhiên, mỗi phần mềm trên do các tập thể khác nhau phát triển và việc liên kết chúng để xây dựng một hệ thống hồn chỉnh là khơng đơn giản và dễ dàng như với môi trường Window.