Đề tài Nghiên cứu chuyển đổi phần mềm grass từ nền unix lên windows

Tài liệu Đề tài Nghiên cứu chuyển đổi phần mềm grass từ nền unix lên windows: KH OA C NT T – Đ H KH TN Lời Cảm Ơn Lời Cảm Ơn W X Luận văn của chúng em sẽ rất khó hoàn thành nếu không có sự truyền đạt kiến thức quí báu và sự hướng dẫn tận tình của Thầy Dương Anh Đức. Chúng em xin chân thành cám ơn sự chỉ bảo của các thầy. Chúng con xin gửi tất cả lòng biết ơn, sự kính trọng đến ông bà, cha mẹ, cùng toàn thể gia đình, những người đã nuôi dạy, đã cho chúng con niềm tin và nghị lực để vượt qua mọi khó khăn. Chúng em xin trân trọng cám ơn quý Thầy cô trong Khoa Công nghệ thông tin trường Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh đã tận tình giảng dạy, truyền đạt những kiến thức quý báu và tạo điều kiện cho chúng em được thực hiện luận văn này. Xin chân thành cám ơn sự giúp đỡ, động viên và chỉ bảo rất nhiệt tình của các anh chị đi trước và tất cả bạn bè. Các anh chị, các bạn luôn có mặt trong những thời điểm khó khăn nhất, tiếp thêm động lực và ý chí, giúp chúng tôi hoàn thành được luận văn. Mặc dù đã cố gắng nỗ lực hết sứ...

pdf157 trang | Chia sẻ: hunglv | Lượt xem: 1270 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Nghiên cứu chuyển đổi phần mềm grass từ nền unix lên windows, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
KH OA C NT T – Đ H KH TN Lời Cảm Ơn Lời Cảm Ơn W X Luận văn của chúng em sẽ rất khĩ hồn thành nếu khơng cĩ sự truyền đạt kiến thức quí báu và sự hướng dẫn tận tình của Thầy Dương Anh Đức. Chúng em xin chân thành cám ơn sự chỉ bảo của các thầy. Chúng con xin gửi tất cả lịng biết ơn, sự kính trọng đến ơng bà, cha mẹ, cùng tồn thể gia đình, những người đã nuơi dạy, đã cho chúng con niềm tin và nghị lực để vượt qua mọi khĩ khăn. Chúng em xin trân trọng cám ơn quý Thầy cơ trong Khoa Cơng nghệ thơng tin trường Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh đã tận tình giảng dạy, truyền đạt những kiến thức quý báu và tạo điều kiện cho chúng em được thực hiện luận văn này. Xin chân thành cám ơn sự giúp đỡ, động viên và chỉ bảo rất nhiệt tình của các anh chị đi trước và tất cả bạn bè. Các anh chị, các bạn luơn cĩ mặt trong những thời điểm khĩ khăn nhất, tiếp thêm động lực và ý chí, giúp chúng tơi hồn thành được luận văn. Mặc dù đã cố gắng nỗ lực hết sức mình, song chắc chắn luận văn khơng khỏi cịn nhiều thiếu sĩt. Chúng em rất mong nhận được sự thơng cảm và chỉ bảo tận tình của quý Thầy cơ và các bạn. Tp.HCM, 7/2004 Nhĩm sinh viên thực hiện Nguyễn Quý Minh – Phạm Anh Vũ Trang 1 KH OA C NT T – Đ H KH TN Lời nĩi đầu Lời Nĩi Đầu [ \ Ngày nay, trong tất cả các lãnh vực của đời sống kinh tế, xã hội, cơng nghệ thơng tin được xem là một trong những ngành cơng nghệ mũi nhọn, đĩng vai trị hết sức quan trọng, cĩ thể tạo ra những bước đột phá mạnh mẽ. Các ứng dụng GIS ngày càng phát huy vai trị quan trọng trong việc hỗ trợ quản lý, qui hoạch đặc biệt là đối với các tổ chức, chính phủ. Vấn đề qui hoạch ở Việt Nam, cũng như ở nhiều quốc gia khác, đang gặp rất nhiều khĩ khăn, tốn nhiều thời gian và tiền bạc, nhất là đối với các thành phố lớn, trọng điểm như TP Hồ Chí Minh, Hà Nội, Hải Phịng ... Giải pháp cần thiết là một ứng dụng GIS hỗ trợ. Việc bắt tay xây dựng từ đầu một ứng dụng GIS cần rất nhiều thời gian, tiền bạc và cơng sức nhưng chưa chắc thành cơng. Trên thị trường cũng cĩ những ứng dụng GIS thương mại, cho phép xây dựng ứng dụng trên nền thư viện cung cấp sẵn như ArcView GIS, ArcGIS .. , tuy nhiên sẽ phải đối mặt với vấn đề bản quyền, tốn rất nhiều tiền bạc khi triển khai trên diện rộng. GRASS là một phần mềm GIS cĩ chức năng, sức mạnh bằng hoặc vượt các sản phẩm thương mại nhưng điều đặc biệt là một ứng dụng mã nguồn mở, tức người sử dụng cĩ thể tự mình tịan quyền cài đặt, sữa chữa phù hợp với nhu cầu và đặc điểm riêng của mình mà khơng phải trả chi phí bản quyền phần mềm. Điều hạn chế hiện nay là GRASS chỉ được phát triển trên nền UNIX. Nếu cĩ thể chuyển đổi GRASS sang Windows, ta cĩ thể xây dựng được nhiều ứng dụng GIS với chi phí rẻ, phù hợp để phổ biến trên diện rộng do Windows là hệ điều hành dễ sử dụng, thân thiện và cĩ số lượng người dùng nhiều nhất hiện nay. Với ý tưởng trên, chúng em đã tập trung thực hiện đề tài “NGHIÊN CỨU CHUYỂN ĐỔI PHẦN MỀM GRASS TỪ NỀN UNIX LÊN WINDOWS”. Trang 2 KH OA C NT T – Đ H KH TN Lời nĩi đầu Nội dung của luận văn được chia làm 5 chương: Chương 0: Mở đầu giới thiệu chung về đề tài, ý nghĩa và các mục tiêu của đề tài; trình bày các giải pháp và hướng nghiên cứu đã được thực hiện trong và ngồi nước. Chương 1: .OpenGIS – Khái niệm chung và Các mơ hình dữ liệu, giới thiệu chung về các khái niệm GIS, OpenGIS, các mơ hình dữ liệu trên GIS. Chương 2: Hệ Thống Hỗ trợ Phân tích Tài nguyên Địa lý, trình bày về phần mềm mã nguồn mở GRASS, cách thức cài đặt và khởi tạo, cách thức sử dụng và lập trình trên GRASS. Chương 3: Quá trình chuyển đổi GRASS từ Unix lên mơi trường Window, các kỹ thuật cài đặt trong GRASS, mơ hình và cấu trúc chi tiết của GRASS, các bộ thư viện trung tâm. Chương 4: Tổng kết tĩm tắt lại các vấn đề đã được đặt ra trong luận văn, cách giải quyết, kết quả đạt được và đề ra một số hướng phát triển trong tương lai. Trang 3 KH OA C NT T – Đ H KH TN Mục lục Mục Lục Lời Cảm Ơn ................................................................................................................................ 1 Lời Nĩi Đầu ................................................................................................................................ 2 Mục Lục...................................................................................................................................... 4 Danh sách các hình vẽ ................................................................................................................ 6 Chương 0 : Mở Đầu .................................................................................................................... 7 Chương 1 : OpenGIS – Khái niệm chung và Các mơ hình dữ liệu .......................................... 8 1.1 Giới thiệu về GIS .............................................................................................................. 8 1.1.1 Định nghĩa GIS .......................................................................................................... 8 1.1.2 Các thành phần của GIS........................................................................................... 10 1.1.3 Các mơ hình dữ liệu của GIS.................................................................................. 11 1.1.4 Vấn Đề Dữ Liệu Đối Với GIS ................................................................................. 12 1.2 Khái Quát Về OpenGIS .................................................................................................. 14 1.2.1 Tổ chức OGC........................................................................................................... 14 1.2.2 Định nghĩa OpenGIS ............................................................................................... 16 Chương 2 : Hệ Thống Hỗ trợ Phân tích Tài nguyên Địa lý..................................................... 17 2.1 Sơ lược về GRASS ......................................................................................................... 17 2.2 Kiến trúc GRASS............................................................................................................ 19 2.3 Định dạng dữ liệu .......................................................................................................... 20 2.4 Tổ chức lưu trữ dữ liệu của GRASS............................................................................... 23 2.4.1 GISDBASE :............................................................................................................ 23 2.4.2 LOCATION : ........................................................................................................... 23 2.4.3 MAPSETS ............................................................................................................... 24 2.4.4 REGION và MASK................................................................................................ 29 2.4.5 Các biến mơi trường sử dụng trong GRASS ........................................................... 31 2.5 Dữ liệu RASTER ............................................................................................................ 32 2.5.1 Ý niệm sơ lược......................................................................................................... 32 2.5.2 Hệ thống tập tin raster............................................................................................. 34 2.5.3 Các thao tác quan trọng ........................................................................................... 34 2.6 Dữ liệu VECTOR (VECTOR DATA)............................................................................ 35 2.6.1 Ý niệm sơ lược......................................................................................................... 35 2.6.2 Hệ thống tập tin vector............................................................................................ 36 2.6.3 Các thao tác quan trọng ........................................................................................... 37 2.7 Dữ liệu điểm (POINT/SITE DATA) .............................................................................. 38 2.7.1 Ý niệm sơ lược......................................................................................................... 38 2.7.2 Hệ thống tập tin site ................................................................................................ 39 2.7.3 Các thao tác quan trọng ........................................................................................... 40 2.8 Các thư viện được cung cấp bởi GRASS (src/libes)....................................................... 41 2.8.1 Danh sách................................................................................................................. 41 2.8.2 Giới thiệu sơ bộ hàm và thư viện............................................................................. 43 2.9 Cơ chế bổ sung và quản lý mã nguồn của GRASS......................................................... 95 Trang 4 KH OA C NT T – Đ H KH TN Mục lục 2.9.1 Mã nguồn chính thức (thư mục src)......................................................................... 96 2.9.2 Mã nguồn ALPHA (thư mục src.alpha)................................................................... 96 2.9.3 Mã nguồn đĩng gĩp (thư mục src.contrib) .............................................................. 96 2.9.4 Mã nguồn cĩ liên quan (thư mục src.related) .......................................................... 97 2.9.5 Mã nguồn GARDEN (src.garden) ........................................................................... 97 2.9.6 Các script (src/script/shell) ...................................................................................... 97 2.10 Hướng dẫn cài đặt và sơ lược cách sử dụng ................................................................. 97 2.10.1 Cài đặt GRASS trên LINUX ................................................................................. 97 2.10.2 Cài đặt GRASS trên Windows thơng qua giả lập Cygwin .................................... 99 Chương 3 : Quá trình chuyển đổi GRASS5 từ Linux lên Windows..................................... 101 3.1 Sự khác biệt giữa Windows và Unix/Linux.................................................................. 101 3.1.1 Tổng quan về hệ điều hành Windows.................................................................... 101 3.1.2 Tổng quan về hệ điều hành UNIX......................................................................... 103 3.1.3 So sánh tổng quát về lập trình đa nhiệm trên hai mơi trường................................ 105 3.1.4 So sánh về hệ thống file của hai mơi trường ......................................................... 109 3.1.5 Giao diện người dùng ............................................................................................ 112 3.1.6 Shell và script......................................................................................................... 113 3.2 Sơ lược về phần mềm GRASS ..................................................................................... 113 3.3 Sơ lược về mã nguồn của GRASS 5.0.2....................................................................... 114 3.4 Mơi trường sử dụng để chuyển đổi GRASS5 ............................................................... 115 3.5 Các vấn đề chính khi chuyển đổi lên Windows........................................................... 116 3.5.1 Khởi tạo các biến mơi trường cần thiết................................................................. 116 3.5.2 Dữ Liệu GRASS và Cấu trúc của dữ liệu GRASS ............................................... 119 3.5.3 Cấu trúc chung của source code GRASS.............................................................. 121 3.5.3.1 Cài đặt bộ thư viện trung tâm ............................................................................. 122 3.5.3.2 Cài đặt các nhĩm lệnh xử lý của Grass............................................................... 124 3.5.3.3 Các Driver dùng để hiển thị của Display............................................................ 129 3.5.3.4 Cơ chế SendMessage trong GRASS5................................................................ 132 3.5.3.5 Khái niệm hệ thống đồ họa XWindow trong Linux .......................................... 143 3.5.3.6 Cài đặt và sử dụng các hàm X (Xlib) trên Window32....................................... 147 Chương 4 : Tổng Kết .............................................................................................................. 152 4.1 Kết Luận ....................................................................................................................... 152 4.2 Hướng Phát Triển ......................................................................................................... 152 Tài Liệu Tham Khảo............................................................................................................... 153 Phụ Lục ................................................................................................................................... 154 Trang 5 KH OA C NT T – Đ H KH TN Danh sách các hình vẽ Danh sách các hình vẽ Hình 1 - 1 Minh họa về GIS ..................................................................................... 11 Hình 2 - 1 Mơ hình kiến trúc GRASS ...................................................................... 20 Hình 2 - 2 Minh họa cấu trúc lưu trữ của GISDBASE trên đĩa................................ 23 Hình 2 - 3 Minh họa cấu trúc lưu trữ của LOCATION trên đĩa............................... 24 Hình 2 - 4 Minh họa cấu trúc lưu trữ của MAPSET trên đĩa.................................... 25 Hình 2 - 5 Minh họa cơ chế MASK của GRASS ..................................................... 31 Hình 2 - 6 Minh họa dữ liệu điểm – POINT/SITE ................................................... 39 Hình 2 - 7 Hình ảnh sử dụng GRASS5 trên Linux................................................... 99 Hình 2 - 8 Hình ảnh sử dụng GRASS5 trên Windows thơng qua giả lập Cygwin. 100 Hình 3 - 1 Kiến trúc của hệ điều hành Windows theo họ NT................................ 103 Hình 3 - 2 Các dịng hệ điều hành phát triển trên nền UNIX ................................ 104 Hình 3 - 3 Kiến trúc của hệ điều hành UNIX ........................................................ 105 Hình 3 - 4 Mơ hình minh họa cơ chế Send Event trong GRASS5 ........................ 138 Hình 3 - 5 Kiến trúc thư viện XLIB....................................................................... 151 Trang 6 KH OA C NT T – Đ H KH TN Chương 0: Mở đầu Chương 0 : Mở Đầu Các ứng dụng GIS ngày càng phát huy vai trị quan trọng trong việc hỗ trợ quản lý, qui hoạch đặc biệt là đối với các tổ chức, chính phủ. Vấn đề qui hoạch ở Việt Nam, cũng như ở nhiều quốc gia khác, đang gặp rất nhiều khĩ khăn, tốn nhiều thời gian và tiền bạc, nhất là đối với các thành phố lớn, trọng điểm như TP Hồ Chí Minh, Hà Nội, Hải Phịng ... Giải pháp cần thiết là một ứng dụng GIS hỗ trợ. Từ nhu cầu nĩi trên, chúng em đã đầu tư xây dựng đề tài “NGHIÊN CỨU CHUYỂN ĐỔI PHẦN MỀM GRASS TỪ NỀN UNIX LÊN WINDOWS”. Đề tài phải giải quyết một số cơng việc chính: • Nghiên cứu GIS và chuẩn OpenGIS. • Nghiên cứu sự khác nhau giữa hệ điều hành Unix và Windows. • Dựa vào những hiểu biết này, xem xét việc xây dựng một ứng dụng GIS trên nền phần mềm mã nguồn mở GRASS. • Triển khai việc chuyển đổi GRASS từ mơi trường Unix sang mơi trường Windows. Trang 7 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm Chương 1 : OpenGIS – Khái niệm chung và Các mơ hình dữ liệu Chương này trình bày khái quát về GIS và những vấn đề tồn tại liên quan đến trao đổi dữ liệu GIS trong mơi trường mạng dẫn đến nhu cầu xuất hiện OpenGIS. Các khái niệm và chủ đề liên quan đến OpenGIS, vai trị của tổ chức OGC (Open GIS Consortium), mơ hình tham chiếu ORM (OpenGIS Refrerence Model), và các bộ đặc tả về OpenGIS được đề xuất bởi OGC là những phần chính được đề cập đến trong chương này. 1.1 Giới thiệu về GIS 1.1.1 Định nghĩa GIS Hệ thống thơng tin địa lý, gọi tắt là GIS (Geographic Information System) ra đời từ đầu thập niên 60. Tuy nhiên mãi đến thập niên 80, GIS mới thực sự được phát triển nhanh chĩng. Cho đến nay, tuỳ theo cách tiếp cận mà người ta cĩ nhiều định nghĩa khác nhau về GIS. Những định nghĩa này bổ sung cho nhau giúp ta hiểu đầy đủ hơn các khía cạnh của GIS. Sau đây là một số định nghĩa của GIS được trích theo Peter & Rachael (1998): GIS là một tập các cơng cụ mạnh dùng cho việc thu nhập, lưu trữ cũng như truy tìm, biến đổi và hiển thị các dữ liệu khơng gian từ thế giới thực (Burrough, 1986) • • • GIS là một hệ thống dùng cho việc nắm bắt, kiểm tra, thao tác, phân tích và hiển thị các dữ liệu qui chiếu khơng gian liên quan đến Trái đất (Department of Environment, 1987) GIS là cơng nghệ thơng tin cho phép lưu trữ, phân tích, và hiển thị cả dữ liệu Trang 8 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm khơng gian lẫn dữ liệu phi khơng gian (Parker, 1988) GIS là hệ thống cơ sở dữ liệu trong đĩ phần lớn dữ liệu biểu thị khơng gian, và tập các thủ tục thao tác trên những dữ liệu này nhằm trả lời những truy vấn về các thực thể khơng gian chứa trong cơ sở dữ liệu (Smith et al,. 1987) • • • • • • • • • GIS là tập các thủ tục thủ cơng hoặc dựa trên máy tính được dùng để lưu trữ và thao tác các dữ liệu tham chiếu địa lý (Aronoff, 1989) GIS là tập các chức năng được thực hiện một cách tự động nhằm cung cấp những năng lực cấp cao đối với sự lưu trữ, truy tìm, thao tá và hiển thị các dữ liệu vị trí địa lý (Ozemoy, Smith, & Sicherman, 1981) GIS là một thực thể tổ chức, phản ánh cấu trúc tổ chức cho phép tích hợp cơng nghệ với cơ sở dữ liệu và các chuyên gia, và tổ chức này liên tục hỗ trợ tài chính (Carter, 1989) GIS là hệ thống hỗ trợ quyết định liên quan đến sự tích hợp dữ liệu quy chiếu khơng gian trong một mơi trường giải quyết vấn đề (Cowen, 1988) Thơng qua các định nghĩa trên, ta thấy được ba khía cạnh quan trọng của một hệ thống GIS bao gồm: Tập các cơng cụ hoặc thủ tục cho phép thực hiện các chức năng lưu trữ, truy tìm, biến đổi, phân tích và hiển thị dữ liệu khơng gian địa lý. Cơ sở dữ liệu là thành phần quan trọng chức các dữ liệu khơng gian kết hợp dữ liệu phi khơng gian. Tổ chức nhằm phối hợp kỹ thuật và con người để cĩ thể duy trì và phát triển hệ thống nhằm đưa ra những quyết định hợp lý. Trang 9 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm 1.1.2 Các thành phần của GIS Cĩ nhiều mơ hình GIS tuỳ theo nhu cầu của người dùng. Mơ hình đầy đủ của GIS bao gồm sáu thành phần: phần cứng, phần mềm, dữ liệu, qui trình, con người và tổ chức. Những thành phần này cần phải kết hợp cân đối nhau để hệ thống làm việc hiệu quả. Phần cứng GIS bao gồm hệ thống máy tính hoặc mạng máy tính cho phép nhập, xuất, lưu trữ, truyền và hiển thị dữ liệu khơng gian. • • • • • • Phần mềm GIS bao gồm những cơng cụ thực hiện năm chức năng chính là nhập và kiểm tra dữ liệu, lưu trữ quản lý dữ liệu, xuất và thể hiện dữ liệu, biến đổi phân tích dữ liệu, và giao tiếp với người sử dụng. Dữ liệu GIS bao gồm dữ liệu khơng gian và dữ liệu phi khơng gian với dung lượng rất lớn, cần được thu nhập và lưu trữ theo một cấu trúc chuẩn để thuận tiện cho việc trao đổi và bảo quản. Các qui trình xử lý được xác lập trong quá trình phân tích và thiết kế hệ thống GIS cho một tổ chức với các mục tiêu cụ thể. Khả năng xây dựng và triển khai các qui trình ảnh hưởng đến tính hữu hiệu của hệ thống GIS. Con người là yếu tố quyết định sự thành cơng của hệ thống GIS. Con người bao gồm các kỹ thuật viên, chuyên viên cơng nghệ thơng tin, nhà quản trị hệ thống và người sử dụng các kết quả của GIS để ra quyết định. Tất cả những thành phần trên cần được đặt trong một tổ chức thích hợp, cĩ các cơ chế, chính sách và qui trình hợp lý. Trang 10 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm Hình 1 - 1 Minh họa về GIS 1.1.3 Các mơ hình dữ liệu của GIS Trong GIS, các thực thể trong thế giới thực cĩ thể được biểu diễn bằng những mơ hình dữ liệu khác nhau nhằm mơ tả các thuộc tính, vị trí, thời gian và quan hệ khơng gian giữa chúng. Các thực thể khi được biểu diễn trong mơ hình dữ liệu thường được gọi là các đối tượng. Để biểu diễn vị trí và quan hệ của các đối tượng trong khơng gian địa lý, người ta dùng mơ hình vector hoặc mơ hình raster. Mơ hình phân cấp, mơ hình mạng hoặc mơ hình quan hệ thì được dùng để biểu diễn các thuộc tính của các đối tượng. Trong cơ sở dữ liệu địa lý, các thuộc tính sẽ được liên kết với các đối tượng tương ứng trong mơ hình vector hoặc raster. Mỗi một mơ hình đều cĩ ưu điểm và nhược điểm riêng, và cĩ thể cĩ nhiều cấu trúc dữ liệu, mỗi cấu trúc dữ liệu cĩ thể được lưu trữ bằng nhiều định dạng khác nhau. Trang 11 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm Mơ hình vector Trong mơ hình vector, mỗi đặc trưng địa lý trên mặt đất được xác định bằng những điểm, đường và vùng trong mặt phẳng toạ độ Descartes. Mỗi điểm được xác định bởi cặp toạ độ (x,y), mỗi đường được tuyến tính hố thành nhiều đoạn biểu diễn bằng một chuỗi những cặp toạ độ (xi, yi), mỗi vùng được xác định bởi một đường khép kính và được biểu diễn bằng một chuỗi các cặp tọa độ (xi, yi) cĩ các tọa độ điểm đầu và điểm cuối trùng nhau. Mơ hình raster Trong mơ hình raster, khơng gian được chia thành những phần tử nhỏ cịn được gọi là tế bào. Mỗi tế bào được xem như đồng nhất, cùng một thuộc tính và được biểu diễn như một điểm. Kích thước của mỗi tế bào được đặc trưng bởi độ phân giải.Cĩ thể hình dung dữ liệu raster như là một tấm lưới phủ lên một địa thế nào đĩ trong thế giới thực, và mỗi ơ trong lưới cĩ một mã số đặc trưng cho một ý nghĩa nào đĩ của vùng nằm bên trong ơ đĩ. Một đặc điểm của cấu trúc raster là một lưới raster như vậy chỉ biểu diễn được một thuộc tính àno đĩ của đối tượng thơi, vì mỗi tế bào trong lưới chỉ được gán bởi duy nhất một giá trị thuộc tính. Do vậy, người ta thường tạo nhiều lớp lưới raster khác nhau để biểu diễn nhiều thuộc tính cho cùng một đối tượng, mỗi lớp cho mỗi thuộc tính. 1.1.4 Vấn Đề Dữ Liệu Đối Với GIS Hiện nay trên thị trường cĩ rất nhiều sản phẩm phần mềm GIS. Một số phần mềm GIS được xây dựng trên mơ hình dữ liệu vector (mơ hình thơng dụng), một số khác xây dựng trên mơ hình raster, và một số khác nữa xây dựng trên cả hai mơ hình. Với mỗi mơ hình được chọn, các hãng sản xuất phần mềm GIS lại cĩ những biễu diễn vật lý riêng của mình ở thiết kế bên trong nhằm tối ưu hĩa việc lưu trữ, xử lý cũng như hiển Trang 12 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm thị dữ liệu. Bên cạnh đĩ, các tổ chức cũng đưa ra những dạng thức riêng của họ để thuận tiện cho việc ghi nhận và trao đổi dữ liệu địa lý của tổ chức. Để lưu trữ dữ liệu khơng gian địa lý theo kiểu vector, phần mềm GIS ArcInfo dùng dạng thức tập tin .shp, AutoCAD dùng .dwg, Autodesk Map dùng .dxf, MapInfo dùng .mif, MicroStation dùng .dng, … Cịn tổ chức US Geological Survey dùng dạng thức DLG (Digital Line Graph), Chính phủ US dùng SDTS (Spatial Data Transfer System), tổ chức US Census Bureau dùng TIGER (Topologically Integrated Geographic Encoding and Referencing Files), … (cĩ thể tham khảo thêm tại Đặng Văn Đức, 2001, trang 202-204). Tương tự với kiểu raster, nhiều dạng thức tập tin khác nhau cũng được sử dụng cho việc lưu trữ dữ liệu, đặc biệt là những dữ liệu bản đồ được số hĩa từ các thiết bị chuyên dụng hoặc từ các ảnh chụp viễn thám. Chẳng hạn, các dạng thức PCX (PC PaintBrush Exchange), TIFF (Tagged Image File Format) thường được dùng cho các ảnh raster tạo được từ máy quét hoặc các chương trình vẽ PC, dạng thức ADRG (Arc Digitized Raster Graphics) được dùng bởi Quân đội US lưu các ảnh raster của bản đồ giấy, dạng thức BIL (Band Interleaved by Line) và BIP (Band Interleaved by Pixel) được dùng cho các hệ thống viễn thám. Về việc liên kết dữ liệu khơng gian địa lý với dữ liệu thuộc tính (cịn gọi là dữ liệu phi khơng gian) trong hệ GIS cũng cĩ nhiều mơ hình khác nhau. Chẳng hạn, MapInfo lưu dữ liệu khơng gian vào tập tin dạng .mif, dữ liệu thuộc tính vào tập tin dạng .mid, và cả hai tập tin này đều thuộc về MapInfo. Kiểu lưu trữ này của MapInfo được xem là kiến trúc tích hợp của hệ GIS (Đặng Văn Đức, 2001, trang 202). Cịn ArcInfo lưu dữ liệu khơng gian vào tập tin dạng .dhp, và dùng tập tin dang .dbf vay mượn từ cơ sở dữ liệu quan hệ thương mại để lưu dữ liệu thuộc tính. Đây được xem là kiến trúc đối ngẫu của hệ GIS (Đặng Văn Đức, 2001, trang 199). Ngồi ra, một mẫu kiến trúc tích hợp khác của hệ GIS nữa là một số cơ sở dữ liệu quan hệ thương mại truyền thống nay được mở Trang 13 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm rộng thêm để cĩ thể hỗ trợ việc lưu trữ và xử lý dữ liệu khơng gian địa lý. Ví dụ cơ sở dữ liệu Oracle nay cĩ thêm phần Oracle Locator và Oracle Spatial. Sự đa dạng về mơ hình và cấu trúc dữ liệu dùng trong GIS một mặt cho thấy được sự sáng tạo của con người nhằm đáp ứng nhu cầu sử dụng và phát triển các ứng dụng GIS, nhưng mặt khác cũng kéo theo những khĩ khăn nhất định trong việc truyền thơng, trao đổi cũng như tích hợp dữ liệu GIS. Để giải quyết vấn đề trao đổi dữ liệu GIS, một cách truyền thống người ta thường xây dựng thêm các thành phần phần mềm làm nhiệm vụ chuyển đổi giữa các dạng thức dữ liệu, thường được gọi là các bộ chuyển đổi (converter). Các bộ chuyển đổi này hoặc được tích hợp trực tiếp vào các phần mềm GIS thương mại và thể hiện ở các chức năng import/export, hoặc được cung cấp bởi một bên “thứ ba” trung gian nào đĩ. Ngày này với sự phát triển của mạng máy tính nĩi chung và mạng Internet nĩi riêng, các nhu cầu thừa kế, trao đổi, tích hợp và khai thác dữ liệu GIS từ nhiều nguồn khác nhau giữa các tổ chức, cộng đồng và quốc gia trong mơi trường mạng ngày càng gia tăng và cĩ ý nghĩa. Việc thi hành các tác vụ chuyển đổi dữ liệu theo kiểu truyền thống khơng được xem là hiệu quả và thuận tiện cho lắm đối với người sử dụng. Người ta cần tìm ra giải pháp mang tính hệ thống và chuẩn mực hơn nhằm đêm lại sự thuận lợi lâu dài và bền vững cho những người khai thác GIS. 1.2 Khái Quát Về OpenGIS 1.2.1 Tổ chức OGC Tổ chức Liên hiệp OpenGIS, gọi tắt là OGC (Open GIS Consortium), là một tổ chức phi lợi nhuận và mang tính quốc tế, được thành lập vào nằm 1994 nhằm giải quyết các vấn đề liên quan đến sự trao đổi chia sẽ các dữ liệu khơng gian địa lý và khả năng làm việc phối hợp giữa các phần mềm GIS. Các hoạt động của OGC tạo ra những ảnh hưởng cĩ ý nghĩa đến cộng đồng GIS và việc thiết kế các hệ thống GIS trong tương lai. Trang 14 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm Nhận xét về vấn đề dữ liệu đối với GIS, OGC cho rằng: “Hiện trên Web và trong các kho lưu trữ độc lập cĩ nhiều dữ liệu khơng gian địa lý, nhưng chúng quá phức tạp, khơng đồng nhất và khơng tương thích nhau. Người dùng cần phải cĩ kiến thức chuyên mơn và các phần mềm GIS chuyên biệt để bao phủ hoặc kết hợp các lớp bản đồ khác nhau của cùng một vùng địa lý. Việc chuyển đổi dữ liệu thường nặng nề và mất nhiều thời gian, nhưng kết quả lại khơng được như ý. Chỉ cĩ giao tiếp chung là cách cho phép sự bao phủ và kết hợp các loại thơng tin địa lý phức tạp khác nhau xảy ra một cách tự động trên Internet, bất chấp những khác biệt nằm phía dước các hệ thống phần mềm GIS. OGC cung cấp cấu trúc hình thức để đạt được sự thống nhất về các giao tiếp chung này.” (David Blasby) Trên cơ sở nhận định này, mục tiêu bao trùm và dài hạn của OGC là: “The full integration of geospatial data and geoprocessing resources into mainstream computing and the widespread use of interoperable geoprocessing software and geodata products throughtout the information infrastructure.” (Open GIS Consortium Inc., 1999, Topic 0) Tạm dịch: “Tích hợp hồn chỉnh các dữ liệu khơng gian địa lý và các cách xử lý thơng tin địa lý vào một luồng tính tốn chính, và sử dụng phổ biến các sản phẩm dữ liệu địa lý và phần mềm xử lý thơng tin địa lý trong suốt cơ sở hạ tầng về thơng tin.” (Open GIS Consortium., 1999, Topic 0) Theo ESRI (2003), việc tích hợp vào luồng tính tốn chính mang ý nghĩa mở rộng phạm vi trao đổi ứng dụng GIS ở mức tổ chức lớn hơn, chia sẽ dữ liệu khơng gian địa lý khơng chỉ giữa các cơng nghệ GIS mà cịn với các ứng dụng khơng phải GIS trên những nền tảng khác nhau, và khả năng làm việc phối hợp giữa các chuẩn GIS với các chuẩn IT cơng nghiệp. Trang 15 KH OA C NT T – Đ H KH TN Chương 1: OpenGis – Các khái niệm Cơng việc của OGC là xây dựng và cơng bố các đặc tả mang tính mở cho các giao tiếp, lược đồ và kiến trúc nhằm thúc đẩy khả năng tương thích giữa các kho dữ liệu khơng gian địa lý, các ứng dụng và dịch vụ GIS khơng đồng nhất. 1.2.2 Định nghĩa OpenGIS Các đặc tả mở được tạo bởi OGC được gọi là các đặc tả OpenGIS (Open GIS Specifications). Vậy Open GIS là gì? OpenGIS được định nghĩa là: “Open and interoperable geoprocessing” or “The ability to share heterogeneous geodata and geoprocessing resources transparently in a networked environment.” (David, 2000) Tạm dịch: “Việc xử lý dữ liệu địa lý phải cĩ tính mở và cĩ khả năng làm việc liên thơng” hoặc “Khả năng chia sẻ một cách trong suốt các dữ liệu địa lý khơng đồng nhất và các tài nguyên xử lý về mặt địa lý trong mơi trường mạng.” (Dương Anh Đức) Hai khái niệm “mở” (open) và “khả năng làm việc liên thơng” (interoperability) là hai khái niệm trung tâmcủa OpenGIS. Mở được hiểu là nhiều thành phần tham gia soạn thảo các đặc tả, và các kết quả đặc tả được tự do tham khảo và sử dụng. • • Khả năng làm việc liên thơng là khả năng tương thích của các ứng dụng nhằm khắc phục những trở ngại do sự khơng dồng nhất các mơi trường xử lý cũng như sự khơng đồng nhất về dữ liệu. Tĩm lại, cĩ thể nĩi rằng các đặc tả OpenGIS được xây dựng nhằm giúp cho việc truy cập các dữ liệu khơng gian địa lý và các dịch vụ xử lý dữ liệu trở nên trong suốt trong mơi trường làm việc mạng. Trang 16 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Chương 2 : Hệ Thống Hỗ trợ Phân tích Tài nguyên Địa lý Chương 2 giới thiệu về phần mềm GRASS (The Geogaphic ResourcesAnalysis Support System), là một hệ thống hỗ trợ phân tích tài nguyên địa lý. Đề cập một cách khái quát về khía cạnh sử dụng cũng như trong lãnh vực lập trình . 2.1 Sơ lược về GRASS Là một hệ thống thơng tin địa lý (GIS – Geographic information system), phát triển theo chuẩn của OpenGIS, nguyên gốc được thiết kế và phát triển bởi những nhà nghiên cứu tại Phịng Thí nghiệm Xây dựng của quân đội Mỹ (US Army Construction Engineering Research Laboratory - USACERL) và ngày nay, nĩ được hỗ trợ bởi nhĩm phát triển GRASS cĩ tổng hành dinh tại ITC-irst, Trento Italy) và Đại học Baylor, Waco (Mỹ). GRASS là một phần mềm mã nguồn mở (GNU – General Public Licence), được phát hành lần đầu năm 1985. Phát triển trong hơn 20 năm qua, kích thước GRASS vào khoảng 100 MB và là một bộ thư viện lớn để phục vụ việc xây dựng các ứng dụng GIS. GRASS được viết bằng ngơn ngữ C (khoảng 1,5 triệu dịng mã lệnh) và cĩ thể được biên dịch trên các hệ điều hành phát triển trên nền Unix như SUN Solaris, SunOS, HP, SCO, Linux, DEC Alpha v.v.. và cĩ thể chạy trên Windows thơng qua mơi trường giả lập Cygwin (chương trình giả lập LINUX/UNIX trên nền Windows) GRASS cĩ khả năng lưu trữ, phân tích và hiển thị một cách sinh động dữ liệu khơng gian đã được số hố. Hiện tại, phiên bản GRASS đã ra đến 5.x và là một trong mười phần mềm mã nguồn mở cĩ qui mơ lớn nhất hiện nay . Đã cĩ nhiều tổ chức, chính phủ, trường học và cơng ty sử dụng thư viện GRASS để phát triển những ứng dụng chuyên biệt cho riêng mình. Trang 17 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Những đối tượng GRASS hướng đến là các nhà qui hoạch, sinh thái học, địa chất học, địa lý học và những kỹ sư trắc địa vẽ bản đồ, tuy nhiên người sẽ trực tiếp sử dụng GRASS lại là các lập trình viên. Hầu hết các đối tượng GRASS hướng đến đều cĩ trình độ tin học hạn chế, họ tự mình khơng thể xây dựng một chương trình tin học phức tạp liên quan đến GIS để phục vụ cơng việc của bản thân, tuy rằng cơng việc chuyên mơn rất cần sự hỗ trợ của những phần mềm tin học như vậy. GRASS cung cấp một bộ thư viện để xây dựng ứng dụng GIS tương đối đầy đủ gọi là GISLIB (khoảng trên 800 hàm), và bản thân GRASS cũng dựa trên bộ thư viện này để phát triển một số chức năng cơ bản về GIS. Việc xây dựng một hệ GIS thật sự rất phức tạp nếu bắt tay từ đầu, và vì thế, nhờ sự hỗ trợ của bộ thư viện này lập trình viên sẽ cĩ thể nhanh chĩng xây dựng được các ứng dụng GIS hỗ trợ cho các đối tượng người dùng trên một cách dễ dàng và nhanh chĩng. GRASS được thiết kế và phát triển cho nhiều mức độ sử dụng khác nhau, ở thời điểm hiện tại cĩ thể phân chia như sau : • Mức chuyên biệt hố : cho những người dùng mới học cách sử dụng, trình độ tin học khơng cao. GRASS hiện tại hỗ trợ giao tiếp người dùng thơng qua giao diện đồ họa được viết bằng script TCL/TK. Cho phép xây dựng nên các command truy vấn thơng qua menu, dialog. Giao diện này thực chất là lớp vỏ bọc cho những command chuyên biệt bên dưới. • Mức command, gõ lệnh trực tiếp : đây là mức thơng dụng nhất và được sử dụng nhiều nhất. Trên mơi trường LINUX/UNIX việc gõ command sẽ giúp thao tác nhanh với hệ điều hành rất nhiều so với giao tiếp giao diện đồ họa. GRASS ở mức giao tiếp này hỗ trợ người dùng gõ command trực tiếp để truy vấn và sử dụng. • Mức lập trình : đây là những developer, cĩ trình độ tin học cao. Sử dụng những bộ thư viện được cung cấp sẵn của GRASS để phát triển nên những Trang 18 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý ứng dụng cho bản thân. Ràng buộc là các developer phải sử dụng những hàm đã được hỗ trợ (nếu cĩ) để mở rộng và phát triển, khơng viết lại những gì đã cĩ để tránh trùng lắp và bug • Mức xây dựng thư viện : đây là cơng việc của nhĩm phát triển GRASS đang làm. Họ cĩ trách nhiệm duy trì sự ổn định, phát hiện sửa chữa những lỗi và đảm bảo một nền tảng thư viện hàm tốt để các ứng dụng được phát triển và mở rộng trên đĩ. GRASS hỗ trợ các chức năng chính yếu : • Phân tích dữ liệu Raster (Raster Analysis) • Phân tích dữ liệu Vector (Vector Analysis) • Phân tích dữ liệu Điểm (Point Analysis) • Xử lý hình ảnh (Image Process) • Phân tích DTM ( DTM – Analysis) • Hiển thị thơng tin (Screen Displaying) • Tạo lập bảng đồ (map creation) • Hỗ trợ SQL ( PostgreSQL, MySQL ..) • Các module khác (được các nhĩm khác xây dựng và gắn vào) 2.2 Kiến trúc GRASS Ở mức độ tổng quan, cĩ thể mơ tả kiến trúc của bộ thư viện GRASS như hình vẽ sau : Trang 19 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý GRASS GIS LIB Dữ liệu RASTER Dữ liệu VECTOR Dữ liệu POINT Xử lý hình ảnh Phân tích DTM Quản lý cơ sở dữ liệu Những module khác Lớp 0 Lớp 1 Lớp 2 Hình 2 - 1 Mơ hình kiến trúc GRASS GRASS được viết theo bằng C nên hồn tồn khơng cĩ yếu tố hướng đối tượng trong kiến trúc. Các chức năng được đĩng lại thành các gĩi. Theo chiều mũi tên, các gĩi được phân thành kiến trúc lớp như trên, những gĩi thuộc lớp cao sẽ sử dụng các chức năng do các gĩi ở lớp thấp cung cấp. Những module khác cĩ thể là các hỗ trợ phụ thêm cho GRASS như giao tiếp ODBC với hệ quản trị cơ sở dữ liệu Postgres, cung cấp nơi lưu trữ, truy vấn cho cơ sở dữ liệu khơng gian... 2.3 Định dạng dữ liệu GRASS lưu trữ dữ liệu theo một tổ chức thư mục được phân cấp được qui ước và mỗi loại dữ liệu cĩ định dạng lưu trữ xác định. Dữ liệu vector (vector data) được lưu theo định dạng nhị phân, dữ liệu điểm (site / point data) được lưu theo định dạng ASCII và dữ liệu ảnh (raster/imagery data) được lưu theo định dạng nhị phân và được nén. Về phương diện lập trình GRASS được cung cấp thư viện GIS Library dùng để giao tiếp với cơ sở dữ liệu của GRASS. Thư viện GIS Library cung cấp đủ các hàm khiến cho lập trình viên cĩ thể khơng cần phải hiểu cấu trúc của CSDL lưu bên dưới. Thư viện Trang 20 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý GRASS dùng các biến mơi trường (environment variable) để thiết lập các thơng số cho các hàm thư viện GIS Library truy xuất. GRASS hỗ trợ 3 định dạng dữ liệu : ™ Dữ liệu Raster : là kiểu dữ liệu dạng pixel, cĩ thể là các ảnh TIFF, GIF, PPM, ảnh chụp vệ tinh … Hỗ trợ import các định dạng : 1. ASCII (X Y Z , Z trong khoảng -2E7 đến 2 E7) 2. TIFF (8 bit) 3. GIF (8 bit) 4. PPM (24 bit) 5. SUN Raster (8 bit) 6. NHAP ( ảnh khơng gian) 7. BIL/BSQ (ảnh vệ tinh) 8. LANDSAT TM, MSS (ảnh vệ tinh) 9. SPOT (ảnh vệ tinh) Hỗ trợ kết xuất từ Raster ra các định dạng như : 1. ASCII (X Y Z , Z trong khoảng -2E7 đến 2 E7) 2. PPM (24 bit) 3. PPM/3 (24 bit) 4. TGA (24 bit) 5. TIFF (8 bit) Trang 21 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý ™ Dữ liệu Vector : dữ liệu thể hiện hình dạng vật lý bên ngồi của đối tượng như : dịng sơng, đường xá, hồ nước hoặc cánh đồng … Được định dạng theo kiểu vector. Hỗ trợ import các định dạng như : 1. ASCII vectorformat 2. ARC/INFO (các file cĩ phần mở rộng .arc, .line, .point và .textlabel ) 3. DXF 4. DXF3D 5. DLG 6. IDRISI 7. TIGER Hỗ trợ kết xuất từ dữ liệu vector ra các định dạng 1. ASCII vectorformat 2. ARC/INFO 3. DXF 4. IDRISI 5. MOSS ™ Dữ liệu điểm (Point data): trong GRASS được gọi là “sites”. Dữ liệu điểm cĩ thể là độ cao, lượng mưa ở một toạ độ xác định. Gọi là điểm vì thơng tin thể hiện cho một toạ độ xác định trên bản đồ Định dạng hỗ trợ import và kết xuất là : ASCII format Trang 22 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý 2.4 Tổ chức lưu trữ dữ liệu của GRASS 2.4.1 GISDBASE : Cơ sở dữ liệu trong GRASS sử dụng kiến trúc thư mục kiểu UNIX. Mức cao nhất được gọi là GISDBASE, người dùng phải cung cấp thơng tin này khi đăng nhập sử dụng GRASS và thơng tin sẽ được chứa trong biến mơi trường GISDBASE. Truy xuất lại thơng tin này, ta dùng hàm G_gisdbase 2.4.2 LOCATION : Thư mục con của GISDBASE là Location, cĩ thể xem Location là những cơ sở dữ liệu độc lập nhau của các vùng khác nhau và GISDBASE là tập các cơ sở dữ liệu mà GRASS hiện đang được dùng để quản lý. Người dùng phải xác lập Location sẽ làm việc khi đăng nhập sử dụng GRASS, thơng tin này sau đĩ sẽ được chứa trong biến mơi trường LOCATION_NAME, và được trả về khi sử dụng hàm G_location để truy vấn. Trong một phiên làm việc, GRASS chỉ cĩ thể làm việc với một Location duy nhất trong số những Location mà GISDBASE quản lý. LOCATION .1 LOCATION .2 LOCATION .1 LOCATION .4 GISDBASE Hình 2 - 2 Minh họa cấu trúc lưu trữ của GISDBASE trên đĩa Trang 23 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý 2.4.3 MAPSETS Thư mục con của Location là mapset (tập bản đồ). Người dùng phải đăng ký mapset sẽ sử dụng trong Location cho GRASS khi đăng nhập. Mapset được chọn sẽ đựơc lưu trong biến mơi trường MAPSET và giá trị biến mơi trường này được truy xuất thơng qua G_mapset MAPSET .1 MAPSET .2 …. PERMANENT LOCATION Hình 2 - 3 Minh họa cấu trúc lưu trữ của LOCATION trên đĩa Người dùng chỉ được sửa đổi đối với những mapset được tạo ra bởi chính người dùng. Đối với những mapset khác, người dùng chỉ cĩ thể xem nhưng khơng được thực hiện việc sửa đổi (tuy nhiên, nếu chủ nhân của mapset khơng cho xem, bằng cách đặt quyền sử dụng file thơng qua Unix File System, thì ta cũng khơng xem được các mapset này). Vậy đường dẫn đến một Mapset là : GISDBASE/LOCATION/MAPSET. Thơng tin này cĩ thể lấy ra thơng qua hàm G_location_path Cấu trúc Mapset bao gồm : các file và các thư mục con khác (được gọi là các element, trong sơ đồ các element được vẽ với dấu /). Trang 24 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý SEARCH_PATH WIND cats/ cell/ MAPSET paints/ …. Hình 2 - 4 Minh họa cấu trúc lưu trữ của MAPSET trên đĩa Các file trong mapset • GROUP : nhĩm hình ảnh hiện tại (current imagery group), được dùng bởi các hàm xử lý hình ảnh (imagery function). • SEARCH_PATH : đường dẫn tìm kiếm của Mapset (mapset search path), đựơc tạo và sửa đổi bởi lệnh g.mapsets. Nĩ chứa bên trong danh sách các mapset cĩ thể được sử dụng để tìm kiếm các file cơ sở dữ liệu. Khi người dùng gõ vào tên một một file cơ sở dữ liệu mà khơng ghi rõ thuộc mapset nào, thơng tin đĩ sẽ được tìm kiếm trong file SEARCH_PATH này. • WIND : khu vực hiện tại (current region), file được tạo và sửa đổi bởi lệnh g.region, nội dung của WIND được lấy ra bởi lệnh G_get_window. • Các ELEMENTS : Các element này khơng được tạo khi mapset được tạo mà các command của GRASS sẽ tạo động khi nĩ tham chiếu đến (ví dụ : g.ask). Vì các element khơng chắc chắn đã tồn tại, nên ta phải luơn kiểm tra sự hiện diện của nĩ trước khi thực hiện các thao tác. Trang 25 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Các elements Chức năng cell file nhị phân raster (số nguyên – INT) fcell file nhị phân raster (số thực – FLOAT/DOUBLE) cellhd file header cho các raster map cats Thơng tin được phân loại của các raster map (category raster map information) colr Bảng màu của raster map colr2 Bảng màu thứ hai của raster map cell_misc Những file linh tinh khác phục vụ cho raster map hist File lưu các thơng tin “lịch sử” của raster map dig Dữ liệu nhị phân vector (binary vector data) dig_ascii Dữ liệu dưới dạng ascii của vector (ascii vector data) dig_att các thuộc tính vector được hỗ trợ (vector attribute support) Trang 26 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý dig_cats danh mục các label của vector được hỗ trợ (vector category label support) dig_plus đồ hình vector được hỗ trợ (vector topology support) reg các đăng ký (registration) arc các file ARC/INFO là những file khơng được tạo tự động. Dùng cho việc trao đổi dữ liệu (data-exchange) bdlg File nhị phân dlg, dùng cho việc trao đổi dữ liệu dlg file ascii dlg, dùng cho việc trao đổi dữ liệu dxf file ascii DXF, dùng cho việc trao đổi dữ liệu camera dùng bởi hàm i.ortho.photo, là file đặc tả camera icons những file biểu tượng, được dùng bởi hàm p.map group dữ liệu hỗ trợ cho các nhĩm hàm xử lý hình ảnh Trang 27 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý site_lists danh sách các site của module liên quan Windows vùng được định nghĩa trước (predefine region) COMBINE dùng trong script r.combine WEIGHT dùng trong script r.weight Mỗi location đều cĩ những dữ liệu mapset thuộc loại cố định (PERMANENT MAPSET). Mapset này chứa các file dữ liệu raster và vector nguyên gốc khơng được phép sửa đổi và các file đặc biệt khác. • MYNAME : mơ tả thơng tin về location. Cĩ thể truy xuất thơng qua hàm G_myname • DEFAULT_WIND : mơ tả region mặc định cho location, được trả về thơng qua hàm G_get_default_window. File này được dùng để khởi tạo WIND file khi GRASS tạo mới một mapset trong Location. • PROJ_INFO : chứa các thơng tin về project • PROJ_UNITS : chứa thơng tin về các unit của project Ràng buộc khi sử dụng cơ sở dữ liệu mapset Dựa trên ba ràng buộc cơ bản : 1. Người sử dụng chỉ được chọn mapset đĩ để làm việc nếu đĩ là chủ nhân của mapset đĩ 2. GRASS chỉ tạo và sử đổi file chỉ trên mapset hiện tại được chọn Trang 28 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý 3. Tất cả các file trong các mapset đều cĩ thể được đọc bởi những người sử dụng khơng phải chủ nhân của nĩ (thơng qua MAPSET SEARCH_PATH để truy xuất), nếu chủ nhân của các mapset này “chia sẻ” , cho phép các user khác được xem (thơng qua cơ chế UNIX file permission) 2.4.4 REGION và MASK GRASS cung cấp hai cơ chế cho phép người dùng lựa chọn khu vực sẽ quan sát và phân tích dữ liệu của họ, được gọi là lựa chọn theo kiểu “khu vực” (region) và lựa chọn theo kiểu “mặt nạ” (mask). Người sử dụng định nghĩa một khu vực hình chữ nhật để tạo ra một “lựa chọn theo kiểu khu vực” (region) và sau đĩ cĩ thể tuỳ ý giới hạn lại bớt khu vực được chọn đĩ bằng một “mặt nạ” (mask). Dữ liệu về region và mask sẽ được tự động lưu trữ vào cơ sở dữ liệu GRASS trong MAPSET hiện tại được người sử dụng chọn lựa. Các module của GRASS tự động làm việc với những dữ liệu nằm trong region đã được chọn, nếu cĩ thêm mask thì chỉ những dữ liệu trong region sau khi vượt được qua lớp “mặt nạ“ sẽ được chọn để xử lý. „ REGION Để chọn khu vực làm việc, người sử dụng thao tác qua lệnh g.region, hoặc d.zoom, và những thơng tin này sau đĩ được lưu trong file WIND của MAPSET. File này khơng chỉ xác lập sự giới hạn của khu vực địa lý được chọn trong một khuơn viên hình chữ nhật mà dựa trên độ phân giải của khu vực đĩ, một cách ngầm định GRASS sẽ phân khu vực thành những cell hình chữ nhật cĩ cùng kích thước. File WIND chứa những thơng tin sau : north: 4660000.00 south: 4570000.00 east : 770000.00 Trang 29 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý west : 710000.00 e-w resol: 50.00 n-s resol: 100.00 rows: 900 cols: 1200 proj: 1 zone: 18 north, south, east, west : tọa độ bốn gĩc định ra khu vực làm việc rows, cols : số lượng dịng và cột được chia ra trong khu vực làm việc e-w resol, n-s resol : Độ phân giải theo chiều rộng và chiều dài của khu vực làm việc. Đây chính là kích thước của mỗi cell được chia nhỏ ra từ khu vực làm việc ban đầu. e- w resol là chiều dài của cell và n-s resol là chiều rộng của cell. proj, zone : proj giúp xác định loại toạ độ được sử dụng : 0 : khơng sử dụng tọa độ (x,y), loại bản đồ image 1 : UTM 2 : State Plane 3 : Kinh độ, vĩ độ (Latitude Longitude) zone xác định trường của proj, trong ví dụ trên là zone 18 Trang 30 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý „ MASK Bên cạnh việc chọn khu vực làm việc (region), người sử dụng cĩ thể dùng lệnh r.mask để tạo mặt nạ. Mặt nạ này sẽ được lưu thành file MASK trong thư mục MAPSET hiện tại của người dùng. Mặt nạ hoạt động như một bộ lọc khi đọc dữ liệu từ file raster. 3 4 4 3 3 4 2 3 3 0 4 4 3 3 0 2 0 0 0 1 1 1 1 0 1 0 0 INPUT MASK OUTPUT + = Hình 2 - 5 Minh họa cơ chế MASK của GRASS GRASS 5 Khơng hỗ trợ mặt nạ dấu chấm động.. 2.4.5 Các biến mơi trường sử dụng trong GRASS Các module của GRASS được viết độc lập với cơ sở dữ liệu được sử dụng bởi người dùng, cơ sở dữ liệu đĩ được lưu ở đâu, cũng như vị trí các module làm việc của GRASS .. Các thơng tin này cũng rất cần cho quá trình xử lý, GRASS sẽ tạo các biến mơi trường để ghi nhận và lấy ra khi cần thiết. Khi được khởi động bằng lệnh grass5.0, GRASS lập tức khởi tạo thơng tin cho các biến mơi trường sau • GISBASE : là đường dẫn tuyệt đối đến thư mục chứa cài đặt của GRASS. • GIS_LOCK : biến này ghi nhận đường dẫn đến file gis_lock, là file GRASS dùng để đảm bảo cơ chế lock (khố) của chương trình. • GISRC : chỉ đến thư mục lưu trữ file .grassrc5, là file chứa thơng tin về tất cả các biến mơi trường. Khi được khởi động, GRASS sẽ đọc từ file .grassrc5 để khởi tạo các biến mơi trường khác được lưu trong đĩ. Trang 31 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý • GISDBASE: biến này ghi nhận đường dẫn đến thư mục cài đặt cơ sở dữ liệu của GRASS, thơng tin biến này được đọc lên từ file .grassrc5 và được GRASS khởi tạo thành biến mơi trường • LOCATION_NAME: biến này ghi nhận đường dẫn đến thư mục LOCATION sẽ làm việc, thơng tin biến này được đọc lên từ file .grassrc5 và được GRASS khởi tạo thành biến mơi trường. • MAPSET : biến này ghi nhận đường dẫn đến thư mục MAPSET sẽ làm việc, thơng tin biến này được đọc lên từ file .grassrc5 và được GRASS khởi tạo thành biến mơi trường. • MONITOR : Monitor đang được chọn để hiện thi hiện tại • PAINTER : thiết bị hiện thị đang được chọn • DIGITIZER : digitizer đang được chọn Các biến mơi trường được lưu trong .grassrc5 được gọi là biến mơi trường GRASS và được thao tác thơng qua hai hàm thư viện : G_getenv và G_setenv. Hai hàm này đảm bảo các thơng tin biến mơi trường GRASS được lưu xuống file khi cĩ sự thay đổi. 2.5 Dữ liệu RASTER 2.5.1 Ý niệm sơ lược Dữ liệu dạng này cĩ thể xem là được kết hợp lại từ một ma trận các ơ. Nĩ cĩ thể là một bản đồ giấy, một ảnh vệ tinh, hoặc một bản đồ cĩ được do tổng hợp từ nhiều bản đồ khác. Bản đồ được phân rã thành ma trận, gồm nhiều ơ, mỗi ơ được gọi là một grid cell. Ơ grid cell là đơn vị nguyên tố của bản đồ, thể hiện một dữ liệu đã được qui ước và đánh số thành danh mục. Ví dụ : Raster map sau Trang 32 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý 2 2 2 2 2 3 3 3 3 3 3 3 33 3 3 3 1 1 1 1 1 1 1 3 3 4 4 4 4 4 4 4 4 4 4 Raster map về sự phân bố đất đai Với danh mục được qui định là 1 : Thành thị 2 : Đồng cỏ 3 : Rừng 4 : Đầm lầy Mỗi ơ, bên cạnh dữ liệu thể hiện tọa độ, cịn đi kèm theo dữ liệu thể hiện ý nghĩa của cell (trong bản đồ ví dụ bên trên là các giá trị 1, 2, 3, 4). Người dùng cĩ thể gán màu sắc tương ứng cho từng lọai giá trị cell tùy thích (trong ví dụ trên màu đen cho giá trị 1). Từ đĩ sẽ cĩ hai khả năng xảy, hoặc là ta giữ nguyên màu sắc nguyên thủy của ơ từ bản đồ gốc được đưa vào để hiện thị, hoặc là ta gán giá trị màu thể hiện cho từng giá trị ơ (điều này cĩ thể làm thay đổi hình ảnh được hiện thị lên của bản đồ so với bản đồ gốc được nhập vào). Trang 33 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý 2.5.2 Hệ thống tập tin raster Để phục vụ cho một bản đồ raster map, thơng tin được phân rã và lưu trên nhiều file. Các file này cĩ tên giống nhau nhưng được chứa trong những thư mục khác nhau trong thư mục mapset ( tên thư mục sẽ thể hiện nội dung thơng tin phân rã của file đĩ). Thư mục Thơng tin cell File nhị phân thể hiện thơng tin của các raster cell ( được thể hiện bằng số nguyên int) fcell File nhị phân thể hiện thơng tin của các raster cell ( được thể hiện bằng số thực float/double) cellhd các file header của raster cats Danh mục (category information) của các raster map colr bảng màu của raster map colr2 bảng màu thay thế của raster map hist File lưu vết, lịch sử của raster map cell_mísc Những thơng tin khác (linh tinh, khơng thật sự quan trọng) Ví dụ : raster map về đất đai (soils), cĩ thể cĩ các file sau : cell/soils, cellhd/soils, colr/soils, và cats/soils. Những thư mục phân rã này được gọi là các “thành phần dữ liệu” (database elements). 2.5.3 Các thao tác quan trọng ™ Nhận dữ liệu từ một tập tin bên ngồi (import data) Tùy theo lọai dữ liệu, ta dùng các lệnh sau Trang 34 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Dữ liệu là file ảnh định dạng ppm $d.in.ppm Dữ liệu là file ảnh định dạng ASCII $d.in.ascii ™ Kết xuất dữ liệu (export data) Tùy theo lọai dữ liệu muốn kết xuất, ta dùng các lệnh sau Dữ liệu kết xuất là file ảnh định dạng ppm $d.out.ppm Dữ liệu kết xuất là file ảnh định dạng ppm $d.out.ascii > textfile.asc ™ Hiện thị dữ liệu raster d.rast 2.6 Dữ liệu VECTOR (VECTOR DATA) 2.6.1 Ý niệm sơ lược Dữ liệu vector được sử dụng đối với những đối tượng cĩ kiến trúc và hình thể, nghĩa là trong thực tế các đối tượng này cĩ hình dạng và kích thước xác định. GRASS sử dụng dữ liệu vector để “mã hố” đường biên bao bọc hình dạng của kiến trúc hoặc vật thể cần thể hiện. Ví dụ : những đối tượng mà dữ liệu vector cĩ thể dùng để “mã hố” là hệ thống đường xá, cầu cống, núi non, hồ nước, cánh đồng, sơ đồ qui hoạch thành phố ... Nĩi chung, những đối tượng dạng này cĩ đặc điểm là hình dạng của chúng cĩ thể dùng những đường liền nét để thể hiện. Trang 35 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý 2.6.2 Hệ thống tập tin vector Bản đồ Vector trong GRASS được lưu trữ thành các cung. Cung được tạo thành từ một loạt toạ độ (x, y). Hai điểm đầu cuối của một cung được gọi là nốt ( node). Hai cặp (x,y) kề nhau trong cung được gọi là một phân đoạn (segment) của cung. ™ Những cung cĩ thể biệt lập hoặc kết hợp với nhau tạo nên những hình thể trên bản đồ : đường thẳng ( sơng ngịi, đường xá ...) , các khu vực .. ™ Các cung tạo nên những đường liền nét (sơng ngịi, đường xá .. ) được gọi là các “đường liền” (lines) ™ Các cung phân ranh nên một vùng, khu vực được gọi là các “đường ranh bao bọc” (area lines). Mỗi loại thơng tin hiện thị trên bản đồ vector được gán với một con số nguyên gọi là số chỉ mục tương tự kỹ thuật dùng cho raster map layer (category number). Thơng tin của một bản đồ vector trong GRASS được chứa trong nhiều file dữ liệu. Tương tự như raster map layer, các file này cĩ tên trùng nhau nhưng được chứa trong các thư mục con khác nhau trong thư mục mapset, mỗi file này biểu thị cho một thơng tin đã được phân rã. Thư mục Chức năng dig file nhị phân, chứa thơng tin cung dig_ascii file ascii, chứa thơng tin cung dig_att file phân loại các thuộc tính ( category attribute file) dig_cats Tên các danh mục phân loại của vector Trang 36 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý (vector category labels) dig_plus File chỉ mục của dữ liệu vector vector pointer/ index file reg digitizer registration points : những điểm đã được đăng ký Ví dụ: bản đồ vector về đất đai (soils) cĩ thể được lưu trữ theo cấu trúc sau : dig/soils, dig_plus/soils, dig_ascii/soils, dig_cats/soils và reg/soils .. Vector file cịn được gọi là file số hố (digit file), vì nĩ được tạo và thao tác bởi thư viện các hàm digit : v.digit .. 2.6.3 Các thao tác quan trọng ™ Nhận dữ liệu từ một tập tin bên ngồi (import data) Dùng lệnh $v.in.arc ™ Kết xuất dữ liệu (export data) ‘ Theo định dạng ARC/INFO Dùng lệnh $v.out.arc và trả lời các tham số cho lệnh ‘ Theo định dạng DFX Dùng lệnh Trang 37 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý $v.out.dfx và trả lời các tham số cho lệnh ™ Hiện thị dữ liệu vector Dùng lệnh $d.vect và trả lời các tham số cho lệnh ™ Kết xuất sang các định dạng dữ liệu khác của GRASS Ta dùng lệnh sau để kết xuất sang dữ liệu định dạng vector $v.to.vect Ta dùng lệnh sau để kết xuất sang dữ liệu định dạng vector $v.to.rast 2.7 Dữ liệu điểm (POINT/SITE DATA) 2.7.1 Ý niệm sơ lược Trong nghiên cứu về mơi trường, cĩ những loại dữ liệu chỉ liên quan đến một vị trí hay một khu vực rất nhỏ : số liệu về lượng mưa ghi nhận được một trạm quan sát, số liệu về độ cao đo được tại một điểm ... Khi biểu hiện lên trên bản đồ, người ta dùng một chấm để thể hiện, kèm theo đĩ là màu sắc và các số liệu. Những dữ liệu dạng này được gọi là dữ liệu điểm (point data) và GRASS cĩ thêm một tên gọi khác là dữ liệu nơi chốn (site data). Loại dữ liệu này cĩ thể hiểu một cách nơm na là dữ liệu “khơng cĩ hình thể”, tức là trong thực tế nĩ khơng cĩ hình dạng cụ thể và ta qui ước dùng một điểm để biểu diễn nĩ. Trang 38 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Hình 2 - 6 Minh họa dữ liệu điểm – POINT/SITE 2.7.2 Hệ thống tập tin site Dữ liệu điểm được lưu trong các tập tin định dạng ASCII, gọi là các tập tin site hoặc tập tin danh sách (list file). Những tập tin này được xử lý bởi các mơ-đun xử lý dữ liệu nơi chốn (module sites) trong thư viện GRASS. Trường name : Dịng này chứa tên của file site, và được in trên tất cả các báo cáo được tạo bởi module s.menu. Chữ name phải được viết thường. Dịng thơng tin name này cĩ thể được để trống vì s.menu sẽ tự động thêm tên mặc định là tên của file site. Trường desc : Dịng này chứa mơ tả về file site, chữ desc buộc phải viết thường. Dịng thơng tin này sẽ được in trên tất cả các báo cáo được tạo bởi module s.menu. Nĩ cĩ thể được bỏ qua, trong trường hợp này, file site sẽ khơng cĩ mơ tả Các trường point : Những dịng cịn lại là những record point. Mỗi site được mơ tả bởi một record point và cấu trúc của một record như sau east|north[|dim]...|#cat %double [%double] @string [@string] hoặc mơ tả về ngày giờ như sau : east|north[|dim]...|time %double [%double] Trang 39 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Ví dụ : name | sample desc | sample site list 728220 | 5182440 | #27 %1.34 %23.13 @"pH 7.1" 727060 | 5181710 | #28 %2.32 %22.21 @"pH 6.8" 725500 | 5184000 | #29 %4.73 %17.34 @"pH 5.5" 719800 | 5187200 | #30 %3.65 %27.79 @"pH 6.2" 2.7.3 Các thao tác quan trọng ™ Nhận dữ liệu từ một tập tin bên ngồi (import data) Ta dùng lệnh sau : $s.in.ascii File dữ liệu file theo định dạng UNIX ASCII ( nghĩa là ký tự phân cách dịng sẽ là \r thay vì \r\n như trong DOS ASCII). Nếu sử dụng file DOS ASCII, ta cĩ thể dùng lệnh của UNIX để convert lại như sau : $dos2unix file.asc ™ Kết xuất dữ liệu ra tập tin dạng text ASCII Ta dùng lệnh $s.out.ascii > file.asc Trong lệnh trên, cĩ một chỉ thị rất LINUX/UNIX đĩ là “>” dùng để chuyển nội dung vào một file. ™ Hiện thị dữ liệu điểm Ta dùng lệnh Trang 40 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý $d.sites ™ Kết xuất sang các định dạng dữ liệu khác của GRASS Ta dùng lệnh sau để kết xuất sang dữ liệu định dạng vector $s.to.vect Ta dùng lệnh sau để kết xuất sang dữ liệu định dạng raster $s.to.rast 2.8 Các thư viện được cung cấp bởi GRASS (src/libes) 2.8.1 Danh sách Tên thư viện Ý nghĩa D Thư viện hiển thị bitmap Thư viện xử ly bitmap cho X Windows Bitmap btree Xử lý b-cây bwidget Thư viện tcl/tk mở rộng coorcnv Thư viện hỗ trợ chuyển đổi toạ độ và dữ liệu datetime Thư viện xử lý ngày giờ dbmi Giao diện làm việc với các driver của các hệ quản trị cơ sở dữ liệu Trang 41 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý dig_atts Thư viện để đọc và ghi từ các file thuộc tính của bản đồ (attribute files) digitizer Thư viện “thơ”, đơn giản nhất cung cấp xử lý chung cho digitizer display Thư viện hiện thị của driver CELL dlg Thư viện xử lý cho các file DLG dspf Thư viện các file hiện thị G3D geom Tính tốn hình học (geometrical calculations), tính tốn cho các phép tốn số nguyên lớn (long –interger), .. gis Thư vịên GIS chính yếu của GRASS gmath Các chức năng xử lý tính tốn chung (ma trận, fft ..) ibtree B Cây cho xử lý số nguyên (phát triển từ thư viện btree) icon Thư viện xử lý các biểu tượng (icon). imagery Thư viện xử lý hình ảnh image3 Mở rộng của thư viện imagery libimage Thư viện xử lý hình ảnh , hỗ trợ save Trang 42 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý ảnh ở dạng SGIs RGB. linkm Thư viện hỗ trợ xây dựng, quản lý danh sách liên kết (linked-list) lock Cơ chế khố của GRASS đối với các monitor dùng hiện thị và các file ogsf Được chuyển từ thư viện gsurf, cần cho NVIZ proj Thư viện quản lý project raster Thư viện hỗ trợ xử lý dữ liệu raster của GRASS rowio row in/out library segment Thư vịên segment vask Thư viện quản lý curses vect32 Thư viện làm việc với dữ liệu vector vect32_64 Thư viện làm việc với dữ liệu vector 32/64 bit của GRASS, được phát triển trên nền vect32 2.8.2 Giới thiệu sơ bộ hàm và thư viện ™ Thư viện GIS ( thư viện trung tâm của GRASS) Trang 43 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý GIS Library là thư viện chính yếu và quan trọng nhất của hệ thống GRASS. Các chương trình sử dụng GRASS để phát triển buộc phải sử dụng thư viện này để giao tiếp với các file CSDL. Các hàm được cung cấp trong thư viện này theo nhĩm, khơng theo thứ tự alphabet. Các hàm này cĩ tiền tố bắt đầu là G_ (chữ G viết tắt cho Global) Để sử dụng thư viện này trong lập trình, ta phải #include ‘ Khởi tạo: ta bắt buộc phải thực hiện thao tác khởi tạo trước khi cĩ thể sử dụng bất cứ hàm nào của thư viện GIS, bằng cách gọi hàm int G_gisinit (char *program_name) Ví dụ : int main (int argc, char **argv) { G_gisinit(argv[0]); } ‘ Cơ chế báo lỗi của thư viện Hàm Chức năng int G_fatal_error (char *message, ...) In thơng điệp báo lỗi lên màn hình và thĩat. Nếu cĩ file GIS_ERROR_LOG trong Trang 44 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý GISBASE, lỗi sẽ được ghi nhận lại trong file int G_warning (char *message, ...) In thơng điệp lỗi lên màn hình và tiếp tục Nếu cĩ file GIS_ERROR_LOG trong GISBASE, lỗi sẽ được ghi nhận lại trong file void G_set_error_routine (int (*handler)( )) Thay đổi cơ chế xử lý lỗi của thư viện (nếu khơng muốn xử lý lỗi thơng qua hai hàm trên) Người lập trình cung cấp một cơ chế xử lý lỗi thơng qua một hàm cĩ prototype : int handler (char *message, int fatal) fatal cĩ giá 1 (error) và 0 (Warning) message là message lỗi. Sau đĩ truyền cho hàm như sau : G_set_error_routine (handler); int G_unset_error_routine (void) Reset lại cơ chế xử lý lỗi cũ của thư viện ( sử dụng hai hàm G_fatal_error và G_warning) Trang 45 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_sleep_on_error (int flag) flag = 1: in ra thơng điệp lỗi và sleep int G_suppress_warnings (int flag) - Dùng để “triệt hạ” hàm G_Warning nếu muốn. (ta sử dụng lại code chương trình đã được viết trước đĩ và khơng muốn hiện thị các message lỗi) flag = 0:G_Warning sẽ khơng cịn in ra message được nữa flag = 1 :G_Warning sẽ in ra message được nữa - Hàm này khơng triệt được G_fatal_error ‘ Truy xuất biến mơi trường và thơng tin liên quan đến cơ sở dữ liệu của GRASS Hàm Chức năng char * G_location (void) Trả về đường dẫn đến location hiện tại của database đang làm việc. Trang 46 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý char * G_location_path (void) char * G_mapset (void) Trả ra đường dẫn đến mapset đang làm việc trong location hiện tại. char * G_myname (void) Trả ra dịng tiêu đề của location đang làm việc ( nĩ đọc từ file MYNAME của MAPSET PERMANENT) char * G_gisbase (void) Trả ra thư mục cài đặt GRASS. Thư mục cài đặt GRASS sẽ cĩ các thư mục con sau bin : Chứa các command cĩ thể gọi trực tiếp bởi các user etc : Module và file dữ liệu được sử dụng bởi các GRASS command txt : File hướng dẫn menu : Những file được sử dụng bởi để tạo menu trong grass3 Ví dụ : để gọi lệnh sroff trong thư mục etc, ta làm như sau char command[200]; sprintf (command, "%s/etc/sroff", G_gisbase( ) Trang 47 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý ); system (command); char * G_gisdbase (void) Trả ra thư mục cài đặt các cơ sở dữ liệu của GRASS. (GRASS cĩ thể cĩ nhiều cơ sở dữ liệu nhưng chúng phải được cài đặt nằm trong thư mục chung này) Hàm truy xuất biến mơi trường GISDBASE int G_getenv (char *name) int G_ _getenv (char *name) truy xuất giá trị biến mơi trường của GRASS ( biến mơi trường GRASS là những biến mơi trường được quan trọng đối với thư viện và nĩ được lưu trong file .grassrc5 ) Nếu khơng truyền name là tên biến mơi trường: + G_getenv : sẽ báo lỗi và gọi exit để thốt + G__getenv : chỉ báo lỗi nhưng khơng thốt int G_setenv (char *name, char *value) int G_ _setenv (char *name, char *value) Gán giá trị cho biến mơi trường của GRASS. Thơng tin này sẽ lập tức được ghi nhận vào file .grassrc5, để lần sau khi chạy GRASS nĩ sẽ được load lên lại. Nếu giá trị value là NULL,việc gán biến mơi trường sẽ khơng được thực hiện. Trang 48 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý ‘ Truy vấn cơ sở dữ liệu GRASS Hàm Chức năng char * G_ask_old (char *prompt, char *name, char *element, char *label) Người sử dụng được yêu cầu nhập tên của một file cơ sở dữ liệu đã cĩ. char name[50]; char *mapset; mapset = G_ask_old ("", name, "paint/labels", "labels"); if (mapset = = NULL) exit(0); /* user canceled the request */ Kết quả hiện ra: Enter the name of an existing labels file Enter 'list' for a list of existing labels files Hit RETURN to cancel request 4 > char * Người sử dụng được yêu cầu nhập tên của một file cơ sở dữ liệu chưa cĩ trước Trang 49 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý G_ask_new (char *prompt, char *name, char *element, char *label) đĩ trong mapset. Tên này được dùng để tạo mới file. char * G_ask_any (char *prompt, char *name, char *element, char *label, int warn) Trả ra tên file hợp lệ. Người sử dụng nhập vào một tên file, Warn = 1 : nếu file đĩ đã tồn tại, người sử dụng sẽ được hỏi cĩ muốn ghi đè lên khơng ? Warn = 0 : file đĩ được chấp nhận và khơng cĩ thơng điệp hỏi lại dù rằng trước đĩ cĩ một file đã mang tên đĩ trong mapset. char * G_fully_qualified_name (char *name, char *mapset) Trả ra đường dẫn đến file cĩ tên là “name” trong mapset. ‘ Tìm file dữ liệu trong CSDL Trang 50 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Hàm Chức năng char * G_find_file (char *element, char *name, char *mapset) Tìm một file dữ liệu của cơ sở dữ liệu char name[50]; char *mapset; if ((mapset = G_find_file("paint/labels",name,"")) == NULL) /* not found */ Kiểm tra coi file đĩ cĩ tồn tại trong mapset hiện tại hay khơng, ta làm như sau : char name[50]; if (G_find_file("paint/labels",name,G_mapset( )) == NULL) /* not found */ int G_legal__lename (char *name) Kiểm tra tên file dữ liệu cĩ hợp lệ khơng. 1 : hợp lệ -1 : khơng hợp lệ int Mở một file dữ liệu để đọc. Trang 51 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý G_open_old (char *element, char *name, char *mapset) File đữ liệu cĩ tên là “name”, nằm trong “mapset” của Location hiện tại và thuộc thành phần dữ liệu “element” (thư mục con element của mapset) . Hàm dùng open() để cài đặt mở file, trả ra – 1 nếu khơng cĩ file, ngược lại trả ra id của file được mở. FILE * G_fopen_old (char *element, char *name, char *mapset) Mở một file dữ liệu để đọc. Các tham số cĩ nội dung giống hàm G_open_old Hàm này fopen() với tham số “r” để cài đặt, trả ra NULL nếu khơng cĩ file, ngược lại trả ra con trỏ FILE đến file đã được mở. int G_open_update (char *element, char *name) Mở file cĩ tên name trong “element” của mapset hiện tại theo mode cho phép đọc và ghi. Hàm dùng open() để cài đặt mở file, trả ra – 1 nếu khơng cĩ file, ngược lại trả ra id của file được mở. Trang 52 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý FILE * G_fopen_append (char *element, char *name) Mở file cĩ tên name trong “element” của mapset hiện tại theo mode append. Hàm này fopen() với tham số “r” để cài đặt, trả ra NULL nếu khơng cĩ file, ngược lại trả ra con trỏ FILE đến file đã được mở. int G_open_new (char *element, char *name) Tạo mới và mở file dữ liệu “name” theo mode write only, trong thư mục “element” của mapset hiện tại. Dùng hàm open() để cài đặt. Trả ra –1 nếu thất bại FILE * G_fopen_new (char *element, char *name) Tạo mới và mở file dữ liệu “name” theo mode write only, trong thư mục “element” của mapset hiện tại Dùng hàm fpen() để cài đặt. Trả ra NULL nếu thất bại int G_rename (char *element, char *old, char *new) Đổi tên một file dữ liệu trong thư mục element của mapset. Kết quả trả về 1 nếu thành cơng Trang 53 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý 0 nếu file old khơng tồn tại -1 nếu thất bại int G_remove (char *element, char *name) Xố file trong thư mục element của mapset hiện tại. Kết quả trả về 1 nếu thành cơng 0 nếu file khơng tồn tại -1 nếu thất bại Cấp phát bộ nhớ int G_free(void *buf) Giải phĩng bộ nhớ được cấp phát bằng hàm thư viện của GRASS void * G_realloc (void *ptr, int size) Thay đổi kích thước vùng nhớ đã được cấp phát trước đĩ bằng hàm thư viện của GRASS ptr trỏ đến vùng nhớ đã được cấp trước đĩ size kích thước mới (tính theo bytes) Kết quả trả về NULL nếu thất bại, ngược lại Trang 54 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý là con trỏ đến vùng nhớ đã được cấp phát void * G_calloc (int n, int size) Cấp phát một vùng nhớ cĩ kích thước n*size bytes, khởi tạo vùng nhớ với giá trị 0. Kết quả trả về NULL nếu thất bại, ngược lại là con trỏ đến vùng nhớ đã được cấp phát double * G_alloc_vector(int n) Cấp phát vùng nhớ cho một mảng số double cĩ n phần tử, khởi tạo zero cho tất cả phần tử. foat * G_alloc_fvector(int n) Cấp phát vùng nhớ cho một mảng số float cĩ n phần tử, khởi tạo zero cho tất cả phần tử. double ** G_alloc_matrix(int rows, int cols) Cấp phát vùng nhớ cho một ma trận double cĩ rows dịng và cols cột, khởi tạo zero cho tất cả phần tử. float ** G_alloc_fmatrix(int rows, int cols) Cấp phát vùng nhớ cho một ma trận float cĩ rows dịng và cols cột, khởi tạo zero cho tất cả phần tử. int G_free_fmatrix(foat **m) Giải phĩng vùng nhớ cho ma trận float đã cấp int G_free_matrix(double **m) Giải phĩng vùng nhớ cho ma trận double đã cấp Trang 55 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_free_vector(double *v) Giải phĩng vùng nhớ cho mảng double đã cấp ™ REGION Khái niệm về vùng (region) đã được trình bày trong phần trước, cĩ thể xem nĩ là một ma trận hai chiều với kích thước xác định và được phân thành nhiều cell (ơ) nhỏ đều nhau. Về logic, cĩ hai loại vùng (region) khác nhau trong GRASS : loại thứ nhất là vùng (region) được xác lập cho CSDL, do người sử dụng thiết lập cho mapset hiện tại. Loại thứ hai là vùng (region) xử lý được thiết lập cho module của chương trình, nĩ sẽ điều khiển quá trình ghi và đọc dữ liệu vào file raster và file site. Những bảng đồ kiểu vector (vector map) khơng cĩ loại region xử lý được thiết lập cho module. Thơng tin về một region được lưu trong cấu trúc Cell_header, định nghĩa trong file “gis.h” ‘ Vùng (region) được xác lập cho CSDL Hàm Chức năng int G_get_window (struct Cell_head *region) Đọc region được lưu trong file WIND của MAPSET hiện tại vào trong struct region. int G_put_window (struct Cell_head Ghi thơng tin của vùng (region) chứa trong cấu trúc region truyền cho hàm Trang 56 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý *region) vào file WIND của MAPSET hiện tại int G_get_default_window (struct Cell_head *region) Lấy thơng tin mặc định về region của LOCATION hiện tại được chọn. ‘ Vùng (region) được xác lập ở mức module Được sử dụng khi cần đọc và ghi dữ liệu raster cũng như site. Khi khởi tạo, vùng được xác lập ở mức module và vùng được xác lập cho CSDL là cùng một giá trị, tuy nhiên lập trình viên cĩ thể thay đổi tuỳ biến, thơng qua Hàm Chức năng int G_set_window (struct Cell_head *region) Thiết lập region ở mức module xử lý. Việc thiết lập này khơng làm thay đổi nội dung của file WIND lưu cấu hình của region ở mức dữ liệu. Vùng xử lý được thiết lập này chỉ tồn tại trong quá trình xử lý của module. int G_get_set_window (struct Cell_head *region) Lấy ra giá trị đã được thiết lập thơng qua hàm G_set_window bên trên Trang 57 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý ‘ Cơ sở dữ liệu lưu theo kinh-vĩ độ GRASS hỗ trợ lưu toạ độ theo kinh độ và vĩ độ. Tọa độ x là kinh độ và y là vĩ độ. Vấn đề phát sinh là việc tính diện tích, chiều dài và xác lập một khu vực theo phép Euclide cho những loại dữ liệu của GRASS trước đĩ sẽ khơng cịn đúng cho loại dữ liệu này nữa. Trái đất thì cong và bản đồ hiện thị thì lại cĩ dạng phằng và khơng cĩ thơng tin nào để biểu thị cho độ cong của trái đất. Hai điểm dù thuộc cùng một kinh độ hoặc vĩ độ nhưng chưa chắc khi vẽ lên bản đồ thì chúng thuộc một đường thẳng vì lý do là độ cong của trái đất. GRASS cung cấp thư viện GISLIB để giải quyết các vấn đề trên Kinh độ và vĩ độ được tính theo “độ”. Vĩ độ Bắc nằm từ 0 đến 90 độ, vĩ độ Nam nằm từ 0 đến – 90 độ. Kinh độ thì khơng cĩ giới hạn về độ đo vì kinh độ xuất phát từ hai cực của trái đất. Toạ độ được thể hiện theo định dạng ASCII và theo những mẫu sau : Vĩ độ : dd:mm:ssN hoặc dd:mm:ssS Kinh độ : dd:mm:ssE hoặc dd:mm:ssW Độ phân giải của lưới hiện thị (grid resolution) : dd.mm.ss Ví dụ : 80:30:24N là toạ độ của vĩ độ, cĩ nghĩa là 80 độ (degree), 30 phút (minutes) và 24 giây (second) Bắc 120:15W là tọa độ của kinh độ, cĩ nghĩa là 120 độ (degree), 15 phút (minute) Tây của đường kinh tuyến chính. Trang 58 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Đĩ là phương pháp mà GRASS dùng để mã hố toạ độ theo kinh độ và vĩ độ. GRASS cung cấp trong thư viện những hàm để thực hiện sự chuyển đổi giữa toạ độ thực về toạ độ mã hố này Hàm Chức năng int G_format_easting (double east, char *buf, int projection) int G_format_northing (double north, char *buf, int projection) int G_format_resolution (double resolution, char *buf, int projection) Chuyển toạ độ được thể hiện trong biến east về dạng ASCII và lưu trong buf. Tọa độ biến east là toạ độ Đơng. Chuyển toạ độ được thể hiện trong biến north về dạng ASCII và lưu trong buf. Tọa độ biến east là toạ độ Bắc Chuyển độ phân giải về dạng mã hố ASCII và lưu kết quả trong buf int G_scan_easting (char *buf, double *easting, int projection) int G_scan_northing (char *buf, double *northing, int projection) Chuyển giá trị mã hố ASCII về toạ độ ban đầu, hàm dùng chuyển cho tọa độ Đơng Chuyển giá trị mã hố ASCII về toạ độ ban đầu, hàm dùng chuyển cho tọa độ Bắc Trang 59 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_scan_resolution (char *buf, double *resolution, int projection) Chuyển dạng mã hố ASCII của độ phân giải về giá trị ban đầu Ví dụ minh hoạ double north ; char buf[50] ; G_scan_northing(buf, north, G_projection( )); /* ASCII to double*/ G_format_northing(north, buf, G_projection( )); /* double to ASCII */ G_format_northing(north, buf, -1); /* double to ASCII */ ‘Tính tốn diện tích bản đồ kiểu RASTER Những phép tốn hỗ trợ thực hiện việc tính tốn trên bản đồ kiểu raster Dù lưới được xây dựng từ kinh độ và vĩ độ sẽ khơng chính xác khi thực hiện việc tính tốn đối với diện tích (do trái đất cong, một điểm thuộc cùng kinh độ chưa chắc là thẳng hàng, điều tương tự đối với vĩ độ), tuy nhiên với cùng một vĩ độ, các ơ của lưới được tạo ra bởi vĩ độ đĩ và các kinh độ là bằng nhau về kích thước. Trang 60 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Dựa vào điều này GRASS cung cấp các hàm thư viện sau Hàm Chức năng double G_area_of_cell_at_row (int row) Trả ra diện tích (area) được tính bằng m2 của một ơ lưới tại một dịng. Giá trị này dùng để đo diện tích cho những ơ lưới thuộc cùng một dịng. int G_begin_cell_area_calculations (void) Phải được gọi trước khi gọi hàm G_area_of_cell_at_row int G_begin_zone_area_on_ellipsoid (double a, double e2, double s) Khởi tạo cho việc tính diện tích một ellipse cĩ trục nhỏ là a, tâm sai e2 và s là gia số cho biết phần ellipse sẽ được tính diện tích ( s =1.0 tính tồn bộ, 0.5 cho một nữa ellipse..) double G_area_for_zone_on_ellipsoid (double north, double south) Diện tích nằm giữa khu vực được xác định bởi vĩ độ Bắc và Nam, và lấy theo gia số s được truyền cho hàm G_begin_zone_area_on_ellipsoid bên trên Trang 61 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_begin_zone_area_on_sphere (double r, double s) Khởi tạo việc tính diện tích cho một mặt cầu, với r là bán kính và s là gia số cho phép tính một phần của mặt cầu đĩ (ý nghĩa s tương tự hàm G_begin_zone_area_on_ellipsoid ) double G_area_for_zone_on_sphere (double north, double south) Tính diện tích mặt cầu của khu vực nằm giữa vĩ tuyến Bắc và Nam. ‘ Tính diện tích đa giác Cĩ một vấn đề mắc phải đối với hệ toạ độ theo kinh độ và vĩ độ mà các hệ toạ độ phẳng khơng gặp đĩ là : đối với loai bản đồ vector chẳng hạn, dữ liệu đa giác được lưu là những toạ độ (x,y), đường thẳng tạo thành đa giác sau đĩ được phát sinh bằng cách nối liền các tọa độ này. Đối với tọa độ theo kinh độ và vĩ độ, do hình dạng trái đất trịn nên ta khơng thể sử dụng đường thẳng để nối liền các toạ độ và tạo ra đa giác. Bề mặt đa giác cần tính cĩ thể xem là nằm trên bề mặt của một ellipse xác định. GRASS cung cấp những hàm để tính diện tích cho những đa giác cả trong trường hợp dùng toạ độ phẳng và toạ độ theo kinh độ - vĩ độ. Hàm Chức năng int G_begin_polygon_area_calculations Khởi động việc tính diện tích cho một đa giác double Tính diện tích cho một đa giác. Trang 62 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý G_area_of_polygon (double *x, double *y, int n) Kết quả trả về cĩ đơn vị tính là mét vuơng. Truyền vào mảng các toạ độ x, mảng các toạ độ y và n là số cặp điểm (x,y) đựơc truyền vào. int G_begin_ellipsoid_polygon_area (double a, double e2) Khởi động việc tính diện tích cho một ellipse cĩ trục chính là a và tâm sai là e2 double G_ellipsoid_polygon_area (double *lon, double *lat, int n) Tính diện tích của đa giác được định n cặp điểm theo toạ độ kinh độ vĩ độ, được truyền vào riêng biệt theo hai mảng lat (vĩ độ) và long (kinh độ) Đơn vị của kết quả tính là met vuơng ‘Tính khoảng cách Việc tính khoảng cách giữa hai điểm cũng gặp khĩ khăn như đối với tính diện tích bên trên khi dùng toạ độ theo kinh độ và vĩ độ. GRASS cung cấp hàm để làm việc cho cả toạ độ phẳng và toạ độ theo kinh độ và vĩ độ Hàm Chức năng int G_begin_distance_calculations (void) Khởi động việc tính tốn khoảng cách Trang 63 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý double G_distance (double x1, y1, x2, y2) Trả ra khoảng cách giữa hai điểm cĩ toạ độ là x1,y1 và x2,y2. Đơn vị tính là mét int G_begin_geodesic_distance (double a, double e2) Bắt đầu việc tính tốn dựa trên một ellipse cĩ trục lớn a và tâm sai e2. Chỉ dùng tính đối với toạ độ theo kinh độ và vĩ độ. double G_geodesic_distance (double lon1, double lat1, double lon2, double lat2) Đo khoảng cách giữa hai toạ độ được tính theo kinh độ và vĩ độ. Đơn vị tính của khoảng cách là mét. ‘Xử lý đối với file dữ liệu RASTER File dữ liệu RASTER là trái tim và linh hồn của GRASS (heart and soul). Do đĩ mà GRASS cung cấp cả một thư viện hàm để xử lý cho raster file, bao gồm : • Xác định file dữ liệu raster sẽ được xử lý (do người dùng xác lập đường dẫn hay được module tự xác định) • Định vị file raster trong cơ sở dữ liệu. • Mở file raster • Cấp phát buffer để giao tiếp IO • Các thao tác mở , ghi , đọc và đĩng • Hỗ trợ tạo lập file raster File raster là file nhị phân chứa cấu trúc CELL (được định nghĩ trong file header gis.h) Trang 64 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Hàm Ý nghĩa char * G_ask_cell_old (char *prompt, char *name) Yêu cầu người dùng nhập vào tên của file raster đã tồn tại trong bất kỳ mapset nào trong cơ sở dữ liệu char * G_ask_cell_in_mapset (char *prompt, char *name) Yêu cầu người dùng nhập vào tên của file raster đã tồn tại trong mapset hiện tại trong cơ sở dữ liệu char * G_ask_cell_new (char *prompt, char *name) Yêu cầu người dùng nhập vào tên của file raster chưa cĩ trong mapset hiện tại trong cơ sở dữ liệu char * G_find_cell (char *name, char *mapset) Tìm file raster cĩ tên là “name” trong một “mapset”. Biến mapset là “” sẽ cĩ ý nghĩa là tìm kiếm trong tồn bộ các mapset hiện hữu trong CSDL. Nếu tìm thấy trả ra đường dẫn đến mapset đĩ, khơng thì trả ra NULL. char name[50]; char *mapset; if ((mapset = G_find_cell(name,"")) = = NULL) /* not found */ Trang 65 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý FILE * G_open_cell_new (char *name) Tạo lập và mở theo mode write một file raster mới. CELL * G_allocate_cell_buf (void) Cấp phát bộ nhớ cho một cấu trúc CELL. Cấu trúc này là cấu trúc dùng để ghi/đọc vào/từ file raster. int G_zero_cell_buf (CELL *buf) Gán giá trị 0 cho tất cả các trường trong CELL int G_get_map_row (int fd, CELL *cell, int row) Đọc một row từ file raster int G_get_map_row_nomask (int fd, CELL *cell, int row) Đọc một row từ file raster và khơng sử dụng “mặt nạ”. int G_put_map_row (int fd, CELL *buf) Ghi vào file raster int fd, row, nrows, ncols; CELL *buf; fd =G_open_cell_new(name); if (fd < 0) ERROR} buf = G_allocate_cell_buf(); Trang 66 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý ncols =G_window_cols(); nrows = G_window_rows(); for (row = 0; row < nrows; row++) { /* prepare data for this row into buf */ /* write the data for the row */ G_put_map_row(fd, buf); } int G_close_cell (int fd) Đĩng một file raster int G_unopen_cell (int fd) Nếu cĩ lỗi phát sinh trong quá trình xử lý, ta dùng hàm này để đĩng file raster lại. ‘ Các xử lý khác dành cho RASTER Như đã đề cập bên trên, một bản đồ cĩ nhiều file dữ liệu khác nhau, cĩ cùng tên với bản đồ phối hợp với nhau để thể hiện, dữ liệu raster cũng vậy. Những file này được gọi là những “file hỗ trợ”, supported files, đối với RASTER những file hỗ trợ bao gồm : • File header • File danh mục (category) • File lưu bảng màu Trang 67 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý • File lưu vết (history) • File lưu phạm vi (range file) • File histogram Mỗi loại file hỗ trợ trên cĩ cấu trúc khác nhau và được thao tác bằng những nhĩm hàm khác nhau thiết kế chuyên biệt cho chúng Ví dụ : file header cĩ hàm int G_get_cellhd (char *name, char *mapset, struct Cell_Head *cellhd) dùng để đọc một cấu trúc header Một số hàm dùng thao tác với các file hỗ trợ : HÀM Ý NGHĨA int G_get_cellhd (char *name, char *mapset, struct Cell_Head *cellhd) Đọc thơng tin header của file raster cĩ tên là name trong mapset vào cấu trúc Cell_Head char * G_put_cellhd (char *name, struct Cell_Head *cellhd) Viết header của bản đồ cĩ tên là name trong mapset hiện tại vào file header. int G_read_cats (char *name, char *mapset, struct Categories *cats) Đọc thơng tin của file danh mục (category files) name trong mapset vào trong cấu trúc cats. Trang 68 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_write_cats (char *name, struct Categories *cats) Viết thơng tin trong cấu trúc cats vào cho file raster cĩ tên name. char * G_get_cat (CELL n, struct Categories *cats) Tìm trong cấu trúc cats, tại danh mục n và trả ra con trỏ đến một chuỗi qui ứơc của danh mục đĩ. int G_init_cats (CELL n, char *title, struct Categories *cats) Để tạo mới một danh mục, trước hết nĩ phải được khởi tạo bằng hàm này. int G_set_cat (CELL n, char *label, struct Categories *cats) Đặt chuỗi qui ước (label) cho danh mục n trong cấu trúc cats (cấu trúc quản lý các danh mục) int G_free_cats (struct Categories *cats) Giải phĩng vùng nhớ được cấp phát cho cấu trúc cats. int G_read_colors (char *name, char *mapset, struct Colors *colors) Đọc bảng màu của file raster cĩ tên name của mapset vào biến cấu trúc dùng quản lý bảng màu colors. int G_write_colors (char *name, char *mapset, struct Colors *colors) Ghi biến cấu trúc colors dùng quản lý bản màu cho file raster name của mapset Trang 69 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_lookup_colors (CELL *raster, unsigned char *red, unsigned char *green, unsigned char *blue, set, int n, struct Colors *colors) Lấy ra mảng màu cho mảng các giá trị raster. Hàm nhận vào một mảng (n phần tử) các giá trị raster (CELL *raster) và trả ra mảng các màu ( 3 mảng) tương ứng cho các giá trị này. int G_get_color (CELL cat, int *red, int *green, int *blue, struct Colors *colors) Tìm trong cấu trúc quản lý màu colors của file raster và lấy ra 3 thành phần màu RGB : red, green, và blue tương ứng cho một giá trị CELL int G_init_colors (struct Colors *colors) Khởi tạo cho cấu trúc colors. int G_free_colors (struct Colors *colors) Giải phĩng bộ nhớ được cấp phát cho cấu trúc colors. int G_read_history (char *name, char *mapset, struct History *history) Đọc thơng tin lưu vết (history info) của một file raster trong mapset vào cấu trúc quản lý lưu vết history. int G_write_history (char *name, struct History *history) Viết thơng tin lưu vết (history info) của một file raster trong mapset vào cấu trúc quản lý lưu vết history. Trang 70 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_read_range (char *name, char *mapset, struct Range *range) Đọc thơng tin về phạm vi của một file raster trong mapset và lưu vào cấu trúc range. int G_write_range (char *name, struct Range *range) Ghi thơng tin về phạm vi của một file raster trong mapset và lưu vào cấu trúc range. int G_init_range (struct Range *range) Khởi tạo cho một cấu trúc range int G_init_cell_stats (struct Cell_stats *s) Khởi tạo cho cấu trúc trạng thái của một cell trong bản đồ raster Cell_stats int G_free_cell_stats (struct Cell_stats *s) Giải phĩng vùng nhớ được cấp cho Cell_stats int G_update_cell_stats (CELL *data, int n, struct Cell_stats *s) Cập nhật mảng data (cĩ n giá trị) vào cấu trúc quản lý Cell_stats. ‘ Xử lý cho file Vector Trang 71 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Thư viện GIS chứa một vài phương thức phục vụ cho việc xử lý file vector. Những hàm này cung cấp các chức năng cho phép người sử dụng quản lý, xác định file vector trong cơ sở dữ liệu, và một số chức năng khác.. HÀM Ý NGHĨA int G_read_vector_cats (char *name, name *mapset, struct Categories *cats) Đọc thơng tin danh mục của file vector tên là name trong mapset vào cấu trúc quản lý danh mục cats int G_write_vector_cats (char *name, struct Categories *cats) Ghi thơng tin danh mục của file vector tên là name trong mapset vào cấu trúc quản lý danh mục cats FILE * G_fopen_vector_new (char *name) Tạo mới một file vector trong mapset hiện tại FILE * G_fopen_vector_old (char *name, char *mapset) Mở một file vector đã cĩ trước đĩ trong mapset hiện tại. int G_find_vector (char *name, char *mapset) Tìm một file vector cĩ tên là name trong mapset được chỉ định. char name[50]; char *mapset; Trang 72 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý if ((mapset = G_find_vector(name,ỵ ỵ)) = = NULL) /* not found */ ‘ Xử lý cho file SITES Các file site chứa các record mơ tả thơng tin liên quan đến “điểm”. Cĩ ba loại record : record ghi chú (comment record), header record, và record dữ liệu (data record). Những record được ghi trong những file sử dụng bảng mã ASCII và phân cách nhau bằng ký tự newline của bẳng mã ASCII (0x0A, tương đương ký tự ‘\n’). Các record được chia làm hai phần, phần 1 chứa thơng tin location (2, hoặc 3 field) và phần 2 chứa các thơng tin thuộc tin của vùng location này. Các field cĩ chiều dài khơng cố định nên do đĩ kích thước của các record cĩ thể khác nhau. Trong phần 1, các field được phân cách bằng ký tự pipe ( | ) cĩ mã ASCII là 0x7c. Ký tự pipe cuối cùng trong record là ký tự phân cách giữa phần 1 và phần 2 Trong phần 2, tùy vào loại thuộc tính sẽ sử dụng ký tự phân cách khác nhau • Thuộc tính danh mục (Category attribute) : sử dụng ký tự # làm tiền tố, số chỉ mục là số nguyên. • Thuộc tính thập phân (decimal attribute) : sử dụng ký tự % làm tiền tố. • Thuộc tính chuỗi (String attribute) : sử dụng tiền tố @ và chuỗi được bao trong ngoặc kép “ • Thuộc tính mặc định : nếu khơng cĩ các tiền tố #,@ và %, kiểu của thuộc tính mặc định là chuỗi (string) Ví dụ : Trang 73 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý name|time desc|Example of using time as an attribute time|Mon Apr 17 14:24:06 EST 1995 10.8|0|9.8|Fri Sep 13 10:00:00 1986 %31.4 11|5.5|9.9|Fri Sep 14 00:20:00 1985 %36.4 5.1|3.9|10|Fri Sep 15 00:00:30 1984 %28.4 Với dữ liệu trên, mỗi record dữ liệu Trong phần I cĩ 3 thuộc tính xác lập toạ độ của vùng Location. (record 1 : 10.8 | 0 | 9.8 ) Trong phần 2 cĩ 5 thuộc tính chuỗi, và 1 thuộc tính thập phân ( record 1 : 5 thuộc tính được hiểu mặc định là chuỗi là : Fri, Sep, 13, 10:00:00 và 1986; thuộc tính thập phân là 3.14) HÀM Ý NGHĨA char * G_ask_sites_old (char *prompt, char *name) Yêu cầu người sử dụng nhập vào tên của một file site trong danh sách các file site đã cĩ sẵn. char *mapset; char name[50]; mapset = G_ask_sites_old("Enter site list file to be processed", name); Trang 74 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý if (mapset == NULL) exit(0); FILE * G_sites_open_new (char *name) Tạo mới file site FILE * G_sites_open_old (char *name, char *mapset) Mở một file site đã cĩ sẵn Site * G_site_new_struct (RASTER_MAP_TYPE c, int n, int s, int d) Cấp phát bộ nhớ, tạo mới một cấu trúc Site void G_site_free_struct (Site *site) Giải phĩng vùng nhớ đã được cấp phát trước đĩ. int G_site_get (FILE *fd, Site *s) Đọc một site record từ file đã được mở. int G_site_put (FILE *fd, Site *s) Ghi một site record vào . ‘ Các hàm dùng vẽ cơ bản Thư viện GIS cịn cung cấp các hàm dùng để thực hiện các thao tác vẽ đường thẳng và đa giác cơ bản . Sau đây là một số hàm : Trang 75 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý HÀM Ý NGHĨA int G_bresenham_line (int x1, int y1, int x2, int y2, int (*point)( ) ) Hàm vẽ đường thẳng, sử dụng thuật tốn Breshenham. Trong đĩ, hàm dùng để vẽ 1 point phải tự cài đặt và truyền vào thơng qua con trỏ hàm int (*point)() int G_setup_plot (double t, double b, double l, double r, nt (*Move)( ), int (*Cont)( )) Hàm khởi tạo cho một quá trình vẽ. Hàm này phải được gọi trước khi bắt đầu gọi bất cứ hàm nào cĩ tên theo mẫu G_plot_* t,b,l và r là tọa độ các điểm top, bottom, left và right của vùng vẽ. Hàm nhận vào hai con trỏ hàm đến hai hàm được người dùng tự cài đặt : Move(x, y) di chuyển đến toạ độ (x,y) Cont(x, y) vẽ đến toạ độ x,y từ toạ độ trước đĩ. Hàm này chịu trách nhiệm “xén” nếu (x,y) nằm ngồi vùng được phép vẽ. int G_plot_line (double east1, double Vẽ một đường thẳng, truyền vào toạ độ tính theo kinh độ và vĩ độ. Trang 76 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý north1, double east2, double north2) int G_plot_polygon (double *east, double *north, int n) Vẽ đa giác n cạnh, truyền vào toạ độ tính theo kinh độ và vĩ độ ‘ Sử dụng file tạm Đơi khi trong quá trình xử lý của mình, các module cần lưu các thơng tin tạm vào một file. Sau khi module đĩ được xử lý xong, các thơng tin tạm đĩ khơng cần nữa và file lưu các thơng tin tạm sẽ được xố đi. Vấn đề cần giải quyết ở đây là cơ chế cung cấp tên file dùng để lưu các thơng tin tạm này, tên file này buộc phải là duy nhất nghĩa là khơng được trùng với các file cũng dùng các thơng tin tạm khác. GRASS cung cấp một hàm đảm bảo điều này : char * G_temp_le ( ) Trả ra một tên file dùng lưu dữ liệu tạm GRASS dựa vào id của process đang chạy để cung cấp tên cho file tạm, khi process này khơng cịn chạy nữa, tiến trình quản lý cơ sở dữ liệu của GRASS sẽ tự động xố những file tạm này đi. ‘ Hỗ trợ các lệnh command Mỗi lệnh (command) trong GRASS cĩ thể sẽ địi hỏi truyền các tham số vào. Người dùng cĩ tràch nhiệm phải cung cấp đầy đủ các tham số này, nếu khơng, “lệnh” sẽ khơng thực hiện được và sẽ cung cấp hướng dẫn sử dụng kèm theo thơng báo lỗi. Trang 77 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý Để chuẩn hố qui trình cung cấp thơng tin và kèm theo thơng báo lỗi khi người dùng cung cấp các tham số khơng đúng, GRASS hỗ trợ một số hàm cho lập trình viên và khuyến cáo các lập trình viên nên tận dụng nĩ khi viết các lệnh mới. Sử dụng hai cấu trúc struct Option *opt; /* mơ tả các tùy chọn của lệnh */ Chi tiết : opt->key Tên của tùy chọn opt->description Dịng mơ tả cho user về tùy chọn này opt->type Kiểu dữ liệu user sẽ cung cấp cho tùy chọn này opt->required Lệnh cĩ bắt buộc phải cĩ option này ? struct Flag *flag; /* Các cờ hiệu */ Chi tiết : flag->key Một ký tự đơn dùng làm cờ hiệu flag->description Thơng tin về cờ cho user Hàm Ý nghĩa struct Option * G_define_option ( ) Cấp phát bộ nhớ cho một cấu trúc option struct Flag * G_define_flag ( ) Cấp phát bộ nhớ cho một cấu trúc flag Trang 78 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_parser (int argc, char *argv[ ]) Phân tích các tham số do user truyền vào. Trả ra 0 nếu thoả mãn yêu cầu về các tham số của lệnh. int G_usage ( ) In thơng tin hướng dẫn sử dụng lệnh cho user. Khi check G_parser khơng thành cơng, lập trình viên cĩ thể gọi hàm này để hướng dẫn người sử dụng ‘ Làm việc với UNIX/LINUX Vì thư viện GRASS được phát triển và hỗ trợ mạnh cho LINUX/UNIX, nên nĩ cung cấp một số hàm chuyên biệt để lập trình trên hệ điều hành này. Lập trình đa tiến trình : LINUX/UNIX cung cấp hàm fork() để tạo tiến trình con là một bản sao của tiến trình cha. Việc tạo tiến trình con thơng thường dùng để chuyển các cơng việc của module về “hậu trường”. Kỹ thuật thường dùng trong LINUX/UNIX là gọi fork() để tạo ra một tiến trình con, khi tiến trình con được tạo lập thành cơng, tiến trình cha lập tức gọi exit() để thốt và từ đĩ trở đi, tiến trình con chạy “hậu trường” độc lập. Tuy nhiên, GRASS gặp một vấn đề nhỏ với điều này, đĩ là trong UNIX/LINUX người dùng cĩ thể sử dụng các thao tác bàn phím để kill một process đang chạy và vì thế cĩ khả năng một module xử lý quan trọng đang làm việc ở “hậu trường” sẽ khơng đảm bảo thực hiện đầy đủ nhiệm vụ được giao. GRASS giải quyết vấn đề này bằng cách cung cấp hàm G_fork(). Trang 79 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý pid_t G_fork ( ) : Tạo một process con và trả ra id của nĩ. Hàm sẽ chuyển process con được tạo ra vào một group process, đảm bảo khơng bị vơ ý kill bởi người dùng khi chưa hồn thành nhiệm vụ. Lập trình với socket trong UNIX Các hàm cung cấp bởi GRASS cho cơng việc này đều cĩ dạng G_sock_*, đĩng gĩi việc lập trình socket trên UNIX, đơn giản hĩa các thao tác cho lập trình viên Hàm Ý nghĩa char * G_sock_get_fname (char *name) Nhận vào name của kênh truyền dẫn và trả ra đường dẫn full đến socket file dùng để truyền dẫn. int G_sock_exists (char *name) Truyền vào name là đường dẫn full đến socket file của kênh truyền dẫn, kiểm tra xem socket đĩ cĩ tồn tại int G_sock_bind (char *name) Kết nối với một socket file. int G_sock_listen (int fd, unsigned int queue) “Nghe” trên một socket int G_sock_accept (int fd) Chấp nhận một kết nối, tham số fd là kết quả trả về của G_sock_listen Trang 80 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý int G_sock_connect (char *name) Socket client tìm cách connect với socket server ™ Thư viện VASK VASK - viết tắt của cụm từ visual ask. Thư viện cung cấp một cách thức đơn giản để giao tiếp với người sử dụng. Một trang màn hình chứa các thơng tin cùng các câu hỏi được hiện thị và người dùng được yêu cầu nhập các thơng tin cần thiết cho chúng. Cách thức giao tiếp với người dùng này thường thấy ở các module chương trình của GRASS. VASK là một thư viện hỗ trợ lập trình viên tạo ra sự giao tiếp này. Các hàm của thư viện cĩ tiền tố bắt đầu là V_* Hàm Ý nghĩa int V_clear () Khởi tạo int V_line (int num, char *text) Viết một dịng text tại dịng num. Dịng cĩ giá trị từ 0 đến 22. Dịng 0 là dịng trên cùng của màn hình int V_const (Ctype *value, char type, int Ctype cĩ kiểu là integer, long, float, double hoặc char. Trang 81 KH OA C NT T – Đ H KH TN Chương 2: Hệ thống hỗ trợ phân tích tài nguyên địa lý row, int col, int len) int V_ques (Ctype *value, char type, int row, int col, int len) Type dùng các ký tự để xác định kiểu dữ liệu của con trỏ value : ‘i’ (integer), ‘d’ (double), ‘f’ (float), ‘l’ (long) hoặc ‘s’ (char string). Row cĩ giá trị từ 0 .. 22 Col cĩ giá trị từ 0 .. 79 Người dùng được yêu cầu nhập liệu, ơ nhập liệu nằm tại vị trí col, row và cĩ chiều dài len. Nội dung nhập liệu của người dùng chứa trong biến value int V_call () Giao tiếp với người sử dụng. Khi được gọi, nĩ sẽ lau màn hình và hiện thị các nội dung đã đựơc chỉ định bởi V_line, V_ques và V_const. Ví dụ minh họa : # define LEN 15 .. /* các biến*/

Các file đính kèm theo tài liệu này:

  • pdfUnlock-0012057-0012131.pdf