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:
- Một server Ubuntu 14.04
- User không phải root có quyền sudo. Hướng dẫn Hướng dẫn cài đặt server ban đầu cho Ubuntu 14.04 giải thích cách cài đặt điều này.
- Database PostgreSQL. Làm theo hướng dẫn của ta về Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 14.04 . Ta sẽ sử dụng database
test1
và user mà bạn sẽ cài đặt trong hướng dẫn đó cho hướng dẫn này.
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:
OutputUnstable 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:
Outputgpg: 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:
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
:
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
:
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
:
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
:
random_page_cost = 2.0 # same scale as above
Nhấn CTRL+X
để thoát, sau đó nhấn Y
và ENTER
để 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 và .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:
Output0...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:
OutputINFO: 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
Các tin liên quan
Cách thiết lập vsftpd cho Tải xuống ẩn danh trên Ubuntu 16.042016-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