- pgsql2shp
Là công cụ thực thi chuyển đổi từ dữ liệu không gian trong cơ sở dữ liệu PostGIS sang dữ liệu cấu trúc. Dữ liệu thông thường (không có trường dữ liệu không gian) cũng có thể được xử lý trong công cụ này. Pgsql2shp thường được dùng để tạo ra các ứng dụng web.
Các hàm cơ bản đƣợc sử dụng trong PostGIS
- Các hàm điều khiển
AddGeometryColoum() : thêm một cột giá trị hình học vào bảng đã tồn tại trong việc tạo bảng cơ sở dữ liệu không gian
Cú pháp: text AddGeometryColumn(varchar table_name, varchar column_name, integer srid, varchar type, integer dimension);
text AddGeometryColumn(varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension);
Schema_name: là tên của bảng sơ đồ, thường mặc định khi cài đặt PostgreSQL Srid : giá trị là một sốnguyên, là giá trị tham chiếu không gian.
Type : xác định kiểu hình học cho cột cần thêm (POLYGON, POINT,
MULTIPOINT, MULTILINESTRING, …)
Dimention : xác định chiều hình học, chiều tương ứng với kiểu hình học.
Ví dụ: Tạo bảng hình học có tên là my_spatial_table (id serial);
Thêm cột hình học (the_geom) có kiểu POINT, trong không gian 2D :
4326, ‟POINT‟, 2);
DropGeometryColoum(): loại bỏ cột hình học từ bảng cơ sở dữ liệu không gian
Cú pháp : text DropGeometryColumn(varchar table_name, varchar
column_name);
text DropGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);
Ví dụ:
SELECT DropGeomtryColumn(„my_schema‟,‟my_spatial_table‟,‟the_geom‟);
- Các hàm xác định mối quan hệ
ST_Equals() : Giá trị trả về là True nếu đưa ra những hình coi là bằng nhau trong không gian (sắp xếp của các điểm có thể khác nhau nhưng cấu trúc hiển thị hình học lại giống nhau)
Cú pháp: boolean ST_Equals(geometry A, geometry B);
Ví dụ: SELECT ST_Equals(ST_GeoFromText(„LINESTRING (0 0, 10 10)‟), ST_GeoFromText(„LINESTRING (0 0, 5 5, 10 10)‟);
Giá trị trả về là True vì : LINESTRING(0 0, 10 10) và LINESTRING (0 0, 5 5, 10 10) đều trả về đọan thẳng từ điểm (0, 0) đến điểm (10, 10)
ST_Disjoint() : trả về True nếu các hình không giao nhau trong không gian (tách biệt hẳn với nhau).
Cú pháp : boolean ST_Disjoint (geometry A, geometry B);
Ví dụ: SELECT ST_Disjoint(„POINT (0 0)‟ geometry, „LINESTRING (2 0, 0 2)‟ geometry);
Giá trị trả về là True vì : điểm (0, 0) và đoạn thẳng nối 2 điểm (2, 0) và điểm (0, 2) Không có bất kỳ điểm nào chung.
ST_Intersects() : trả về True nếu các hình gọi là giao nhau trong không gian và trả về False nếu chúng không có bất cứ điểm nào giao nhau.
Cú pháp : boolean ST_Intersects(geometry A, geometry B);
Ví dụ: SELECT ST_Intersects(„POINT(0 0)‟ geometry, „LINESTRING (2 0, 0 2)‟ geometry);
Giá trị trả về là False vì : ST_Disjoint(„POINT(0 0)‟ geometry, „LINESTRING (2 0, 0 2)‟ geometry); trả về giá trị True, hay nói cách khác là điểm (0, 0) và đoạn thẳng (2,0) và điểm (0,2) không có bất kỳ điểm giao nhau nào.
ST_Distance() : trả về khoảng cách giữa 2 điểm, giữa điểm và đường trong không gian 2D. Đơn vịmặc định là met.
Cú pháp : float ST_Distance (geometry g1, geometry g2); Ví dụ: Khoảng cách của 2 điểm POINT (0 0) và POINT (3 4); SELECT ST_Distance („POINT(0 0)‟,‟POINT(3 4)‟);
st_distance= 5;
Khoảng cách từ điểm POINT(0 0) đến đường LINESTRING(0 3, 3 4); st_distance = 3;
ST_Area() : trả về diện tích của hình nếu nó là POLYGON hoặc
MULTIPOLYGON. Đơn vị mặc định là m2
Cú pháp : float ST_Area(geometry g1);
ST_Length() : trả về độ dài 2d của hình nếu chúng là LINESTRING hoặc MULTILINESTRING. Đơn vị mặc định của độ dài là meter.
Cú pháp : float ST_Length(geometry Linestring);
ST_Perimeter() : trả về chu vi của hình nếu nó có dạng Polygon hoặc Multipolygon. Đơn vị mặc định là met.
Cú pháp : float ST_Perimeter(geometry g1);
- Các hàm trả về giá trị là hình học
ST_Intersection() : trả về một hình, hiển thị phần chung giữa hình A và hình B. Nếu hình A và hình B không có bất kỳ điểm chung thì trảvề đối tượng hình rỗng.
Cú pháp : geometry ST_Intersection(geometry A, geometry B); Ví dụ: SELECT ST_AsText(ST_Intersection(„POINT(0 0)‟ geometry, „LINESTRING (0 0,0 2)‟ geometry));
Giá trịtrảvề: POINT(0 0).
ST_Difference() : trả về một hình hiển thị phần của hình A mà không giao với hình B. (ST_Difference() = GeometryA – ST_Intersection(A, B) )
Nếu A hoàn toàn nằm trong B, thì A và B không có điểm khác biệt, nghĩa là, hàm ST_Difference() trả về giá trị rỗng.
Cú pháp : geometry ST_Difference(geometry geomA, geometry geomB); Ví dụ : SELECT ST_AsText (ST_Difference(
ST_GeomFromText(„LINESTRING(50 100, 50 200)‟), ST_GeomFromText(„LINESTRING(50 50, 50 150)‟)) ); Giá trị trả về LINESTRING (50 150, 50 200).
ST_Union() : Trả về một hình hiển thị hợp của các hình. Kiểu trả về của hàm có thể là hình đơn lẻ hoặc tập hợp các hình.
Cú pháp : geometry ST_Union (geometry g1, geometry g2) Ví dụ: SELECT ST_AsText(ST_Union(ST_GeomFromText(‟POINT(1 2)‟), ST_GeomFromText(‟POINT(-2 3)‟) ) ); Giá trị trảvề: MULTIPOINT (-2 3, 1 2). SELECT ST_AsText(ST_Union(ST_GeomFromText(„POINT(1 2)‟), ST_GeomFromText(„POINT(1 2)‟))); Giá trị trảvề: POINT (1 2)
Như đã nói ở trên, dữ liệu ảnh cấu trúc dạng Raster được tổ chức dưới dạng ma trận hàng/cột các ô vuông (hay các pixel) bao gồm các thông tin liên quan. Nếu như dữ liệu cấu trúc Vector chỉ có thể hiển thị với một mục đích dữ liệu thì dữ liệu cấu trúc Raster lại có thể hiện thị rất nhiều dữ liệu với mục đích sử dụng khác nhau, ví dụ : dữ liệu về đất đai (phân loại, sử dụng); Giá trị hiển thị nhiệt độ, độ cao, hoặc các dữ liệu phổ từ hệ thống ảnh viễn thám; các dữ liệu về ảnh như ảnh vẽ hoặc ảnh scan hay các dữ liệu mang tính chất thể hiện trên diện rộng. Trong GIS, dữ liệu ảnh Raster thường được dùng với mục đích sau :
- Bản đồ/dữ liệu nền : Dữ liệu ảnh Raster có thể dùng được để làm dữ liệu nền
cho các thông tin khác cần hiển thị trên bản đồ, như dữ liệu nhà đất, dân số, sông ngòi,…
- Bản đồ biểu diễn các dữ liệu liên tục với mục đích xem xét việc lưu trữ các
thông tin liên tục thay đổi, ví dụ như dữ liệu về lượng mưa, nhiệt độ, độ ẩm, dân số - Bản đồ lấy thông tin từ các nguồn dữ liệu khác được sử dụng với mục đích phân tích chuyên sâu, điển hình là dữ liệu ảnh vệ tinh viễn thám.
Đối với dữ liệu ảnh cấu trúc Raster, mức độ chi tiết của đối tượng phụ thuộc vào kích thước của các ô trong toàn dữ liệu, có thể gọi là giá trị độ phân giải (đơn vị tính pixel). Các cell (ô vuông) phải đủ nhỏ để có thể hiện được các đặc điểm chi tiết của đối tượng nhưng cũng phải đủ lớn để đạt được hiệu quả trong việc trong việc lưu trữ và xử lý dữ liệu ban đầu. Kích thước của các cell càng nhỏ đồng nghĩa với việc dữ liệu được thể hiện một cách chi tiết, cụ thể, chính xác, dễ dàng và thuận tiện trong việc xử lý và phân tích, tuy nhiên, kích thước cell càng nhỏ tương ứng với số lượng cell rất lớn, dẫn đến việc kích thước lưu trữ của ảnh sẽ tăng lên, hệ thống sẽ tốn nhiều thời gian hơn để xử lý dữ liệu. Do vậy, việc lựa chọn giá trị độ phân giải cần phải cân nhắc dựa trên nhiều yếu tố đặt ra để đạt được hiệu quả cao nhất
Hình 2.14 – Kích thƣớc cell
2.4 Chuyển đổi dữ liệu ảnh giữa Raster và Vector
Việc chọn của cấu trúc dữ liệu dưới dạng Vector hoặc Raster tuỳ thuộc vào yêu cầu của người sử dụng, đối với hệ thống Vector, thì dữ liệu được lưu trữ sẽ chiếm diện tích nhỏ hơn rất nhiều so với hệ thống Raster, đồng thời các đường ranh giới thể hiện sẽ chính xác hơn hệ thống Raster. Ngoài ra cũng tuỳ vào phần mềm máy tính đang sử dụng mà nó cho phép nén lưu trữ dữ liệu dưới dạng Vector hay
Raster. Tuy nhiên đối với việc sử dụng ảnh vệ tinh trong GIS thì nhất thiết phải sử dụng dưới dạng Raster.
Một số bài toán và công cụ phân tích của GIS phụ thuộc chặt chẽ vào mô hình dữ liệu Raster, do vậy nó đòi hỏi quá trình biến đổi mô hình dữ liệu Vector sang dữ liệu Raster, hay còn gọi là Raster hoá. Biến đổi từ Raster sang mô hình Vector, hay còn gọi là Vector hoá, đặc biệt cần thiết khi tự động quét ảnh. Raster hoá là tiến trình chia đường hay vùng thành các pixel. Ngược lại, Vector hoá là tập hợp các pixel để tạo thành đường hay vùng. Nét dữ liệu Raster không có cấu trúc tốt, ví dụ ảnh vệ tinh thì việc nhận dạng đối tượng sẽ rất phức tạp. Nhiệm vụ biến đổi Vector sang Raster là tìm tập hợp các pixel trong không gian Raster trùng khớp với vị trí của điểm, đường, đường cong hay đa giác trong biểu diễn Vector. Tổng quát, tiến trình biến đổi là tiến trình xấp xỉ vì với vùng không gian cho trước thì mô hình Raster sẽ chỉ có khả năng địa chỉ hoá các vị trí toạ độ nguyên. Trong mô hình Vector, độ chính xác của điểm cuối Vector được giới hạn bởi mật độ hệ thống toạ độ bản đồ còn vị trí khác của đoạn thẳng được xác định bởi hàm toán học.
Với khả năng phân tích dữ liệu của PostGIS, không quan trọng khi dữ liệu được thể hiện dưới dạng Vector hay Raster, PostGIS cung cấp cho người dùng các chức năng hỗ trợ việc chuyển đổi dữ liệu giữa Vector và Raster
- Chuyển đổi dữ liệu từ Raster sang Vector
Trong PostGIS, lệnh ST_DumpAsPolygon() được sử dụng để chuyển đổi dữ liệu từ dữ liệu Raster ban đầu sang dữ liệu Vector. Lệnh ST_DumpAsPolygon() cũng có thể phân vùng Raster hoặc chia Raster thành nhiều đa giác
Hình 2.15 – Chuyển dữ liệu Raster - Vector
- Chuyển đổi dữ liệu từ Vector sang Raster
Mỗi đối tượng Raster có thể được chuyển đổi từ một đối tượng Vector bằng việc sử dụng lệnh ST_AsRaster(). Việc chuyển đổi dữ liệu có thể lưu trữ các đối tượng địa lý bằng các Raster với kích thước tùy ý.
CHƢƠNG 3 : XÂY DỰNG HỆ THỐNG QUẢN LÝ ẢNH VỆ TINH VIỄN THÁM
Bài toán được đặt ra là dựa vào những đặc điểm và tính năng nổi trội mà hệ quản trị PostgreSQL và phần mở rộng PostGIS, cùng với hình ảnh viễn thám được lưu trữ trên hệ thống, xây dựng một cơ sở dữ liệu dùng để quản lý hệ thống dữ liệu ảnh viễn thám có cấu trúc Raster, dùng các câu lệnh truy vấn để xuất ra những thông tin cần thiết (ở đây là việc cắt dữ liệu ảnh viễn thám theo đường biên là đường địa giới hành chính tỉnh/huyện)
Bài toán đặt ra yêu cầu phải có một hệ cơ sở dữ liệu đủ lớn và đủ mạnh để có thể lưu trữ và xử lý các dữ liệu Raster. Đối với các giải pháp trước đây, đa phần việc tìm cách lưu trữ dữ liệu Raster còn rất hạn chế, đa phần là không đủ để có thể một lượng khổng lồ dữ liệu như dữ liệu Raster (một ảnh 11 band của ảnh LANDSAT 8 có dung lượng ~1GB). Hiện tại, có một hướng đi sử dụng để xử lý các bài toán liên quan là sử dụng hệ quản trị cơ sở dữ liệu ORACLE Spatial, kết hợp với module ArcSDE (Arc Spatial Data Engine) và phần mềm ArcGIS. Đây là một giải pháp khá tốt và chuyên nghiệp đối với các bài toán liên quan đến dữ liệu GIS. ArcSDE sẽ hoạt động như một kênh trung gian với mục đích kết nối dữ liệu GIS từ Database để xử lý qua các phần mềm chuyên dụng như ORACLE hay ArcGIS, tại đây dữ liệu GIS sẽ được xử lý hoặc hiển thị kết quả tùy từng mục đích của người sử dụng. ArcSDE cũng cung cấp cơ chế cho phép truy cập cùng lúc đồng thời nhiều cơ sở dữ liệu GIS mà không cần quan tâm đến định dạng và nguồn lưu trữ thông tin. Tuy nhiên, giải pháp này lại có nhược điểm là các phần mềm sử dụng đều là các phần mềm thương mại, chi phí bản quyền để sử dụng và hoạt động là tương đối lớn, hơn thế nữa, người sử dụng và vận hành hệ thống cần phải có một nền tảng chuyên sâu vững chắc để có thể xử lý các tình huống phức tạp có thể xảy ra.
Một hướng đi khác được đưa ra là sử dụng phần mềm mã nguồn mở PostgreSQL kết hợp PostGIS. Đây là hệ thống phần mềm mã nguồn mở, với một hệ thống hàng nghìn người sử dụng, giúp giải quyết hiệu quả vấn đề về chi phí cũng như hiệu năng. Bên cạnh đó, PostgreSQL là một giải pháp có thể đưa trực tiếp dữ liệu Raster vào cơ sở dữ liệu để giải quyết bài toán. Các chức năng của PostgreSQL/PostGIS không thua kém các chức năng của các phần mềm thương mại đang có, thậm chí có phần nổi trội hơn về khả năng kế thừa hay tích hợp dữ liệu. PostgreSQL/PostGIS cũng được hỗ trợ bởi rất nhiều phần mềm GIS bao gồm cả các phần mềm mã nguồn mở cũng như phần mềm thương mại. Bộ phận người dùng đông đảo có thể sẵn sàng chia sẻ những kinh nghiệm cũng như giúp đỡ những người mới sử dụng hay chưa có kinh nghiệm làm quen với hệ thống thông tin địa lý.
Luận văn sử dụng PostgreSQL/PostGIS cho việc xử lý bài toán đặt ra về lưu trữ và xử lý dữ liệu thông tin địa lý, qua đó thấy được việc hiệu quả trong việc xử lý thông tin đặt ra với bài toán ban đầu cũng như đề ra một vài giải pháp cải thiện hiệu năng trong quá trình hoạt động.
Nguồn dữ liệu ảnh vệ tinh viễn thám sử dụng để giải quyết bài toán được lấy từ hệ thống ảnh LANDSAT 5 chụp toàn bộ lãnh thổ Việt Nam từ năm 2010 đến năm 2011, để tiện cho việc quan sát và theo dõi, các ảnh dữ liệu được chọn là ảnh chụp ban ngày, có độ che phủ của mây trên bề mặt thấp (<10%). Dữ liệu có thể download tại địa chỉ: http://earthexplorer.usgs.gov, đây là website của tổ chức NASA chuyên cung cấp hình ảnh vệ tinh tới người dùng để sử dụng với mục đích nghiên cứu và phân tích dữ liệu.
Hình 3.1 - Giao diện website earthexplorer.usgs.gov
Hình 3.3 – Thông số của ảnh LANDSAT
Nguồn dữ liệu ảnh dùng để cắt là ảnh địa giới hành chính tỉnh/huyện của Việt Nam, được lưu trữ dưới dạng shapefile, dữ liệu có thể download tại địa chỉ http://gadm.org.
Hình 3.4 – Giao diện website gadm.org
3.1 Phân tích
Vệ tinh LANDSAT đi vòng quanh trái đất với mục đích thu thập các thông tin, chụp lại các ảnh nhằm phục vụ cho sư nghiên cứu, phân tích, các ứng dụng sử dung ảnh viễn thám như nông nghiệp, địa chất, lâm nghiệp, quy hoạch vùng, lập bản đồ hay nghiên cứu thiên tai. Chu kỳ mà vệ tinh bay 1 vòng xung quanh trái đất là 16 ngày, mỗi ảnh chụp được sẽ có kích thước 185x185km, mỗi một điểm ảnh (pixel) tương ứng với kích thước là 30x30m. Để phục vụ cho nhiều mục đích nghiên cứu và phân tích khác nhau mà mỗi ảnh vệ tinh viễn thám chụp được sẽ bao gồm nhiều lớp khác nhau (7 lớp đối với ảnh LANDSAT 5, 11 lớp đối với ảnh LANDSAT 8), dung lượng ảnh dùng để lưu trữ sẽ từ 100MB ~ 1GB. Đối với mục đích phục vụ nghiên cứu hay phân tích thì số lượng ảnh cần phải sử dụng và lưu trữ sẽ tốn là rất nhiều (khoảng 40-50 ảnh tương ứng với 4GB ~ 40GB dung lượng dữ liệu cần để lưu trữ).
Hình 3.5 – Ảnh vệ tinh LANDSAT chứa dữ liệu
Thông thường, với mỗi ảnh vệ tinh LANDSAT được chụp lại sẽ được lưu trữ
và tên của ảnh sẽ được đặt theo cấu trúc : LXSPPPRRRYYYYDDDGSIVV[13], trong
đó:
L: Ảnh vệ tinh LANDSAT
X: Tên cảm biến (ứng với vệ tinh chụp) S: Mã ảnh vệ tinh
PPP, RRR : vị trí ảnh vệ tinh tham chiếu YYYY: năm chụp ảnh
DDD: ngày chụp ảnh GSI: Trạm vệ tinh nhận ảnh VV: phiên bản ảnh chụp
Bài toán quản lý ảnh vệ tinh có thể được phát biểu như sau:
INPUT: Ảnh vệ tinh viễn thám LANDSAT (ở đây là ảnh LANDSAT 5) chụp lãnh thổ Việt Nam trong thời gian năm 2010, cùng với ảnh shapefile là ảnh lãnh thổ Việt Nam cùng với đường địa giới hành chính tỉnh/huyện.
OUTPUT: Ảnh dữ liệu vệ tinh viễn thám được cắt theo khuôn ảnh Vector (đường địa giới hành chính tỉnh/huyện xác định).
Điều này đặt ra bài toán cần thiết phải xử lý lưu trữ ảnh vệ tinh viễn thám một cách hợp lý, khi mà việc nghiên cứu, phân tích không cần dùng hết số lượng lớp ảnh mặc định, có thể chỉ sử dụng 1-2 lớp ảnh để phục vụ mục đích của mình, đồng thời cải thiện đáng kể khả năng thực hiện các truy vấn phức tạp.
Giải pháp mà luận văn đưa ra là sử dụng hệ quản trị cơ sở dữ liệu PostgreSQL kết hợp PostGIS để nhằm mục đích lưu trữ và xử lý truy vấn dữ liệu là hệ thống ảnh vệ tinh. Ưu điểm của phương pháp này là dữ liệu được trực tiếp lưu trữ và xử lý trong hệ thống cơ sở dữ liệu. Nhờ đó mà tốc độ truy vấn xử lý dữ liệu, độ chính xác sẽ được cải thiện.