Cơ sở dữ liệu quan hệ truyền thống không thể mô tả được đầy đủ các thuộc tính của các đối tượng không gian, người nghiên cứu về GIS phải nghiên cứu các mô hình cơ sở dữ liệu quan hệ mở r
Trang 11 ĐẶT VẤN ĐỀ
Vấn đề tổ chức, xây dựng và quản lý dữ liệu là một trong những vấn đề cơ bản, đóng vai trò cực kỳ quan trọng trong các ứng dụng GIS Dữ liệu được mô tả đầy đủ, quản lý chặt chẽ, trong sáng sẽ giúp cho các ứng dụng được vận hành trơn tru
Cơ sở dữ liệu quan hệ truyền thống không thể mô tả được đầy đủ các thuộc tính của các đối tượng không gian, người nghiên cứu về GIS phải nghiên cứu các mô hình
cơ sở dữ liệu quan hệ mở rộng Việc giải quyết các bài tập trong môn học “Cơ sở dữ liệu không gian” là một trong những phương pháp nghiên cứu và tiếp cận với các mô hình dữ liệu không gian
Tên đề tài: “Mô phỏng mô hình quản lý hoạt động của hệ thống xe bus ở khu vực trung tâm thành phố Hồ Chí Minh”
2 NỘI DUNG
2.1 Mô tả các thực thể
Trong mô hình có các thực thể chính sau đây:
bus_station (Trạm xe bus): là đối tượng không gian dạng điểm:
gid Tự sinh ra khi chuyển từ shape file sang
id: Mã trạm, kiểu varchar(10)
name: Tên trạm, kiểu varchar(50)
the_geom: POINT()
bus_route (Tuyến xe bus): là đối tượng không gian dạng đường:
gid Tự sinh ra khi chuyển từ shape file sang
id: Mã trạm, kiểu varchar(10)
name: Tên trạm, kiểu varchar(50)
the_geom: MULTILINESTRING()
administrative (Đơn vị hành chính): là đối tượng không gian dạng vùng
gid Tự sinh ra khi chuyển từ shape file sang
name: Tên trạm, kiểu varchar(50)
the_geom: MULTIPOLYGON()
bus_cooperative (Hợp tác xã xe bus): là một kiểu dữ liệu thông thường
id Mã Hợp tác xã, kiểu varchar(10)
name: Tên hợp tác xã, công ty vận tải, kiểu varchar(50)
quantity_of_bus: số lượng xe bus, kiểu interger
addres: Địa chỉ, kiểu varchar(50) Ngoài ra còn có 2 bảng geometry_columns và spatial_ref_sys dùng để mô tả các kiểu dữ liệu không gian và tham chiếu không gian Một cơ sở dữ liệu thông thường trong PostgeSQL muốn tạo được các đối tượng không gian cần phải nạp 2 bảng này
Trang 2vào cơ sở dữ liệu của mình được thông qua hai file: lwpostgis.sql và spatial_ref_sys.sql
Đồng thời một số mối quan hệ nhiều nhiều giữa các đối tượng cũng sinh ra các
bảng dữ liệu thuộc tính (mô tả chi tiết bên dưới)
2.2 Mô tả các quan hệ giữa các thực thể:
- bus_station và bus_route: Quan hệ nhiều – nhiều (kí hiệu M – N) (Quan hệ không gian)
+ Một trạm xe bus có thể có nhiều tuyến đi qua
+ Một tuyến xe bus có thể đi qua nhiều trạm khác nhau
- bus_route và administrative: Quan hệ nhiều – nhiều (kí hiệu M – N) (Quan hệ không gian)
+ Trên một đơn vị hành chính (quận, huyện) sẽ có nhiều tuyến xe bus đi qua
+ Một tuyến xe bus có thể chạy qua nhiều đơn vị hành chính (quận, huyện) khác nhau
- Bus_Station và Administrative: Quan hệ một – nhiều (kí hiệu 1 – M)
+ Một trạm xe bus chỉ thuộc một đơn vị hành chính (quận, huyện) nhất định
+ Trên một đơn vị hành chính (quận, huyện) người ta có thể đặt nhiều trạm xe bus khác nhau
- Bus_Route và Bus_Cooperative: Quan hệ nhiều – nhiều (kí hiệu M – N)
+ Một tuyến xe bus bất kỳ có thể được đăng ký tham gia bời nhiều hợp tác xã xe bus khác nhau
+ Một hợp tác xã xe bus có thể đăng ký hoạt động trên nhiều tuyến xe bus
Trang 32.3 ER diagram with pictogram:
2.4 ER schema:
bus_station
gid
(serial)
id
(varchar)
name (varchar)
the_geom
(point)
1 HB.001 Hong Bang POINT
2 BTH.001 Ba Thang Hai POINT
3 LDH.001 Le Dai Hanh POINT
bus_route
gid
(integer)
id
(varchar)
name (varchar)
the_geom
(mutilinestring)
1 R.001 Hong Bang – Cong vien Dam Sen MULTILINESTRING
2 R.002 Ben xe Cho Lon – Thao Cam Vien MULTILINESTRING
3 R.003 Ben Thanh – Ben xe mien Dong MULTILINESTRING
Trang 4Bus_Cooperative
id
(varchar)
name
(varchar)
quantity_of_bus
(interger)
address
(varchar)
CPML Cong ty co phan van
tai Mai Linh
30 400A, Le Hong Phong, Quan
10 HTXQT Hop tac xa van tai xe
buyt Quyet Thang
15 78, An Duong Vuong, Quan 5
XKCL Cong ty xe khach Cho
Lon
15 205, Phu Huu, Quan 5
administrative
gid
(serial)
name
(varchar)
Shape
(Polygon)
1 Quan 1 MULTIPOLYGON
2 Quan 10 MULTIPOLYGON
3 Quan Tan Binh MULTIPOLYGON
route_crosses_station
id
(serial)
route_id
(varchar)
station_name (varchar)
1 R.001 Hong Bang
2 R.002 Dai hoc Su Pham
3 R.003 Ben xe mien Dong
route_crosses_station
id
(serial)
coop_id
(varchar)
route_name (varchar)
1 CPML Hong Bang – Cong vien Dam Sen
2 HTX195 Cho Lon – Cho Go Vap
3 HTXBM Ben Thanh – San bay Tan Son Nhat
Trang 52.5 Danh sách một số câu hỏi truy vấn gợi ý:
Liệt kê tất cả các trạm mà tuyến ‘Ben xe Cho Lon – Thao Cam Vien’ đi qua?
SELECT c.station_name, r.name AS Route_Name
FROM route_crosses_station c, bus_route r
WHERE (r.name = 'Ben xe Cho Lon - Thao Cam Vien')
AND (c.route_id=r.id);
station_name | route_name
-+ -
An Dong Plaza | Ben xe Cho Lon - Thao Cam Vien
Dai hoc Su Pham | Ben xe Cho Lon - Thao Cam Vien
Cong vien Tao Dan | Ben xe Cho Lon - Thao Cam Vien
An Duong Vuong | Ben xe Cho Lon - Thao Cam Vien
Ben xe Cho Lon | Ben xe Cho Lon - Thao Cam Vien
Hung Vuong Plaza | Ben xe Cho Lon - Thao Cam Vien
Dinh Thong Nhat | Ben xe Cho Lon - Thao Cam Vien
Dai truyen hinh Tp.HCM | Ben xe Cho Lon - Thao Cam Vien
Nga Sau Cong Hoa | Ben xe Cho Lon - Thao Cam Vien
Thao Cam Vien | Ben xe Cho Lon - Thao Cam Vien
Chau Van Liem | Ben xe Cho Lon - Thao Cam Vien
Nguyen Trai | Ben xe Cho Lon - Thao Cam Vien
(12 rows)
Liệt kê tất cả các trạm xe bus nằm ở Quận 1?
SELECT s.name
FROM bus_station s
WHERE ST_Contains(
(SELECT the_geom FROM administrative WHERE name = 'Quan 1') ,s.the_geom);
name
-
Cong vien Tao Dan
Dinh Thong Nhat
Dai truyen hinh Tp.HCM
Thao Cam Vien
Cho Ben Thanh
Nguyen Thi Minh Khai
Cong vien Le Van Tam
(7 rows)
Liệt kê tất cả các tuyến xe bus đi qua Quận 5?
SELECT r name
FROM bus_route r
WHERE ST_Crosses(r.the_geom,
(SELECT the_geom FROM administrative WHERE name = 'Quan 5') );
name
-
Ben xe Cho Lon - Thao Cam Vien
Cho Lon - Cho Go Vap
(2 rows)
Trang 6 Tính tổng chiều dài tất cả các tuyến xe bus?
SELECT sum(ST_Length(the_geom)) AS km_bus
FROM bus_route;
km_bus
-
53.7695054045018
(1 row)
Quận nào có nhiều trạm xe bus nhất?
SELECT a.name AS District_Name
FROM administrative a, bus_station s
WHERE ST_Contains(a.the_geom,s.the_geom)
ORDER BY District_Name
DESC LIMIT 1;
district_name
-
Quan Tan Binh
(1 row)
Quận nào có nhiều tuyến xe bus đi qua nhất?
SELECT a.name AS District_Name
FROM administrative a, bus_route r
WHERE ST_Crosses(r.the_geom,a.the_geom)
ORDER BY District_Name
DESC LIMIT 1;
district_name
-
Quan Tan Binh
(1 row)
Tuyến xe bus nào có lộ trình dài nhất?
SELECT name, ST_length(the_geom) AS Length_Km
FROM bus_route
ORDER BY Length_Km
DESC LIMIT 1;
name | length_km
-+ -
Cho Lon - Cho Go Vap | 11.9828896181423
(1 row)
Hợp tác xã nào có nhiều xe nhất?
SELECT name, quantity_of_bus
FROM bus_cooperative
ORDER BY quantity_of_bus
DESC LIMIT 1;
name | quantity_of_bus
-+ -
Cong ty co phan van tai Mai Linh | 30
(1 row)
Trang 7 Hai tuyến xe bus ‘Cho Lon – Cho Go Vap’ và ‘Ben Thanh – San bay Tan Son Nhat’ có cắt nhau không?
SELECT ST_intersects(
(SELECT the_geom FROM bus_route WHERE name ='Cho Lon - Cho Go Vap'), (SELECT the_geom
FROM bus_route WHERE name ='Ben Thanh - San bay Tan Son Nhat') );
st_intersects
-
t
(1 row)
Liệt kê tất cả những tuyến xe bus giao cắt với tuyến ‘Ben Thanh – San bay Tan Son Nhat’?
SELECT name
FROM bus_route r
WHERE ST_intersects(the_geom,
(SELECT the_geom FROM bus_route
WHERE name ='Ben Thanh - San bay Tan Son Nhat'))
AND (name !='Ben Thanh - San bay Tan Son Nhat');
name
-
Ben xe Cho Lon - Thao Cam Vien
Ben Thanh - Ben xe mien Dong
Cho Lon - Cho Go Vap
(3 rows)
Tìm tuyến xe bus đi qua nhiều quận nhất?
SELECT r.name, COUNT(distinct a.name) AS district
FROM administrative a, bus_route r
WHERE st_crosses(r.the_geom,a.the_geom)
GROUP BY r.name
ORDER BY district DESC LIMIT 1;
name | district
-+ -
Cho Lon - Cho Go Vap | 6
(1 row)
Tìm tuyến xe bus đi qua nhiều trạm nhất?
SELECT r.name AS Route_Name,
COUNT(c.station_name) AS Number_Station
FROM route_crosses_station c, bus_route r
WHERE c.route_id=r.id
GROUP BY r.name
ORDER BY Number_Station DESC LIMIT 1;
route_name | number_station
-+ -
Ben xe Cho Lon - Thao Cam Vien | 12
(1 row)
Trang 8 Tính khoảng cách giữa hai trạm ‘Dai hoc Bach Khoa’ va ‘Dai hoc Su Pham’?
SELECT ST_distance(
(SELECT the_geom FROM bus_station WHERE name = 'Dai hoc Bach Khoa'), (SELECT the_geom
FROM bus_station WHERE name ='Dai hoc Su Pham'))
AS Distance_Km;
distance_km
-
3.00883091654776
(1 row)
Tính từ trạm ‘Dai hoc Bach Khoa’, liệt kê tất cả các trạm trong bán kính 2 km? Tính khoảng cách đến mỗi trạm đó và sắp xếp theo thứ tự từ gần đến xa?
SELECT id,name,ST_distance(
(SELECT the_geom FROM bus_station WHERE name ='Dai hoc Bach Khoa'),the_geom)
AS Distance_Km from bus_station WHERE (ST_DWithin(
(SELECT the_geom FROM bus_station WHERE NAME ='Dai hoc Bach Khoa'), the_geom,2)) AND (name !='Dai hoc Bach Khoa')
ORDER BY Distance_Km;
id | name | distance_km
-+ -+ -
LDH.001 | Le Dai Hanh | 0.677032874539835
LTK.001 | Ly Thuong Kiet | 1.03114751093211
LLQ.002 | Lac Long Quan | 1.09247080604834
BTH.002 | Ba Thang Hai | 1.15923686339518
BT.001 | Binh Thoi | 1.42901293042356
OIK.001 | Cong vien Dam Sen | 1.78699808208386
CMT8.003 | Cach Mang Thang Tam | 1.8696803311251
BTH.001 | Ba Thang Hai | 1.90253048453201
HV.001 | Hung Vuong | 1.94893975059578
HV.002 | Hung Vuong Plaza | 1.95264094065191
(10 rows)
Tính chiều dài trung bình của các tuyến xe bus?
SELECT AVG(ST_length(the_geom))
AS Distance_Average_Km
FROM bus_route;
distance_average_km
-
8.96158423408364
(1 row)
Trang 9 Tìm trên quận 5 tuyến và xe của ‘Cong ty co phan van tai Mai Linh’ có ID là
‘CPML’?
SELECT distinct r.name
FROM bus_route r, bus_cooperative c, route_of_cooperative rc WHERE ST_Crosses(r.the_geom,
(SELECT the_geom FROM administrative WHERE name ='Quan 5')) AND (c.id='CPML')
AND (c.id=rc.coop_id);
name
-
Ben xe Cho Lon - Thao Cam Vien
Cho Lon - Cho Go Vap
(2 rows)
2.6 Sử dụng Quantum GIS để hiển thị dữ liệu không gian
2.6.1 Giới thiệu
Quantum GIS hay còn gọi là Qgis là phần mềm GIS mã nguồn mở với các tính năng thao tác trên các lớp bản đồ chủ yếu dưới dạng vector
Dự án Qgis được khởi đầu vào tháng 5 năm 2002 Ý tưởng được hình thành vào tháng 2 năm đó khi Gary Sherman nỗ lực để tạo ra một phần mềm hiển thị các file dữ liệu GIS chạy trên hệ điều hành mã nguồn mở Linux và phần mềm đã được xây dựng trên cơ sở ngôn ngữ lập trình C++ Đến tháng 6 năm 2002, được đăng ký tại SourceForge
Giao diện chính của Quantum GIS
2.6.2 Tính năng của Quantum GIS
Trang 10Qgis có thể đọc được nhiều dạng dữ liệu: các lớp bản đồ tạo bởi ArcView, MapInfo và GRASS, các bảng thông tin tạo bởi PostgreSQL (thông qua PostGIS)
Số hóa bản đồ và các công cụ kết nối với GPS
Các tính năng biên tập bản đồ, tạo lưới kinh vĩ độ, chèn thang tỉ lệ, mũi tên chỉ hướng bắc
Phân tích không gian nhờ PostGIS hoặc kết nối với GRASS GIS
Thay đổi các tính năng thông qua cơ chế plug-in
2.6.3 Các thao tác kết nối với cơ sở dữ liệu PostGIS
- Chọn Layer\ Add PostGIS Layer
- Tại cửa sổ Add PossGIS Table, chọn New để tạo kết nối mới, điền đầy đủ các thông số vào và sau đó thực hiện kết nối
Ví dụ:
Name: Ket noi voi PostGIS <tên phiên làm việc, tự đặt>
Host: localhost <địa chỉ lưu trữ CSDL để kết nối>
Database baitap <tên cơ sở dữ liệu>
Port 5432 <cổng để truy cập>
Username: postgres <tên người sử dụng>
Password: ********* <mật khẩu>
Kết nối với cơ sở dữ liệu postGIS
Trang 11- Sau đó chọn đối tượng không gian để hiện thị
- Ta có thể thực hiện các câu truy vấn đơn giản khi hiển thị dữ liệu
- Quantum GIS hỗ trợ một số chức năng cơ bản của các phần mềm GIS: Zoom, Pan, Phân loại đối tượng dựa trên thuộc tính,…
Hiển thị dữ liệu không gian
TÀI LIỆU THAM KHẢO
[1] Đỗ Trung Tuấn (2004) Cơ sở dữ liệu Nhà xuất bản Đại học quốc gia thành
phố Hồ Chí Minh, thành phố Hồ Chí Minh
[2] Ralf Hartmut Guting Tutorial Spatial Database System Germany
[3] PostGIS 1.3.5 Manual
[4] Quantum GIS Documentation Version 1.01
[5] Website Bách khoa toàn thư: http://en.wikipedia.org/
[6] Website SQL Tutorial: http://www.w3schools.com/SQL/