Thứ năm, 01/09/2016 | 00:00 GMT+7

Cách cài đặt và cấu hình PostGIS trên Ubuntu 14.04

PostGIS là phần mở rộng không gian cho database quan hệ PostgreSQL. PostGIS cho phép bạn lưu trữ dữ liệu không gian bằng cách sử dụng các kiểu dữ liệu hình học và địa lý, thực hiện các truy vấn không gian với các chức năng không gian để xác định diện tích, khoảng cách, chiều dài và chu vi cũng như tạo các index không gian trên dữ liệu để tăng tốc các truy vấn không gian.

Trong hướng dẫn này, bạn sẽ cài đặt PostGIS, cấu hình PostgreSQL cho dữ liệu không gian, tải một số đối tượng không gian vào database của bạn và thực hiện một truy vấn cơ bản.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:

Bước 1 - Cài đặt PostGIS

PostGIS không có trong repository lưu trữ mặc định cho Ubuntu, nhưng ta có thể lấy nó thông qua UbuntuGIS , một repository bên ngoài duy trì một số gói GIS open-souce . Mặc dù gói PostGIS trong repository lưu trữ này có thể không phải lúc nào cũng là bản phát hành tiên tiến, nhưng nó được duy trì tốt và loại bỏ nhu cầu biên dịch PostGIS từ nguồn. Vì vậy, để cài đặt PostGIS, ta sẽ thêm repository này vào các nguồn của ta và sau đó cài đặt nó bằng trình quản lý gói của ta .

Đăng nhập vào server của bạn bằng user không phải root của bạn:

  • ssh sammy@your_ip_address

Vì ta đang sử dụng Ubuntu 14.04, ta cần nhánh không ổn định của repository . Thực thi lệnh sau để thêm repository vào các nguồn của bạn:

  • sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable

Bạn sẽ thấy kết quả sau:

Output
Unstable releases of Ubuntu GIS packages. These releases are more bleeding edge and while generally they should work well, they dont receive the same amount of quality assurance as our stable releases do. More info: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable Press [ENTER] to continue or ctrl-c to cancel adding it

Nhấn ENTER để chấp nhận cảnh báo và nguồn sẽ được thêm vào:

Output
gpg: keyring `/tmp/tmpintg192h/secring.gpg' created gpg: keyring `/tmp/tmpintg192h/pubring.gpg' created gpg: requesting key 314DF160 from hkp server keyserver.ubuntu.com gpg: /tmp/tmpintg192h/trustdb.gpg: trustdb created gpg: key 314DF160: public key "Launchpad ubuntugis-stable" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK

Trước khi bạn có thể cài đặt PostGIS, hãy cập nhật danh sách các gói có sẵn của bạn để các gói từ repository mới được thêm vào danh sách.

  • sudo apt-get update

Sau khi nguồn của bạn cập nhật, hãy cài đặt PostGIS.

  • sudo apt-get install postgis

Nhập Y khi được yêu cầu cài đặt PostGIS cùng với các phụ thuộc cần thiết của nó.

Bây giờ ta có thể kết nối với PostgreSQL và tích hợp PostGIS.

Bước 2 - Bật tính năng Spacial với PostGIS

Các tính năng của PostGIS phải được kích hoạt trên cơ sở từng database trước khi bạn có thể lưu trữ dữ liệu không gian. Ta sẽ làm việc với database test1 và user postgres từ hướng dẫn Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 14.04 mà bạn đã làm theo trước khi bắt đầu hướng dẫn này.

Sử dụng sudo , chuyển sang user postgres :

  • sudo -i -u postgres

Sau đó kết nối với database test1 :

  • psql -d test1

Tiếp theo, kích hoạt tiện ích mở rộng PostGIS trên database :

  • CREATE EXTENSION postgis;

Hãy xác minh mọi thứ hoạt động chính xác. Thực hiện lệnh sau:

  • SELECT PostGIS_version();

Bạn sẽ thấy kết quả này:

Output
postgis_version --------------------------------------- 2.2 USE_GEOS=1 USE_PROJ=1 USE_STATS=1 (1 row)

Ta đã sẵn sàng. Kiểu

  • \q

để thoát phiên SQL và quay lại dấu nhắc terminal của bạn.

Sau đó chuyển trở lại account user chính của bạn:

  • su sammy

Bây giờ ta đã có một database với PostGIS được cài đặt, nhưng hãy điều chỉnh một số cài đặt PostgreSQL để mọi thứ chạy trơn tru.

Bước 3 - Tối ưu hóa PostgreSQL cho các đối tượng database GIS

PostgreSQL được thiết kế để chạy trên mọi thứ từ các hệ thống tích hợp đến database công ty lớn, nhưng ngoài ra nó được cấu hình rất thận trọng. Các đối tượng database GIS lớn so với dữ liệu văn bản, vì vậy hãy cấu hình PostgreSQL để hoạt động tốt hơn với các đối tượng đó.

Ta cấu hình PostgreSQL bằng cách chỉnh sửa file postgresql.conf . Mở file này:

  • sudo nano /etc/postgresql/9.3/main/postgresql.conf

Ta cần thực hiện một số thay đổi đối với file này để hỗ trợ dữ liệu không gian.

Đầu tiên, shared_buffers nên được thay đổi thành khoảng 75% RAM server của bạn. Vì vậy, 200MB là một giá trị tốt cho một server có RAM 512MB. Tìm dòng shared_buffers và sửa đổi nó như thế này:

/etc/postgresql/9.3/main/postgresql.conf
shared_buffers = 200MB                  # min 128kB 

Tiếp theo, xác định vị trí dòng bắt đầu bằng #work_mem . Dòng này được comment theo mặc định, vì vậy hãy bỏ comment này và tăng giá trị của nó lên 16MB :

/etc/postgresql/9.3/main/postgresql.conf
work_mem = 16MB                         # min 64kB 

Sau đó định vị #maintenance_work_mem , bỏ ghi chú và tăng giá trị của nó lên 128MB :

/etc/postgresql/9.3/main/postgresql.conf
maintenance_work_mem = 128MB            # min 1MB 

Tìm checkpoint_segments , sau đó bỏ ghi chú và thay đổi giá trị của nó thành 6 :

/etc/postgresql/9.3/main/postgresql.conf
checkpoint_segments = 6         # in logfile segments, min 1, 16MB each 

Cuối cùng, hãy tìm #random_page_cost . Khi bạn tìm thấy nó, hãy bỏ ghi chú nó và đặt giá trị của nó thành 2.0 :

/etc/postgresql/9.3/main/postgresql.conf
random_page_cost = 2.0                 # same scale as above 

Nhấn CTRL+X để thoát, sau đó nhấn YENTER để lưu các thay đổi vào file này.

Bạn có thể xem hướng dẫn Điều chỉnh PostgreSQL cho Không gian để biết thêm thông tin về các cài đặt này.

Khởi động lại PostgreSQL để những thay đổi này diễn ra:

  • sudo service postgresql restart

Bây giờ ta đã cài đặt PostGIS và cấu hình PostgreSQL. Hãy lấy một số dữ liệu vào database để ta có thể kiểm tra mọi thứ.

Bước 4 - Tải dữ liệu không gian

Hãy tải một số dữ liệu không gian vào database của ta để ta có thể làm quen với các công cụ và quy trình đưa dữ liệu này vào PostgreSQL và vì vậy ta có thể thực hiện một số truy vấn không gian sau đó.

Natural Earth cung cấp một nguồn dữ liệu cơ bản tuyệt vời cho toàn thế giới ở nhiều quy mô khác nhau. Hơn hết, dữ liệu này thuộc phạm vi công cộng.

Điều hướng đến folder chính của bạn và tạo một folder mới có tên là nedata . Ta sẽ sử dụng folder này để chứa dữ liệu Natural Earth mà ta sẽ download .

  • cd ~
  • mkdir nedata

Sau đó, chuyển vào folder mới này:

  • cd nedata

Ta sẽ download bộ dữ liệu Quốc gia 1: 110m từ Natural Earth. Sử dụng wget để kéo file đó xuống server của bạn:

  • wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip

Tệp bạn vừa download đã được nén, vì vậy bạn cần lệnh unzip mà bạn có thể cài đặt thông qua trình quản lý gói. Cài đặt nó bằng lệnh sau:

  • sudo apt-get install unzip

Sau đó extract file :

  • unzip ne_110m_admin_0_countries.zip

Đến đây bạn sẽ có sáu file bổ sung trong folder :

  • ne_110m_admin_0_countries.README.html
  • ne_110m_admin_0_countries.VERSION.txt
  • ne_110m_admin_0_countries.dbf
  • ne_110m_admin_0_countries.prj
  • ne_110m_admin_0_countries.shp
  • ne_110m_admin_0_countries.shx

Các tệp .dbf , .prj , .shp.shp tạo nên ShapeFile , một định dạng dữ liệu vectơ không gian địa lý phổ biến được phần mềm GIS sử dụng. Ta có thể tải nó vào database test1 của ta .

Để thực hiện việc này, ta sẽ cài đặt GDAL , Thư viện Tóm tắt Dữ liệu Không gian Địa lý. Khi ta cài đặt GDAL, ta cũng sẽ nhận được OGR (OpenGIS Simple Features Reference ogr2ogr ) và lệnh ogr2ogr . Đây là thư viện dịch dữ liệu vectơ mà ta sẽ sử dụng để dịch Shapefile thành dữ liệu mà PostGIS có thể sử dụng.

Cài đặt GDAL bằng trình quản lý gói:

  • sudo apt-get install gdal-bin

Bây giờ chuyển sang user postgres :

  • sudo -i -u postgres

Bây giờ chuyển đổi Shapefile mà bạn nhận được từ Natural Earth thành một bảng PostGIS bằng cách sử dụng ogr2ogr , như thế này:

  • ogr2ogr -f PostgreSQL PG:dbname=test1 -progress -nlt PROMOTE_TO_MULTI /home/sammy/nedata/ne_110m_admin_0_countries.shp

Hãy chia nhỏ lệnh đó và xem xét chi tiết từng tùy chọn. Đầu tiên, ta chỉ định tùy chọn này:

-f PostgreSQL 

Lựa chọn này nói rằng loại file kết quả là bảng PostgreSQL.

Tiếp theo, ta có tùy chọn này:

PG:dbname=test1 

Điều này đặt chuỗi kết nối vào database của ta . Ta chỉ xác định tên database ở đây, nhưng nếu bạn muốn sử dụng một user , server và cổng khác, bạn có thể chỉ định các tùy chọn đó như sau:

PG:"dbname='databasename' host='addr' port='5432' user='x' password='y'" 

Tiếp theo trong danh sách các tùy chọn của ta là:

-progress 

Tùy chọn này hiển thị thanh tiến trình để ta có thể hình dung quá trình.

Tiếp theo, ta chuyển đối số này:

-nlt PROMOTE_TO_MULTI 

PostgreSQL nghiêm ngặt về các loại đối tượng. Lệnh ogr2ogr sẽ đưa ra giả định về kiểu hình học dựa trên một số tính năng đầu tiên trong file . Các dữ liệu ta đang nhập khẩu có chứa một sự pha trộn của các loại Polygon và đa giác đa phần, hoặc MultiPolygons. Chúng không thể được chèn vào cùng một trường, vì vậy ta quảng bá tất cả các tính năng cho đa giác nhiều phần và trường hình học sẽ được tạo dưới dạng Đa giác .

Cuối cùng, ta chỉ định đường dẫn đến file đầu vào:

/home/sammy/nedata/ne_110m_admin_0_countries.shp 

Truy cập trang web ogr2ogr để xem toàn bộ các tùy chọn.

Khi bạn chạy toàn bộ lệnh, bạn sẽ thấy kết quả sau:

Output
0...10...20...30...40...50...60...70...80...90...100 - done.

Ta có thể kiểm tra xem dữ liệu đã được nhập hay chưa bằng cách sử dụng lệnh ogrinfo . Thực hiện lệnh sau:

  • ogrinfo -so PG:dbname=test1 ne_110m_admin_0_countries

Điều này sẽ hiển thị kết quả sau:

Output
INFO: Open of `PG:dbname=test1' using driver `PostgreSQL' successful. Layer name: ne_110m_admin_0_countries Geometry: Multi Polygon Feature Count: 177 Extent: (-180.000000, -90.000000) - (180.000000, 83.645130) Layer SRS WKT: GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.0174532925199433, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4326"]] FID Column = ogc_fid Geometry Column = wkb_geometry scalerank: Integer (4.0) featurecla: String (30.0) ... region_wb: String (254.0) name_len: Real (16.6) long_len: Real (16.6) abbrev_len: Real (16.6) tiny: Real (16.6) homepart: Real (16.6)

Bây giờ ta có dữ liệu không gian trong database của bạn , vì vậy hãy xem cách ta có thể sử dụng nó để giải quyết vấn đề.

Bước 5 - Truy vấn dữ liệu không gian

Giả sử ta được yêu cầu tìm mười quốc gia ở cực bắc nhất trên thế giới. Điều đó thật dễ dàng bằng cách sử dụng PostGIS và dữ liệu ta đã nhập.

Đăng nhập lại vào database test1 .

  • psql -d test1

Liệt kê các bảng trong database :

  • \dt

Kết quả sẽ trả về hai bảng:

Output
List of relations Schema | Name | Type | Owner --------+---------------------------+-------+---------- public | ne_110m_admin_0_countries | table | postgres public | spatial_ref_sys | table | postgres (2 rows)

Ta sẽ sử dụng bảng ne_110m_admin_0_countries , bảng này chứa dữ liệu sẽ giúp ta trả lời câu hỏi của bạn . Bảng này có cột admin chứa tên quốc gia và cột wkb_gemoetry chứa dữ liệu hình học. Nếu bạn muốn xem tất cả các cột trong bảng ne_110m_admin_0_countries , bạn có thể ra lệnh:

  • \d ne_110m_admin_0_countries

Bạn sẽ thấy các cột và kiểu dữ liệu của chúng. wbk_geometry dữ liệu của cột wbk_geometry trông giống như sau:

 wkb_geometry | geometry(MultiPolygon,4326) | 

Cột wbk_geometry chứa các đa giác. Ta đang xử lý các quốc gia và biên giới bất thường của họ và do đó mỗi quốc gia trong database của ta không có một giá trị duy nhất cho vĩ độ. Vì vậy, để có được vĩ độ cho mỗi quốc gia, trước tiên, ta tìm hiểu tâm của mỗi quốc gia bằng cách sử dụng chức năng ST_Centroid của PostGIS. Sau đó, ta extract giá trị Y của centroid bằng cách sử dụng hàm ST_Y . Ta có thể sử dụng giá trị đó làm vĩ độ.

Đây là truy vấn ta sẽ chạy:

  • SELECT admin, ST_Y(ST_Centroid(wkb_geometry)) as latitude
  • FROM ne_110m_admin_0_countries
  • ORDER BY latitude DESC
  • LIMIT 10;

Ta sắp xếp các kết quả theo thứ tự giảm dần vì quốc gia ở phía bắc nhất sẽ có vĩ độ cao nhất.

Thực thi truy vấn đó và bạn sẽ thấy mười quốc gia hàng đầu ở phía bắc:

Output
admin | latitude -----------+------------------ Greenland | 74.7704876939899 Norway | 69.1568563971328 Iceland | 65.074276335291 Finland | 64.5040939185674 Sweden | 62.8114849680803 Russia | 61.9808407507127 Canada | 61.4690761453491 Estonia | 58.643695240707 Latvia | 56.8071751342793 Denmark | 56.0639344617945 (10 rows)

Đến đây bạn đã có câu trả lời, bạn có thể thoát khỏi database với

  • \q

Bạn có thể tìm thêm thông tin về các chức năng PostGIS khác nhau trong phần Tham khảo PostGIS của tài liệu PostGIS.

Kết luận

Đến đây bạn có một database hỗ trợ không gian được cấu hình cho các truy vấn không gian và bạn có một số dữ liệu trong database đó mà bạn có thể sử dụng để khám phá thêm.

Để có hướng dẫn chuyên sâu hơn về cách tạo truy vấn không gian, hãy xem Hướng dẫn PostGIS không giới hạn


Tags:

Các tin liên quan

Cách thiết lập vsftpd cho Tải xuống ẩn danh trên Ubuntu 16.04
2016-08-25
Cách triển khai ứng dụng Node.js bằng Terraform trên Ubuntu 14.04
2016-08-25
Cách cấu hình Cụm Galera với MariaDB 10.1 trên server Ubuntu 16.04
2016-08-19
Cách tạo Mảng RAID với mdadm trên Ubuntu 16.04
2016-08-16
Cách quản lý mảng RAID với mdadm trên Ubuntu 16.04
2016-08-16
Cách thiết lập NFS Mount trên Ubuntu 16.04
2016-08-04
Cách cài đặt và sử dụng Byobu để quản lý thiết bị đầu cuối trên Ubuntu 16.04
2016-08-04
Cách cài đặt và cấu hình Ansible trên Ubuntu 16.04
2016-07-22
Cách cài đặt và cấu hình Sphinx trên Ubuntu 16.04
2016-07-22
Cách triển khai ứng dụng Node.js và MongoDB với Rancher trên Ubuntu 14.04
2016-07-18