18/09/2018, 16:43

Làm thế nào để cài đặt và cấu hình PostGIS trên Ubuntu 14.04

Giới thiệu PostGIS là phần mở rộng không gian cho cơ sở dữ liệu 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 địa lý và hình học, thực hiện các truy vấn không gian với các hàm không gian để xác định khu vực, khoảng cách, chiều dài và chu vi ...

Giới thiệu

PostGIS là phần mở rộng không gian cho cơ sở dữ liệu 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 địa lý và hình học, thực hiện các truy vấn không gian với các hàm không gian để xác định khu vực, khoảng cách, chiều dài và chu vi và tạo các chỉ mục không gian trên dữ liệu của bạn để tăng tố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 cơ sở dữ liệu của bạn và thực hiện truy vấn cơ bản.

Điều kiện tiên quyết

Trước khi bạn bắt đầu hướng dẫn này, bạn sẽ cần những điều sau đây:

  • Một máy chủ Ubuntu 14.04
  • Một người dùng không phải root với quyền sudo. Hướng dẫn Hướng dẫn cài đặt máy chủ ban đầu cho Ubuntu 14.04 giải thích cách thiết lập điều này.
  • Cơ sở dữ liệu PostgreSQL. Làm theo hướng dẫn của chúng tôi về Làm thế nào để cài đặt và sử dụng PostgreSQL trên Ubuntu 14.04. Chúng tôi sẽ sử dụng test1 cơ sở dữ liệu và người dùng mà bạn sẽ thiết lập trong hướng dẫn đó cho hướng dẫn này.

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

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

Đăng nhập vào máy chủ của bạn với người dùng không phải root của bạn:

ssh sammy@your_ip_address

Vì chúng tôi đang sử dụng Ubuntu 14.04, chúng tôi sẽ cần nhánh không ổn định của kho lưu trữ. Thực hiện lệnh sau để thêm kho lưu trữ 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ừ kho lưu trữ mới được thêm vào danh sách.

sudo apt-get update

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

sudo apt-get install postgis

Đi vào Y khi được nhắc cài đặt PostGIS cùng với các phụ thuộc cần thiết của nó.

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

Bước 2 - Kích hoạ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 cơ sở dữ liệu trước khi bạn có thể lưu trữ dữ liệu không gian. Chúng tôi sẽ làm việc với test1 cơ sở dữ liệu và postgres người dùng từ Làm thế nào để cài đặt và sử dụng PostgreSQL trên Ubuntu 14.04 hướng dẫn bạn đã làm theo trước khi bắt đầu hướng dẫn này.

Sử dụng sudo lệnh, chuyển sang postgres người dùng:

sudo -i -u postgres

Sau đó kết nối với test1 cơ sở dữ liệu:

psql -d test1

Tiếp theo, kích hoạt phần mở rộng PostGIS trên cơ sở dữ liệu:

CREATE EXTENSION postgis;

Hãy xác minh rằng 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)

Chúng ta đã sẵn sàng. Kiểu

q

để thoát khỏi phiên SQL và trở về dấu nhắc đầu cuối của bạn.

Sau đó chuyển về tài khoản người dùng chính của bạn:

su sammy

Bây giờ chúng ta có một cơ sở dữ liệu với PostGIS được cài đặt, nhưng chúng ta hãy tinh chỉnh một số cài đặt PostgreSQL để làm cho mọi thứ diễn ra suôn sẻ.

Bước 3 - Tối ưu hóa PostgreSQL cho các đối tượng cơ sở dữ liệu GIS

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

Chúng tôi định cấu hình PostgreSQL bằng cách chỉnh sửa postgresql.conf tập tin. Mở tệp này:

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

Có một vài thay đổi mà chúng tôi cần thực hiện đối với tệp 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 của máy chủ. Vì thế 200MB là một giá trị tốt cho một máy chủ với RAM 512MB. Xác định vị trí shared_buffers dòng 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 nhận xét theo mặc định, vì vậy hãy bỏ ghi chú dòng 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 đó xác định vị trí #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 thấy 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ú 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, tiếp theo là Y và ENTER để lưu các thay đổi đối với tệp 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ờ chúng ta đã cài đặt PostGIS và PostgreSQL. Hãy lấy một số dữ liệu vào cơ sở dữ liệu để chúng 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 cơ sở dữ liệu của chúng tôi để chúng ta có thể làm quen với các công cụ và quy trình nhận dữ liệu này vào PostgreSQL và sau đó chúng ta có thể thực hiện một số truy vấn không gian.

Trái đất tự nhiên cung cấp một nguồn dữ liệu cơ bản tuyệt vời cho toàn thế giới ở các 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 thư mục chính của bạn và tạo thư mục mới có tên nedata. Chúng tôi sẽ sử dụng thư mục này để giữ dữ liệu Earth Earth mà chúng tôi sẽ tải xuống.

cd ~

mkdir nedata

Sau đó điều hướng đến thư mục mới này:

cd nedata

Chúng tôi sẽ tải xuống bộ dữ liệu Quốc gia 1: 110m từ Trái đất tự nhiên. Sử dụng wget để kéo tệp đó xuống máy chủ 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 tải xuống được nén, vì vậy bạn sẽ cần unzip lệnh 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 đó giải nén tệp:

unzip ne_110m_admin_0_countries.zip

Bạn sẽ có thêm sáu tệp trong thư mục ngay bây giờ:

  • 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 .dbf, .prj, .shp.shp các tệp tạo thành một ShapeFile, một định dạng dữ liệu không gian địa lý phổ biến được sử dụng bởi phần mềm GIS. Chúng ta có thể tải nó vào test1 cơ sở dữ liệu.

Để thực hiện việc này, chúng tôi sẽ cài đặt GDAL, Thư viện trừu tượng dữ liệu không gian địa lý. Khi chúng ta cài đặt GDAL, chúng ta cũng sẽ nhận được OGR (OpenGIS Simple Features Reference Implementation) và lệnh ogr2ogr. Đây là một thư viện dịch dữ liệu vectơ mà chúng 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 postgres người dùng một lần nữa:

sudo -i -u postgres

Bây giờ chuyển đổi Shapefile mà bạn có được từ Trái Đất Tự Nhiên 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 phá vỡ lệnh đó và xem xét từng tùy chọn một cách chi tiết. Đầu tiên, chúng tôi chỉ định tùy chọn này:

-f PostgreSQL

Chuyển đổi này nói rằng loại tệp đầu ra là một bảng PostgreSQL.

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

PG:dbname=test1

Điều này đặt chuỗi kết nối vào cơ sở dữ liệu của chúng tôi. Chúng tôi chỉ xác định tên cơ sở dữ liệu ở đây, nhưng nếu bạn muốn sử dụng một người dùng, máy chủ 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 chúng tôi là:

-progress

Tùy chọn này hiển thị thanh tiến trình để chúng tôi có thể hình dung quy trình.

Tiếp theo, chúng tôi vượt qua đối số này:

-nlt PROMOTE_TO_MULTI

PostgreSQL nghiêm ngặt về các loại đối tượng. Các ogr2ogr lệnh sẽ đưa ra một giả định về kiểu hình học dựa trên một số tính năng đầu tiên trong một tệp. Dữ liệu chúng tôi đang nhập chứa hỗn hợp Đa giác loại 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 chúng tôi quảng cáo tất cả các đối tượng địa lý cho đa giác nhiều phần và trường hình học sẽ được tạo thành Đa năng.

Cuối cùng, chúng tôi chỉ định đường dẫn đến tệp đầu vào:

/home/sammy/nedata/ne_110m_admin_0_countries.shp

Tham quan ogr2ogr để xem toàn bộ các tùy chọn.

Khi bạn chạy lệnh đầy đủ, bạn sẽ thấy kết quả sau:

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

Chúng tôi có thể kiểm tra dữ liệu đã được nhập bằng cách sử dụng ogrinfo chỉ huy. 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ờ chúng ta có dữ liệu không gian trong cơ sở dữ liệu của chúng ta, vì vậy hãy xem cách chúng 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ử chúng ta được yêu cầu tìm ra mười quốc gia phía bắc nhất trên thế giới. Thật dễ dàng khi sử dụng PostGIS và dữ liệu chúng tôi đã nhập.

Đăng nhập lại vào test1 cơ sở dữ liệu.

psql -d test1

Liệt kê các bảng trong cơ sở dữ liệu:

dt 

Điều này 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)

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

d ne_110m_admin_0_countries

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

 wkb_geometry | geometry(MultiPolygon,4326) |

Các wbk_geometry cột chứa đa giác. Chúng tôi đang đối phó với các quốc gia và biên giới không đều của họ, và do đó mỗi quốc gia trong cơ sở dữ liệu của chúng tôi không có một giá trị duy nhất cho vĩ độ. Vì vậy, để có được vĩ độ cho mỗi quốc gia, chúng tôi lần đầu tiên tìm ra trung tâm của mỗi quốc gia bằng cách sử dụng PostGIS ST_Centroid chức năng. Sau đó, chúng tôi trích xuất giá trị Y của centroid bằng cách sử dụng ST_Y chức năng. Chúng ta có thể sử dụng giá trị đó làm vĩ độ.

Đây là truy vấn chúng tôi 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;

Chúng tôi đặt hàng kết quả theo thứ tự giảm dần bởi vì quốc gia phía bắc nhất sẽ có vĩ độ cao nhất.

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

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)

Bây giờ bạn đã có câu trả lời, bạn có thể thoát khỏi cơ sở dữ liệu 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 Tham chiếu PostGIS phần của tài liệu PostGIS.

Phần kết luận

Bây giờ bạn có một cơ sở dữ liệu không gian được kích hoạt đượ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 cơ sở dữ liệu đó mà bạn có thể sử dụng để thăm dò thêm.

Để có hướng dẫn chi tiết hơn về cách tạo các truy vấn không gian, hãy xem Hướng dẫn PostGIS không ràng buộc

0