a. Khái niệm
Khái niệm tháp ảnh được sử dụng để giảm độ phân giải hiển thị của ảnh raster từ đó nâng cao hiệu suất, cách dùng tháp ảnh có thể nâng cao tốc độ hiển thị dữ liệu raster bằng cách chỉ lấy những dữ liệu ở một độ phân giải nhất định cần thiết để hiển thị. Ví dụ, mức độ phân giải của ảnh liên quan tới lượng thời gian mà ứng dụng cần để nhận và hiển thị nó, đặc biệt hơn trong Web. Độ phân giải hình ảnh thấp hơn, tốc độ hiển thị càng nhanh hơn. Ví dụ, trong trường hợp chi tiết ảnh không quan trọng, người dùng thu nhỏ ảnh đáng kể, nạp một ảnh có độ phân giải thấp thường đầy đủ hơn nạp hình ảnh có độ phân giải cao.
Hình 2.27: Tháp ảnh trong PostGIS Raster.
Khi người dùng phóng to, những mức có độ phân giải thấp hơn để vẽ những vùng nhỏ. Tuy nhiên, bằng cách sử dụng tháp ảnh, hiệu suất được duy trì bởi vì máy chủ cơ sở dữ liệu sẽ chọn mức tháp thích hợp nhất (hoặc độ phân giải thích hợp nhất) của dữ liệu ảnh để hiển thị nhanh trên màn hình. Trong PostGIS Raster, tại mội mức độ phân giải, một bản sao của ảnh được tạo và duy trì như một raster độc lập. Vì thế ngoài tháp ảnh, toàn bộ raster phải được đọc từ đĩa và lấy mẫu nhỏ dần qua mỗi lần. Điều này gọi là tiến trình lấy mẫu hiển thị.
Mức tháp ảnh thể hiện việc giảm độ phân giải ảnh làm tốn ít bộ nhớ hơn. Mức 1 chỉ ra dữ liệu raster gốc, ở đó không có sự suy giảm độ phân giải hình ảnh và không thay đổi không gian lưu trữ yêu cầu. Những giá trị lớn hơn 1cho thấy độ phân giải ảnh ngày càng giảm và yêu cầu về không gian lưu trữ cũng giảm. Mỗi mức độ kế tiếp của tháp ảnh mức giảm dần ở tỷ lệ 4:1 trong hình
2.28. Tháp ảnh chỉ cần xây dựng một lần cho mỗi raster. Sau đó, chúng được truy cập mỗi khi dữ liệu raster được xem. Dữ liệu raster càng lớn, chiều dài cần để tạo tập các kim tự tháp càng tăng. Điều đó có nghĩa là càng tốn nhiều thời gian để lưu.
b. Tạo tháp ảnh
Trong PostGIS Raster, một tháp ảnh được tạo cùng lúc với nạp một ảnh raster:
python raster2pgsql.py -r *.jpg -t raster_table -s 26986 -l 4 -k 100x100 -I -o raster_overview_4.sql
Hình 2.28: Tháp ảnh vơi những mức độ và tỉ lệ khác nhau.
Lệnh trên tạo ra một tập tin sql và nó sẽ nạp tất cả JPEG trong thư mục hiện hành vào một bảng mới gọi là bảng raster (raster_table), ở đó mỗi bảng ghi raster đều có kích thước 100x100 pixel. Giá trị -l sẽ tạo bảng tổng quan cho bảng raster với tháp ảnh 4 mức. Bảng tổng quan sẽ được gọi là o_4_raster_table và chứa ít bảng ghi raster hơn bảng raster_table. Mỗi bảng ghi raster trong bảng o_4_raster_table có kích thước 100x100 pixel nhưng có độ phân giải thấp hơn.
Đoạn code sau đây sẽ thực thi các tập tin sql để nạp dữ liệu vào cơ sở dữ liệu PostGIS:
2.2.10. Sự sắp xếp lớp Raster
PostGIS Raster chỉ sử dụng một bảng đối với dữ liệu raster, tham chiếu địa lý và siêu dữ liệu cũng như tất cả mọi thứ được lưu trữ trong một thuộc tính raster. Do đó các thuộc tính raster tạo thành một bảng raster không có liên quan đến nhau tạo thành một coverage. Sự lựa chọn này làm cho cấu trúc PostGIS Raster rất giống cấu trúc PostGIS Vector. Điều này cũng có nghĩa là thuộc tính raster từ các bảng giống nhau có thể có kích thước khác nhau, có thể chụp các lưới khác nhàu và chồng lớp giống các vùng trong một lớp vector có thể chồng lớp.
Do đó, làm thế nào để một bảng raster trông giống như phụ thuộc vào cấu trúc và mối quan hệ giữa các raster mà nó bao chứa. Danh sách dưới đây cho thấy sự sắp xếp bảng raster khác nhau hỗ trợ trong PostGIS Raster:
1. Một bảng raster có thể được gọi là một kho hình ảnh theo từng mảnh riêng và các hình ảnh không còn liên quan đến nhau. Trong trường hợp này, các hình ảnh có thể không chồng chéo lên nhau vì mỗi hình ảnh có tham chiếu địa lý riêng. Hoặc có thể không phải tất cả đều có tham chiếu địa lý.
Hình 2.29: Tập các mảnh hình ảnh và các hình ảnh không liên hệ với nhau (4 hình)
Đây là cách bố trí đối với những người sử dụng phi địa lý sử dụng dữ liệu raster cho các trang web hoặc bất kì việc sử dụng nào khác. Bởi vì trong trường hợp này, thông tin địa lý không cần thiết phải sử dụng. Hơn nữa, điều này tạo điều kiện cho các chức năng xử lý raster khác có thể được xây dựng từ những người dùng phi địa lý.
Hình 2.30: Tập các hình ảnh ô tô.
2. Một bảng raster có thể là một bảng gạch raster không đều nhau. Phạm vi của nó không nhất thiết phải là hình chữ nhật bởi vì có thể có một số gạch bị mất và chúng có kích cỡ khác nhau. Các gạch của bảng không có kích thước giống nhau và không trùng nhau.
Hình 2.31: Bảng gạch raster không đều. (36 gạch)
3. Một bảng raster có thể là bảng gạch raster đều nhau. Tuy nhiên, phạm vi của nó không nhất thiết là hình chữ nhật khi có một số gạch bị mất. Gạch phải cùng kích thước và không chồng chéo lên nhau.
Hình 2.32: bảng gạch raster đều nhau (36 gạch).
4. Một bảng raster có thể bảng gạch hình chữ nhật đều nhau. Phạm vi của nó bắt buộc phải là hình chữ nhật và không có gạch nào bị mất. Các gạch có kích thước giống nhau và không trùng nhau. Đây là cách truyền thống để hiển thị một coverage.
Hình 2.33: Bảng gạch raster hình chữ nhật đều nhau.(54 gạch)
5. Một bảng raster là một hình ảnh được lát gạch (sử dụng tùy chọn –k khi nạp hình ảnh). Phạm vi của nó phải là hình chữ nhật và không có gạch bị mất. Các gạch có kích thước giống nhau và không trùng nhau. Cách này khác cách 4 ở chỗ nó cách 4 không thể hiện một coverage hoàn chỉnh. Các hình ảnh khác tạo thành phần còn lại của coverage được lưu trữ như hình ảnh được lát gạch trong các bảng khác. PostGIS Raster cung cấp cơ chế đệm hỗ trợ hình ảnh raster có các gạch đêu nhau (hoặc khối đều nhau) bởi vì các ứng dụng raster thường được tối ưu hóa để phù hợp với cách sắp xếp 3,4,5.
Hình 2.34: Hình ảnh lát gạch (2 bảng 54 gạch).
6. Một bảng raster có thể là một coverage raster là kết quả từ bất cứ hoạt động phân tích nào (như ST_AsPolygon(), ST_Intersection()) có thể hiểu là hoạt động raster hóa của một coverage vector. Từ hoạt động raster hóa, mỗi đối tượng vector trở thành một raster nhỏ với phạm vi giống đối tượng vector đầu vào. Loại coverage này không nhất thiết phải đầy đủ hay hình chữ nhật. Các gạch có kích thước khác nhau và có thể chồng chéo lên nhau. Tất cả phụ thuộc đặc tính của lớp vector được raster hóa. Ví dụ, một lớp liên tục loại trừ các hình học (không có khoảng trống hay lỗ
thủng như một khu rừng bao phủ…) sẽ cho kết quả trong một coverage raster trong đó có chứa các điểm ảnh quan trọng (với giá trị dữ liệu) không trùng nhau, nhưng các điểm ảnh không quan trọng (giá trị nodata) có thể. Trường hợp khác, một lớp không liên tục loại trừ các hình học (như một hồ nước hoặc tòa nhà) sẽ cho kết quả một coverage các đối tượng không kết nối với nhau. Trong thực tế, việc sắp xếp giống với một lớp vector trong trường hợp tất cả điểm ảnh của mỗi raster có cùng giá trị.
Hình 2.35: đối tượng coverage raster (9 đối tượng raster tương ứng 9 hàng trong một bảng raster).
Tất cả sự sắp xếp đều có thể thực hiện được và PostGIS Raster không áp đặt một loại nào mặc dù loại 3, 4, 6 là thích hợp nhất đối với một nhà phân tích GIS. Điều này là do thực tế người dùng có thể thêm hoặc xóa các hàng (hoặc gạch) của một bảng raster và PostGIS Raster phải hỗ trợ gạch có thể thay đổi kích thước để chuyển đổi vector sang raster. Vì vậy rất khó khăn để thực thi cấu hình nhất định.
Việc sắp xếp raster đóng vai trò quan trọng trong việc chuyển đổi vector sang raster , ở đó tất cả thuộc tính của một vector được bảo tồn trong bảng kết quả raster. Ví dụ, 10 đối tượng hồ vector với các thuộc tính như tên, loại, vùng….được chuyển sang 10 đối tượng raster với thuộc tính tương tự. Trong trường hợp này, nếu đối tượng vector và các giá trị dữ liệu, phần của đối tượng raster kết quả không nhất thiết phải trùng, giá trị nodata của đối tượng raster sẽ
chồng lên. Những đặc tính này cho phép việc hòa nhập vector và raster được dễ dàng.
Trong PostGIS, việc chuyển đổi từ raster sang vector có thể được thực hiện bằng sử dụng hàm ST_DumpAsPolygons(). Vì thế không có vấn đề gì nếu lớp bên trong là định dạng raster hoặc vector khi làm việc với chức năng phân tích như ST_Intersection(). Ví dụ, hoạt động giao nhau có thể thực hiện trên vector và raster và kết quả trong một lớp vector, hoặc trên vector và raster cũng như kết quả như lớp vector/ raster hoặc trên raster và raster cũng với kết quả như một lớp raster.
Hình 2.36: Chuyển đôi từ vector sang raster.
Hình 2.37: Chuyển đổi từ raster sang vector.
Tuy nhiên, như mỗi đối tượng không gian có một định danh tham chiếu không gian (SRID) và chỉ các đối tượng không gian với giá trị SRID tương tự mới có thể được sử dụng khi thực hiện các hoạt động không gian. Vì thể người sử dụng phải đảm bảo rằng vector và raster phải có giá trị SRID giông nhau trước khi thực thi một vài hoạt động không gian trên chúng.
2.2.11. Lưu trữ vật lý
PostGIS Raster cho phép người sử dụng lưu trữ hình ảnh raster trong cơ sở dữ liệu (lưu trữ trong cơ sở dữ liệu raster) hoặc chỉ đơn thuần là đăng kí chúng như các tập tin bên ngoài (đăng kí bên ngoài cơ sở dữ liệu raster). Khi đăng kí một raster, chỉ có raster metadata (rộng, cao, số kênh, tham chiếu địa lý
và đường dẫn đến tập tin raster hiện tại) được lưu trữ trong cơ sở dữ liệu và không phải là giá trị điểm ảnh.
a. So sánh lưu trữ trong cơ sở dữ liệu Raster với lưu trữ ngoài
Sự lựa chọn giữa cơ sở dữ liệu raster đầu ra và cơ sở dữ liệu raster đầu vào phụ thuộc vào các ứng dụng của người dùng. Khi ứng dụng người dùng chỉ là ứng dụng đọc, có nghĩa là họ chỉ nhận dữ liệu và không thích sửa đổi dữ liệu. Cơ sở dữ liệu raster đầu ra lưu trữ tạo điều kiện cho các quá trình này bằng cách cung cấp:
• Truy cập ứng dụng nhanh: Việc lưu trữ cơ sở dữ liệu raster đầu ra lưu trữ đường dẫn của tập tin hình ảnh raster được bảo tồn trong tập tin hệ thống. Điều đó làm tăng tốc độ đọc tập tin raster (JPEG, GIF, PNG) cho các ứng dụng web, bằng cách này chỉ có đường dẫn là cần thiết khi lấy dữ liệu raster và không cần thiết chuyển nó từ loại PostGIS Raster sang một tập tin hình ảnh.
• Nạp nhanh cơ sở dữ liệu: trong giai đoạn đàu của nạp nột coverage raster (một bảng chứa các loại cơ sở dữ liệu raster ra hoặc cơ sở dữ liệu raster vào), nó thực hiện nhanh hơn bình thường vì chỉ có siêu dữ liệu được nạp hoặc sao chép từ cơ sở dữ liệu.
• Áp dụng các chức năng SQL: tất cả hoạt động và chức năng có sẵn cho cơ sở dữ liệu raster vào ( ngoại trừ những hoạt động liên quan đến việc ghi dữ liệu raster như thiết lập giá trị điểm ảnh), cũng làm việc với cơ sở dữ liệu raster ra.
• Dễ dàng sao lưu: hình ảnh raster trong tập tin hệ thống không được sửa chữa và chỉ có siêu dữ liệu của nó được ghi vào cơ sở dữ liệu, bằng cách này, cơ sở dữ liệu ra lưu trữ có thể tránh được việc không thể sao lưu dữ liệu lớn.
Ngược lại, cơ sở dữ liệu raster vào truyền thống liên quan đến việc chỉnh sửa và phân tích ứng dụng bởi vì những ưu điểm sau:
• Phân tích nhanh: hoạt động phân tích thực hiện trên dữ liệu raster (như một raster vùng sử dụng ST_AsPolygon(), tìm kiếm giao nhau giữa raster và vector với ST_Intersections () v.v…) yêu cầu làm việc trên giá trị điểm ảnh. Cấu trúc dữ liệu raster không khác mạng lưới 2 chiều các cell, thời gian thực hiện các hoạt động này nhanh hơn trên cơ sở dữ liệu raster vào vì không cần giải nén giá trị điểm ảnh từ tập tin ảnh JPEG hoặc TIFF. • Lưu trữ đơn nhất: Không có vấn đề gì nếu dữ liệu thuộc về raster hoặc
vector, PostGIS Raster cho phép lưu trữ một dữ liệu duy nhất. Không cần thiết phải lưu trữ dữ liệu raster riêng rẽ so với dữ liệu vector, chúng có thể được đặt cách khác trong tập dữ liệu tương tự.
• Hỗ trợ đa người dùng: nhiều người có thể chỉnh sửa dữ liệu raster vào cùng thời điểm, cơ sở dữ liệu PostGIS điều khiển chỉnh sửa đồng thời trên cơ sở dữ liệu raster vào.
b. Đăng kí ngoài CSDL Raster
Đăng kí cơ sở dữ liệu raster ra được thực hiện thông qua tùy chọn –R khi nạp tập tin hình ảnh raster vào cơ sở dữ liệu.
Ví dụ:
python raster2pgsql.py -r c:/imagesets/landsat/image.tif -t landsat –R
Trường hợp tùy chọn –r xác định hỉnh ảnh raster đầu vào, tùy chọn –t xác định tên của bảng raster chứa raster tương ứng và tùy chọn –R cho thấy hình ảnh raster được ghi như một tập tin hệ thống.
c. Lưu trữ trong CSDL Raster
Giống như kiểu hình học, kiểu raster là một kiểu PostgreSQL phức tạp bao gồm nhiều thuộc tính. Một thuộc tính raster có thể bao gồm nhiều kênh có chung kích thước, kích thước điểm ảnh và tham chiếu địa lý. Bên cạnh đó, thông tin bổ sung là cần thiết để giải thích các dữ liệu hình ảnh, chẳng hạn như một kiểu điểm ảnh và một giá trị nodata. Việc lưu trữ được sử dụng cho các kênh raster là lưu trữ tuần tự (BSQ), một trong ba phương pháp lưu trữ chính để mã hóa dữ liệu hình ảnh cho ảnh raster đa kênh. BSQ không phải một định dạng hình ảnh mà là một phương pháp mã hóa giá trị điểm ảnh cho một hình ảnh, các dòng dữ liệu liên tiếp nhau trong cùng kênh ảnh. Tổ chức dữ liệu BSQ là tối ưu đối với truy cập không gian bất kì phần nào của một kênh. Nó cũng có thể xử lý bất kì một số kênh và thích hợp với màu đen và trắng, xám, pseudocolor, true color và dữ liệu hình ảnh đa quang phổ.
Hình 2.39: Lưu trữ raster trong cơ sở dữ liệu.
2.2.12. Chỉ mục
PostGIS Raster tạo chỉ mục trên chính dữ liệu raster. Bằng cách này, người dùng có thể thực hiện các hoạt động thực sự phức tạp trên dữ liệu raster, như lấy được tập hình học và giá trị hình học từ một kênh raster (hàm ST_DumpAsPolygons()). Không giống Oracle GeoRASTER tạo chỉ mục trên
phạm vi không gian, PostGIS Raster tạo chỉ mục trên dữ liệu raster có nhiều ý nghĩa hơn.
Trong PostGIS, nạp một bảng raster mới và tạo chỉ mục trên cột raster có thể thực hiện bằng 2 dòng:
Tùy chọn –s tham chiếu địa lý raster kết quả sử dụng SRID 4326.
Tùy chọn –k tách các tập tin ảnh thành các gạch kích thước 50x50 (trên một hàng). Tất cả các gạch không trùng nhau và góc trên bên trái theo một mạng lưới khối đều nhau. Phạm vi toàn cầu của lớp là hình chữ nhật và không xoay được.
Tùy chọn –l thông báo cho bộ nạp để tạo chỉ mục không gian trên bảng raster. Chỉ số này rất quan trọng vì nó giới hạn được kết quả tính toán của PostGIS Raster chỉ với những gạch liên quan tới hoạt động không gian, hoạt động này chỉ được thực hiện với những gạch thực sự giao nhau với các điểm hình học. Vì vậy để tìm kiếm những gạch như thế sẽ nhanh hơn nhiều so với việc tìm kiếm tuần tự trong bảng raster. Nếu tùy chọn –l không được xác định