(a) Điểm: Đƣợc thể hiện bằng mội pixel.
(b) Đƣờng: Đƣợc thể hiện bằng một chuỗi các pixel. (c) Vùng : Đƣợc thể hiện bằng một nhóm các pixel.
Trên thực tế, chọn kiểu mô hình nào để biểu diễn bản đồ tùy chọn vào mỗi bài toán cụ thể. Việc lƣu trữ kiểu đối tƣợng nào sẽ quyết định mô hình sử dụng. ví dụ nếu lƣu vị trí của hành khách đi xe buýt, các trạm xe buýt hoặc dữ liệu cần tổng hợp theo từng vùng nhƣ khu vực các quận, các hồ chứa nƣớc,… thì sử dụng mô hình vector. Nếu đối tƣợng quản lý đƣợc phân liên tục nhƣ loại đất,
mức nƣớc, độ cao của núi,… thì thƣờng dùng mô hình raster
1.4.3. Một số bài toán của GIS.
Bài toán ứng dụng cụ thể của GIS thƣờng gặp trong thực tế bao gồm:
- Quản lý và lập kế hoạch mạng lƣới giao thông đƣờng bộ, giải quyết nhu cầu cần tìm nhƣ tìm kiếm địa chỉ, đƣờng dẫn, phân tích không gian, chọn địa điểm xây dựng, lập kế hoạch phát triển mạng lƣới giao thông nhƣ mạng lƣới xe buýt trên các thành phố.
- Giám sát tài nguyên thiên nhiên, môi trƣờng giúp quản lý hệ thống sông ngòi, vùng đất trồng trọt, thảm thực vật, vùng đất ngập nƣớc, phân tích các tác động môi trƣờng….
- Quản lý đất đai: giám sát, lập kế hoạch sửu dụng đất, quy hoạch…
- Quản lý và lập kế hoạch các dịch vụ công cộng, tìm địa điểm phù hợp cho việc bố trí các công trình công cộng. cân đối tài liệu, phân luồng giao thông.
- Phân tích điều tra dân số, lập bản đồ y tế, vùng bệnh…
Trong chƣơng này của luận văn đã nghiên cứu tổng quan về cơ sở dữ liệu mở rộng, cơ sở dữ liệu tích cực (Active database), cơ cơ sở dữ liệu thời gian (Temporal database) và cơ sở dữ liệu không gian (spatial databas).Trong phần tiếp theo luận văn sẽ trình bày nghiên cứu tìm hiểu tổng quan về hệ quản trị CSDL PostgreSQL và PostGIS.
CHƢƠNG 2: POSTGRESQL VÀ POSTGIS 2.1. POSTGRESQL. 2.1. POSTGRESQL.
2.1.1. Giới thiệu về hệ quản trị cơ sở dữ liệu PostgreSQL
PostgreSQL là hệ quản trị cơ sở dữ liệu đƣợc viết theo hƣớng mã nguồn mở. Hệ quản trị cơ sở dữ liệu PostgreSQL đã và đang phát triển, hiệu quả có tính ổn định đƣợc kiểm chứng qua nhiều năm.
Vào năm 1986, giáo sƣ Đại học California ở Berkeley và chuyên gia công nghệ về cơ sở dữ liệu Michael Stonebraker đã đƣa ra vấn đề là phải xây dựng hệ thống cơ sở dữ liệu tốt hơn. Mặc dù đã có những thành công với dự án cơ sở dữ liệu trƣớc đó, do INGRES nghiên cứu ra, Stonebraker đã quyết định phát triển lên dựa trên nền tảng đã có. Và kết quả của sự phát triển đó là Postgres.
Trong 8 năm tiếp đó, POSTGRES đã phát triển một cách phổ biến, đặc biệt là trong cộng đồng nghiên cứu. Qua một quá trình phát triển lâu dài, bản PostgreSQL 6.0 đƣợc chính thức ra đời nó dựa trên nền tảng của POSTGRES trƣớc đó và thêm vào các thực thi SQL. Ngày nay, PostgreSQL là một trong những dự án nguồn mở phổ biến nhất trên Internet.
PostgreSQL là hệ thống quản trị cơ sở dữ liệu quan hệ đối tƣợng dựa trên POSTGRES bản 4.2, đƣợc phát triển tại trƣờng đại học California tại phòng nghiên cứu máy tính Berkeley [9]. PostgreSQL có thể chạy trên nhiều hệ điều hành nhƣ Linux, Unix và Windows.
PostgreSQL là một hệ quản trị cơ sở dữ liệu mạnh có những tính năng tiên tiến nhƣ
- Khôi phục dữ liệu tại từng thời điểm (Recovery), - Quản lý dung lƣợng bảng (tablespaces),
- Giao dịch lồng nhau (savepoints), - Sao lƣu trực tuyến hoặc nội bộ,
- Truy vấn phức tạp và tối ƣu hóa, và viết trƣớc các khai báo để quản lý và gỡ lỗi.
- PostgreSQL hỗ trợ bộ ký tự quốc tế nhƣ Unicode, và cho phép định dạng, sắp xếp và phân loại ký tự văn bản (chữ hoa, thƣờng).
- PostgreSQL còn đƣợc biết đến với khả năng mở rộng để nâng cao cả về số lƣợng dữ liệu quản lý và số lƣợng ngƣời dùng truy cập đồng thời.
2.1.2. Các chức năng cơ bản của hệ quản trị CSDL PostgreSQL.
PostgreSQL tuân thủ theo các các tiêu chuẩn về hệ quản trị cơ sở dữ liệu. bên cạnh đó còn hỗ trợ đầy đủ cho các truy vấn con (bao gồm cả subselects trong mệnh đề FROM), xác nhận đọc và mức độ biệt lập giao dịch riêng. Đồng thời, PostgreSQL có đầy đủ danh mục để hỗ trợ nhiều lƣợc đồ (Diagram) cho mỗi cơ sở dữ liệu. Các cơ sở dữ liệu của hệ quản trị PostgreSQL cũng có thể truy cập thông qua các scheme nhƣ tiêu chuẩn của ngôn ngữ truy vấn SQL.
Các tính năng toàn vẹn dữ liệu bao gồm khóa chính, khóa ngoại, tầng cập nhật / xóa, kiểm tra hạn chế, ràng buộc duy nhất, và những hạn chế không null.
PostgreSQL hỗ trợ compound, unique, partial, và functional indexes mà ta có thể sử dụng các phƣơng thức nhƣ B-tree, R-tree, hash hoặc GiST. Gist lập chỉ mục (Generalized Search Tree) trong đó tập hợp một mảng rộng các thuật toán khác nhau nhằm sắp xếp và tìm kiếm trên các cây bao gồm B-tree, B+- tree, R-tree, partial sum trees, ranked B+- trees.
Các tính năng khác bao gồm thừa kế (inheritance). Tính năng này cho phép thiết kế cơ sở dữ liệu mới lấy từ các bảng khác, xử lý chúng nhƣ các lớp cơ sở, PostgreSQL hỗ trợ cả đơn và đa thừa kế. Hệ thống quy định, còn đƣợc gọi là hệ thống viết lại truy vấn, cho phép các nhà thiết kế cơ sở dữ liệu tạo ra các quy tắc xác định các hoạt động cụ thể cho một bảng hoặc Các khung nhìn (view), và tự động chuyển đổi chúng thành hoạt động thay thế khi chúng đƣợc xử lý. Các đối tƣợng sử dụng tham số Listen và Message để liên lạc theo cách ngang hàng và phối hợp sự kiện cơ sở dữ liệu.
PostgreSQL đƣợc sử dụng thông qua giao diện của các ngôn ngữ C / C + +, Java,. Net, Perl, Python, Ruby, Tcl, ODBC…
Trigger và các thủ tục lƣu trữ có thể đƣợc viết bằng C thêm vào cơ sở dữ liệu nhƣ là một thƣ viện, cho phép linh hoạt mở rộng khả năng của mình.
PostgreSQL cho phép phát triển để xác định và tạo ra các kiểu dữ liệu riêng cùng với việc hỗ trợ xậy dựng các chức năng với những toán tử mới nhằm sử dụng hiệu quả.
2.1.3. Các lệnh thao tác với hệ quản trị CSDL Postgresql
Thao tác chính với cơ sở dữ liệu postgresql là kiểu giao diện chính. Chƣơng trình dòng lệnh plsql. Ngƣời dùng có thể thực hiện truy vấn SQL một cách trực tiếp và thực thi chúng từ tập tin, psql cung cấp lƣợng lớn các tùy chọn lệnh, tạo điều kiện tốt để viết các câu lệnh truy vấn và tự động hóa nhiều chƣơng trình. Cấu trúc câu lệnh: psql[option...][dname][username].
Postgresql cho phép thực hiện các truy vấn tƣơng tác và thực hiện các kết quả truy vấn.
Kết nối với CSDL là thao tác đầu tiên cần phải làm trƣớc khi thực hiện các thao tác khác với psql . Để kết nối đến CSDL yêu cầu đầu tiên là phải biết tên của CSDL, địa chỉ host và cổng của máy chủ và tên ngƣời dùng mà chúng ta sẽ kết nối .psql cung cấp các tham số cho việc thao tác kết nối nhƣ:
-d (tên CSDL), -h(địa chỉ host), -p(địa chỉ cổng), U(tên người dùng).
PostgreSQL có thể đƣợc viết hoàn toàn bằng ngôn ngữ C. Hàm do ngƣời dùng định nghĩa có thể viêt bằng ngôn ngữ lập trình C hoặc ngôn ngữ lập trình cao cấp hơn C nhƣ C++. Thông thƣờng, hàm do ngƣời dùng định nghĩa đƣợc thêm vào PostgreSQL bằng cách sử dụng bộ nạp đối tƣợng (thƣ viện chia sẻ). PostgreSQL cung cấp 4 kiểu hàm sau:
- Các hàm theo ngôn ngữ truy vấn (các hàm đƣợc viết trong SQL): Các hàm này thực hiện một dãy các câu lệnh truy vấn và trả về kết quả của truy vấn cuối cùng trong danh sách truy vấn.
- Các hàm theo ngôn ngữ thủ tục (các hàm đƣợc viết trong PL/pgSQL hay PL/Tcl): PostgreSQL cho phép các hàm do ngƣời dùng định nghĩa đƣợc viết dƣới dạng một ngôn ngữ khác bên cạnh SQL và C. Ngôn ngữ này đƣợc gọi là các ngôn ngữ thủ tục. Ngôn ngữ thủ tục không đƣợc xây dựng sẵn trong PostgreSQL server, nó đƣợc đƣa ra dƣới dạng các module có thể đƣợc nạp.
- Các hàm nội tại (internal function): là các hàm đƣợc viết trong C và đã đƣợc liên kết tĩnh tới PostgreSQL server. Thông thƣờng, các hàm nội tại sẽ đƣợc khai báo trong quá trình khởi tạo các cụm cơ sở dữ liệu, tuy nhiên ngƣời sử dụng có thể sử dụng câu lệnh CREATE FUNCTION để tạo bí danh cho một hàm nội tại.
- Các hàm theo ngôn ngữ C (C-language function): các hàm này đƣợc biên dịch thành đối tƣợng động hay còn đƣợc gọi là các thƣ viện chia sẻ và có thể đƣợc gọi tới theo yêu cầu của server. Các đối tƣợng động này là sự khác nhau giữa hàm viết trong ngôn ngữ C và các hàm nội tại.
Một số các lệnh thƣờng đƣợc sử dụng trong quá trình thao tác với hệ quản trị csdl PostgreSQL. Trong đó các Option (tùy chọn) của lệnh psql .
Option (tùy chọn) Giải thích
-c command --command command
Thực thi một chuỗi lệnh, lệnh sau đó thoát
-d dbname
--dbname dbname Chỉ ra tên CSDL kết nối.
-f filename --file filename
Xử lý tập tin xác định là filename, sau khi xử lý psql sẽ thoát.
-h hostname
--host hostname Chỉ định tên máy chủ Hostname
-p port
--port port Chỉ ra cổng kết nối CSDL mặc định là 5432
-U username --username username
Chỉ ra username đang kết nối với CSDL mặc định là user hiện tại
-?
--help Danh sách thực đơn trợ giúp sau đó thoát
-T table_options --table-attr table_options
Cho phép tùy chọn sử dụng các thẻ HTML Hình 2.1: Một số lệnh trong hệ quản trị CSDL PostgreSQl
Sau khi thao tác kết nối đến CSDL để sử dụng các câu lệnh trong thao tác trong psql, chúng ta sử dụng các option (tùy chọn) các nhóm lệnh tƣơng ứng
[18].
Nhóm lệnh chung trong psql.
Tên lệnh Chức năng sử dụng
\c[ DBname] Kết nối đến CSDL
\cd[Dir] Thay đổi thƣ mục làm hiện tại
\connect (or \c) [ dbname
[ username ] [ host ] [ port ] ] Kết nối đến máy chủ, thành công sẽ đóng lại
\C [ title ] Thiết lập tiêu đề của các bảng
\h Trợ giúp cú pháp lệnh SQL, chọn *khi muốn
xem tất cả
Hình 2.2: Nhóm lệnh chung trong psql
Nhóm lệnh truy vấn bộ đệm của psql
Tên lệnh Chức năng sử dụng
\e[file] Chỉnh sửa truy vấn bộ đệm hoặc file với bộ soạn thảo
\g[file] Gửi truy vấn bộ đệm đến máy chủ và kết quả ra file
\s[file] Hiển thị lịch sử lệnh hoặc lƣu nó lại vào một file
\w [ title ] Viết truy vấn bộ đệm vào file câu lệnh thực hiện ngay trƣớc
đó
\r Khởi động lại truy vấn
\p Đƣa ra nội dung của truy vấn bộ đệm(thực hiện ngay trƣớc
đó)
Hình 2.3: Nhóm lệnh truy vấn bộ đệm của psql
Nhóm lệnh vào/ra của psql
Tên lệnh Chức năng sử dụng
\echo[string] Viết ra chuỗi , kết quả ở màn hình
\i[file] Thực thi lệnh từ file
\o[file] Gửi tất cả truy vấn vào file
Hình 2.4: Nhóm lệnh vào/ra của psql
Nhóm lệnh định dạng
Tên lệnh Chức năng sử dụng
\a Căn lề
\s[string] Đƣa ra tiêu đề hoặc chuỗi đã nhập
\f[string] Đƣa ra dấu ngăn cách về chuỗi đã nhập
Thao tác tạo và sử dụng hàm
Sử dụng file viết bằng ngôn ngữ C thì chúng ta cần biên dịch chúng thành file có mở rộng là “.dll” nếu thao tác trong môi trƣờng Window còn file có mở rộng là “.so”
Sau khi đã biên dịch file .c thành file .so, đến đây tạo và sử dụng hàm mở rộng không còn là việc khó khăn. Việc tạo và sử dụng hàm mở rộng đƣợc thao tác bằng ngôn ngữ SQL. Nhƣ đã giới thiệu phần trên, để tạo hàm mở rộng chúng ta dùng lệnh CREATE FUNCTION
Ví dụ:
CREATE FUNCTION add_one(integer) RETURNS integer AS „funcs.so‟,‟add_one‟ LANGUAGE „C‟ ;
Cú pháp lệnh:
CREATE FUNCTION [tên hàm] RETURNS [kiểu trả về] AS [file.so], [tên hàm sử dụng] LANGUAGE [ngôn ngữ].
Việc xây dựng hàm mở rộng trong postgreSQL đƣợc thực hiện một lần, nhƣng sẽ đƣợc sử dụng trong bất cứ lần khác bởi vì, sau khi biên dịch dạng file .so đã luôn tồn tại trong thƣ mục /usr/lib/pgsql/.
2.1.4. Cài đặt hệ quản trị CSDL PostgreSQL.
PostgreSQL có thể chạy trên nhiều hệ điều hành nhƣ Linux, UNIX và Windows. Thực hiện việc cài đặt hệ quản trị CSDL PostgreSQL trong hệ điều hành Window. Tải phiên bản Postgresql-8.4 sau đó thực hiện các bƣớc sau để cài đặt hệ quản trị cơ sở dữ liệu Postgresql.
Download tài liệu và phần mềm hệ quản trị CSDL PostgreSQL tại đƣờng dẫn sau: http://www.postgresql.org/ hoặc http://www.pgadmin.org.
Bƣớc 1: Cài đặt Postgresql-8.4.17-1-windows và postgis_1_5_pg84 Bƣớc 2: Mở pgAdmin3 tạo cơ sở dữ liệu có tên xebuyt
Có 2 cách thực hiện nhập dữ liệu Cách 1: Nhập dữ liệu qua ứng dụng
Bƣớc 3: Chạy ứng dụng shp2pgsql-gui để nhập dữ liệu và cơ sở dữ liệu vừa tạo (C:\Program Files\PostgreSQL\8.4\bin\postgisgui\shp2pgsql-gui)
Ví dụ 1: Nhập dữ liệu bản đồ hành chính Việt Nam.
Shape File: Chọn đến đƣờng dẫn chứa file .shp ở đây là file VNM_adm0.shp
(file.shp về bản đồ số ViệtNam tại http://gpsvietnam.googlepages.com/maps)
PostGIS Connection: Kết nối tới cơ sở dữ liệu Destination Table: đặt tên là vietnam_adm0 Options…: Để là LATIN1
Import: Hoàn thành nhập file VNM_adm0.shp vào cơ sở dữ liệu, thành công nếu thông báo Shapefile import completed.
Cách 2: Nhập dữ liệu qua dòng lệnh.
Sau khi nhập xong dữ liệu trong hệ quản trị cơ sở dữ liệu PostgreSQL thực hiện các truy vấn không gian:
Ví dụ2: Tính tổng chiều dài biên giới đƣờng bộ của Việt Nam ( Với file
CSDL VNM_adm0.shp trong ví dụ 1 ).
SELECT t1.cntry_name, sum(ST_Length(ST_Intersection(t1.the_geom, t2.the_geom))) "chieu dai bien gioi"
FROM thegioi_borders t1, thegioi_borders t2
WHERE ST_Touches(t1.the_geom, t2.the_geom) and t1.cntry_name = 'Vietnam' GROUP BY t1.cntry_name
Kết quả kiểm tra
Hình 2. 6. Kết quả kiểm tra tính tống chiều dài biên giới đường bộ Việt Nam
Ví dụ 3: Tính tổng độ dài đƣờng bộ chạy qua địa phận Hà Nội (Với file
SELECT t1.name_2, SUM(ST_Length(ST_Intersection(t1.the_geom, t2.the_geom))) "chieu dai"
FROM vietnam_adm2 t1, vietnam_road t2
WHERE ST_Intersects(t1.the_geom, t2.the_geom) AND t1.name_2 like 'Hà N?i%'
AND t2.f_code_des like 'Road' GROUP BY t1.name_2
Kết quả kiểm tra câu truy vấn.
2.2. POSTGIS
2.2.1. Giới thiệu về POSTGIS .
PostGis đƣợc Refraction Research Inc phát triển nhƣ một dự án nghiên cứu công nghệ CSDL không gian. PostGis hỗ trợ đối tƣợng địa lý cho CSDL đối tƣợng quan hệ PostgreSQL, cho phép PostgreSQL sử dụng nhƣ một CSDL không gian phụ trợ cho các hệ thống thông tin địa lý GIS(Geographic Information System).
PostGIS là một mã nguồn mở, mở rộng không gian cho PostgreSQL. CSDL không gian trong PostGIS đƣợc sử dụng cho hiệu suất sử dụng cao đa ngƣời dùng truy cập đến tập dữ liệu có tính liền mạch. Nếu bạn quản lý số lƣợng lớn đọc/ghi dữ liệu không gian, thì việc sử dụng CSDL không gian có thể cải thiện đƣợc tốc độ truy cập, dễ dàng quản lý và đảm bảo tính toàn vẹn dữ liệu. PostGIS cung cấp việc tạo và thao tác trên CSDL không gian nhƣng nó bổ sung thêm các kiểu dữ liệu không gian và các mối quan hệ giữa các kiểu dữ liệu đó. PostGIS đƣợc phát hành lần đầu tiên vào năm 2001, và hiện đang đƣợc sử dụng trên khắp thế giới nhƣ một máy chủ hoạt động cho các đối tƣợng không gian.
2.2.2. Chức năng cơ bản của Postgis.
PostGIS hỗ trợ tất cả các hàm (function) và các đối tƣợng (object) định nghĩa trong OpenGIS (Simple Feature For SQL). Giống nhƣ Oracle, DB2 và SQL server.
Đối với truy vấn không gian là thực hiện các câu lệnh truy vấn đƣợc thực hiện trên bảng không gian trong CSDL để tìm ra mối quan hệ giữa các đối tƣợng trong không gian, mối quan hệ đó có thể là sự giao nhau, tính khoảng cách, tính diện tích, tính chu vi, tính chiều dài…và các câu lệnh truy vấn đƣợc viết ra dễ dàng hơn nhờ các hàm hỗ trợ sẵn của PostGIS. PostGIS cung cấp các nhóm hàm để hỗ trợ việc truy vấn nhƣ nhóm hàm xác định mối quan hệ không gian, nhóm hàm trả về đối đối tƣợng mới…Nhờ đó, việc thực hiện truy vấn trong không gian sẽ trở nên dễ dàng và dễ thao tác hơn.