Wednesday, January 8, 2014

Import dữ liệu Raster vào Oracle


Quách Đồng Thắng 
Trung tâm Ứng dụng GIS Tp.HCM

1.  GIỚI THIỆU

Tiếp theo loạt bài về vấn đề quản lý dữ liệu không gian trong Oracle (Tham khảo thêm Import Shapefile vào Oracle), bài viết trình bày cách import dữ liệu raster vào CSDL Oracle (Enterprise Edition).


2.  THỬ NGHIỆM

Oracle Express Editon (XE) là bản miễn phí nên có những hạn chế sau:
  • Dữ liệu không vượt quá 4 GB.
  • Mỗi máy tính chỉ host được một instance của Oracle XE.
  • Oracle XE có thể được cài đặt trên máy có nhiều CPU, nhưng cùng lúc chỉ có thể chạy trên một CPU, hoặc chỉ chạy trên một nhân đối với bộ xử lý đa nhân (do đó không khai thác hết sức mạnh của CPU).
  • Oracle XE có thể được cài đặt trên server với bộ nhớ rất lớn, nhưng chỉ sử dụng tối đa 1GB bộ nhớ RAM.

Ngoài ra, Oracle XE không hỗ trợ GeoRaster nên bài viết sử dụng Oracle phiên bản Enterprise để thử nghiệm.

Để quản lý dữ liệu vector, Oracle sử dụng kiểu dữ liệu SDO_GEOMETRY. Đối với dữ liệu raster, Oracle sử dụng kiểu dữ liệu SDO_GEORASTER. Cấu trúc của đối tượng SDO_GEORASTER được thể hiện trong hình sau:


Chúng ta có thể tạo table lưu trữ theo cấu trúc trên, sử dụng chức năng import raster sẵn có của Oracle để đưa dữ liệu raster (ảnh viễn thám, ảnh hàng không,…) vào quản lý trong CSDL (tham khảo thêm tại gis4free). Tuy nhiên, để đơn giản hóa công đoạn import dữ liệu, bài viết giới thiệu cách tiếp cận sử dụng tiện ích của bên thứ 3 là gdal_translate, một trong những công cụ mạnh mẽ của bộ thư viện xử lý dữ liệu raster mã nguồn mở GDAL.

Để thuận tiện, có thể download GDAL thông qua OSGeo4W. Ở giao diện cài đặt OSGeo4W, chọn Advance Install. Sau đó search “gdal” để cài đặt gói thư viện gdal.

 

Sau khi cài đặt thành công, chạy OSGeo4W Shell để sử dụng công cụ gdal_translate ở giao diện dòng lệnh. Có thể gõ lệnh gdal_translate để xem các tham số khác của công cụ. Trong trường hợp này, ta nhập các tham số như hệ tham chiếu EPSG:32648, đường dẫn đến file ảnh geotif và tham số kết nối đến Oracle server (trong trường hợp này bdkh là tên database, hr là username và password.).

gdal_translate -a_srs EPSG:32648 -of georaster f:/oracle/q1_B1.tif geor:hr/hr@localhost/bdkh

Sau khi import thành công, hai bảng được tạo ra là GDAL_IMPORT (tương ứng với “Table With GeoRaster Column” trong hình trên) và GDAL_RDT (tương ứng với “Raster Data Table”) – là bảng thực sự chứa dữ liệu raster được chia thành từng block và lưu trữ ở định dạng BLOB (Binary Large Object).


Để hiển thị ảnh, chúng ta có thể sử dụng GeoRasterViewer (sẵn có trong Oracle example - lưu ý chọn “See All” để có thể download và cài đặt Oracle example). Sau khi cài đặt thành công, có thể xem ảnh bằng công cụ GeoRasterViewer.bat (Trong trường hợp này nằm ở đường dẫn C:\oracle\product\11.2.0\dbhome_1\md\demo\georaster\java):


Đơn giản hơn, chúng ta có thể xem ảnh Georaster từ QGIS: chọn công cụ Add Oracle Georaster layer , nhập các thông số kết nối:


Kết quả:



3.  KẾT LUẬN

Bài viết đã trình bày cách import dữ liệu raster, cụ thể là ảnh hàng không độ phân giải 25cm khu vực quận 1, Tp.HCM vào CSDL Oracle. Đây là những bước tiếp cận cơ bản ban đầu mang tính giới thiệu. Để hiểu rõ và làm việc hiệu quả với dữ liệu raster trong Oracle, cần nghiên cứu các tài liệu kỹ thuật của Oracle, đặc biệt là quyển Pro Oracle Spatial for Oracle Database 11g  (như tạo Pyramids để tăng tốc hiển thị, trích lọc ảnh, chuyển đổi ảnh, nén ảnh, …).

TÀI LIỆU THAM KHẢO
Ravikanth V. Kothuri, A. G. (2007). Pro Oracle Spatial for Oracle Database 11g . Apress.

Wednesday, December 11, 2013

Import shapefile vào Oracle


Quách Đồng Thắng 
Trung tâm Ứng dụng GIS Tp.HCM

1.     GIỚI THIỆU

    Hệ quản trị CSDL Oracle là một trong những lựa chọn hàng đầu trong các hệ thống thông tin, đặc biệt đối với các hệ thống lớn. Oracle hiện hỗ trợ rất tốt trong việc quản lý dữ liệu vector, raster, 3D, point cloud (dữ liệu LiDAR),...
    Mở đầu trong loạt bài về vấn đề quản lý dữ liệu không gian trong Oracle, bài viết trình bày cách import shapefile vào Oracle bằng 02 cách:
    -     Sử dụng SQL Loader với sự hỗ trợ của công cụ shp2sdo.
    -     Sử dụng GeoRaptor plugin trong Oracle SQL Developer.

    2.     THỬ NGHIỆM

      2.1     Cài đặt các công cụ cần thiết

      -     Cài đặt Oracle SQL Developer để quản trị CSDL Oracle.
      -     Cài đặt tiện ích shp2sdo để chuyển đổi shapefile vào CSDL Oracle.
      -     Cài đặt plugin GeoRaptor để tương tác với dữ liệu không gian trong SQL Developer.
      -     Cài đặt phần mềm QGIS để kiểm tra kết quả.

      2.2     Sử dụng công cụ shp2sdo

      Oracle cung cấp hai công cụ để làm việc với CSDL Oracle là SQL*Plus (giao diện dòng lệnh) và công cụ giao diện đồ họa SQL Developer. Chúng ta sẽ sử dụng SQL Developer để thử nghiệm.
      -     Khởi động SQL Developer, đăng nhập với tài khoản system (với password được thiết lập ở bước cài đặt SQL Developer).

      -     Để sử dụng database hr (CSDL human resource - được xây dựng sẵn), sau khi đăng nhập thành công, vào Other Users --> hr --> chọn edit user, đặt password cho user hr (giả sử password cũng là ‘hr’), uncheck Password expired và Account is Locked. 

      -     Sau khi đăng nhập lại bằng user hr sẽ thấy các table mô phỏng một CSDL quản lý nhân sự như departments, employees,… đã được tạo sẵn. Chúng ta sẽ thử nghiệm trên database mẫu này.

      -     Để import shapefile vào database hr, thực thi shp2sdo.exe (trong giao diện cmd), nhập vào các thông tin cần thiết, quan trọng là tên shapefile (ví dụ rt_q1), tên table cần tạo và SRID (ví dụ ở đây chọn SRID 32648)

      -     Kết quả có 03 file được tạo ra:
      rt_q1.sql: chứa lệnh sql tạo table rt_q1.
      rt_q1.ctl:  control file phục vụ load dữ liệu từ shapefile vào table rt_q1 bằng công cụ SQL Loader.
      rt_q1.dat: chứa dữ liệu thuộc tính và không gian của shapefile rt_q1. 

      -     Chạy file rt_q1.sql trong SQL Developer để tạo table rt_q1

        -     Quan trọng: dể bảo toàn unicode tiếng Việt, không bị lỗi font, thêm dòng “CHARACTERSET UTF8” vào sau dòng LOAD DATA trong file rt_q1.ctl:

        -     Tiếp theo, ở giao diện cmd, thực thi lệnh sql loader để load dữ liệu vào table rt_q1 vừa tạo.
        >sqlldr hr/hr@localhost control=rt_q1.ctl
        (cấu trúc câu lệnh là sqlldr username/password@DBhost   control=control file)
        -     Nếu dữ liệu dạng polygon, chạy dòng lệnh sau trong SQL Developer:
        EXECUTE SDO_MIGRATE.TO_CURRENT('RT_Q1','GEOM');
        -     Kết quả sau khi load data (Trong SQL Developer, vào menu View --> Map View để hiển thị dữ liệu không gian): 

        -     Kết nối với CSDL Oracle từ QGIS: vào menu Layer --> Add Oracle Spatial Layer, nhập các thông số kết nối:

        -     Kết quả:


        2.3     Sử dụng công cụ GeoRaptor

        -     Ở giao diện SQL Developer, vào View --> GeoRaptor --> Load shapefile, nhập các thông số cần thiết:

        -     Tuy nhiên, công cụ GeoRaptor không hỗ trợ tốt unicode tiếng Việt. 

        -     Để giải quyết vấn đề lỗi font, chúng ta có thể sử dụng “mẹo” như sau:    

        Đầu tiên, tạo một phiên bản shapefile với chỉ một record (rt_q1) và sử dụng GeoRaptor load       Shapefile này vào database. Mục đích để tạo table có thể quản lý dữ liệu không gian và giảm thời gian load dữ liệu.
        Sau đó sử dụng QGIS để kết nối đến table rt_q1 vừa tạo, đồng thời load shapefile rt_q1. Tiếp theo bật chế độ edit cho table rt_q1 và dùng chức năng copy & paste dữ liệu từ shapefile sang table.

                  3.     KẾT LUẬN

                    Bài viết đã trình bày cách load shapefile vào CSDL Oracle theo hai cách tiếp cận khác nhau. Kết quả thử nghiệm cho thấy, GeoRaptor hỗ trợ giao diện đồ họa thuận tiện hơn so với shp2sdo, nhưng có nhược điểm là người dùng khó can thiệp vào các tham số khi chuyển đổi, dẫn đến mất thời gian giải quyết như vấn đề unicode tiếng Việt đã đề cập ở trên.