Ubuntu14.04にPostGISをインストールして構成する方法

前書き ##

PostGISは、PostgreSQLリレーショナルデータベースの空間拡張です。 PostGISを使用すると、幾何学的および地理的データタイプを使用して空間データを保存し、空間関数を使用して空間クエリを実行して面積、距離、長さ、および周囲を決定し、データに空間インデックスを作成して空間クエリを高速化できます。

このチュートリアルでは、PostGISをインストールし、空間データ用にPostgreSQLを構成し、いくつかの空間オブジェクトをデータベースにロードして、基本的なクエリを実行します。

準備 ##

このチュートリアルを開始する前に、次のものが必要です。

ステップ1-PostGISをインストールする

PostGISはUbuntuのデフォルトリポジトリには含まれていませんが、[UbuntuGIS](https://launchpad.net/~ubuntugis/)から取得できます。UbuntuGISは、多くのオープンソースGISパッケージを維持する外部リポジトリです。このリポジトリのPostGISパッケージは常に最新バージョンであるとは限りませんが、適切に保守されており、ソースコードからPostGISをコンパイルする必要はありません。したがって、PostGISをインストールするには、このリポジトリをソースに追加してから、パッケージマネージャを使用してインストールします。

非rootユーザーとしてサーバーにログインします。

ssh sammy@your_ip_address

Ubuntu 14.04を使用しているため、リポジトリの不安定なブランチが必要です。次のコマンドを実行して、リポジトリをソースに追加します。

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

次の出力が表示されます。

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

ENTERを押して警告を受け入れると、ソースが追加されます。

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

PostGISをインストールする前に、利用可能なパッケージのリストを更新して、新しいリポジトリ内のパッケージをリストに追加できるようにしてください。

sudo apt-get update

ソースを更新した後、PostGISをインストールします。

sudo apt-get install postgis

必要な依存関係とともにPostGISをインストールするように求められたら、「Y」を入力します。

これで、PostgreSQLに接続してPostGISを統合できます。

ステップ2-PostGISを使用して空間機能を有効にする

空間データを保存する前に、各データベースに基づいてPostGISの機能をアクティブ化する必要があります。このチュートリアルを開始する前に、前に設定した test1データベースと postgresユーザーを使用します。

sudoコマンドを使用して postgresユーザーに切り替えます。

sudo -i -u postgres

次に、 test1データベースに接続します。

psql -d test1

次に、データベースでPostGIS拡張機能を有効にします。

CREATE EXTENSION postgis;

すべてが問題ないことを確認しましょう。次のコマンドを実行します。

SELECT PostGIS_version();

次の出力が表示されます。

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

私たちは皆準備ができています。の種類

\ q

SQLセッションを終了し、ターミナルプロンプトに戻ります。

次に、メインユーザーアカウントに戻ります。

su sammy

これでPostGISがインストールされたデータベースができましたが、次のステップにスムーズに進むために、いくつかのPostgreSQL設定を調整しましょう。

ステップ3-GISデータベースオブジェクト用にPostgreSQLを最適化する

PostgreSQLは、統合システムから大規模なエンタープライズデータベースまで、あらゆるものを実行するように設計されていますが、その構成は、箱から出して非常に保守的です。テキストデータと比較して、GISデータベースオブジェクトは大きいので、これらのオブジェクトをより適切に処理するようにPostgreSQLを構成しましょう。

postgresql.confファイルを編集してPostgreSQLを構成します。このファイルを開きます:

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

空間データをサポートするには、このファイルにいくつかの変更を加える必要があります。

まず、 shared_buffersをサーバーRAMの約75%に変更する必要があります。 200MBは、512MBのRAMを搭載したサーバーに適した値です。 shared_buffers行を見つけて、次のように変更します。

shared_buffers = 200MB                  # min 128kB

次に、 #work_memで始まる行を見つけます。デフォルトでは、この行はコメント化されているため、この行のコメントを解除して、その値を 16MBに増やします。

work_mem = 16MB                         # min 64kB

次に、 #maintenance_work_memを見つけてコメントを外し、その値を 128MBに増やします。

maintenance_work_mem = 128MB            # min 1MB

checkpoint_segmentsを見つけ、コメントを外してその値を 6に変更します。

checkpoint_segments =6         # in logfile segments, min 1, 16MB each

最後に、 #random_page_costを探します。それを見つけたら、コメントを外してその値を 2.0に設定します。

random_page_cost =2.0                 # same scale as above

CTRL + Xを押して終了し、次に YENTERを押してこのファイルへの変更を保存します。

PostgreSQLを再起動して、次の変更を行います。

sudo service postgresql restart

これで、PostGISをインストールし、PostgreSQLを構成しました。テストできるように、データベースにデータを入力してみましょう。

ステップ4-空間データをロードする

いくつかの空間データをデータベースにロードして、このデータをPostgreSQLにインポートするツールとプロセスに精通し、後でいくつかの空間クエリを実行できるようにします。

[ Natural Earth](http://www.naturalearthdata.com/)は、さまざまな規模で全世界の基本データの重要なソースを提供します。最も重要なのは、これらのデータがパブリックドメインにあることです。

ホームフォルダに移動し、 nedataという新しいフォルダを作成します。このフォルダを使用して、ダウンロードするNaturalEarthデータを保存します。

cd ~
mkdir nedata

次に、この新しいフォルダに移動します。

cd nedata

Natural Earthから1:110mの全国データセットをダウンロードします。 wgetを使用して、ファイルをサーバーにプルダウンします。

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

ダウンロードしたファイルは圧縮されているため、パッケージマネージャーからインストールできるコマンド unzipが必要です。次のコマンドを使用してインストールします。

sudo apt-get install unzip

次に、ファイルを解凍します。

unzip ne_110m_admin_0_countries.zip

これで、このフォルダーに6つの追加ファイルが作成されます。

**. DBF 。PRJ 。SHP 、および。SHP **ファイルは、GISソフトウェアで使用される一般的な地理空間ベクトルデータ形式であるShapeFileを形成します。これを test1データベースにロードできます。

このために、地理空間データ抽象化ライブラリ[GDAL](http://www.gdal.org/)をインストールします。 GDALをインストールすると、OGR(OpenGIS Simple Function Reference Implementation)とコマンド ogr2ogrも取得します。これはベクトルデータ変換ライブラリであり、これを使用してShapefileをPostGISで使用できるデータに変換します。

パッケージマネージャーを使用してGDALをインストールします。

sudo apt-get install gdal-bin

ここで、ユーザー postgresに再度切り替えます。

sudo -i -u postgres

次に、以下に示すように、 ogr2ogrを使用して、NaturalEarthのShapefileをPostGISテーブルに変換します。

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

このコマンドを中断して、各オプションを詳しく見てみましょう。まず、次のオプションを指定します。

- f PostgreSQL

このスイッチは、出力ファイルタイプがPostgreSQLテーブルであることを宣言します。

次に、このオプションがあります。

PG:dbname=test1

これにより、データベースへの接続文字列が設定されます。ここではデータベース名を指定するだけですが、他のユーザー、ホスト、およびポートを使用する場合は、次のオプションを指定できます。

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

オプションのリストの次は次のとおりです。

- progress

このオプションは進行状況バーを表示して、プロセスを確認できるようにします。

次に、この引数を渡します。

- nlt PROMOTE_TO_MULTI

PostgreSQLはオブジェクトタイプに厳密です。 ogr2ogrコマンドは、ファイル内の最初のいくつかの機能に基づいて、ジオメトリタイプに関する仮定を行います。インポートしたデータには、ポリゴンとマルチパートポリゴンまたはマルチポリゴンが混在しています。これらを同じフィールドに挿入することはできないため、すべてのフィーチャをマルチパートポリゴンにプロモートし、ジオメトリフィールドを** MultiPolygon **として作成します。

最後に、入力ファイルのパスを指定します。

/home/sammy/nedata/ne_110m_admin_0_countries.shp

完全なオプションについては、[ogr2ogr](http://www.gdal.org/ogr2ogr.html)のWebサイトにアクセスしてください。

フルコマンドを実行すると、次の出力が表示されます。

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

ogrinfoコマンドを使用して、データがインポートされたかどうかを確認できます。次のコマンドを実行します。

ogrinfo -so PG:dbname=test1 ne_110m_admin_0_countries

これにより、次の出力が表示されます。

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)

これでデータベースに空間データができたので、それを使用して問題を解決する方法を見てみましょう。

ステップ5-空間データを照会する

世界最北端の10か国を探すように求められたとします。 PostGISとインポートしたデータは簡単に使用できます。

test1データベースに再度ログインします。

psql -d test1

データベース内のテーブルを一覧表示します。

\ dt 

これにより、2つのテーブルが返されます。

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

質問への回答に役立つデータが含まれている ne_110m_admin_0_countriesテーブルを使用します。このテーブルには、国/地域名を含む列 adminと、ジオメトリデータを含む列 wkb_gemoetryが含まれています。テーブル ne_110m_admin_0_countriesのすべての列を表示する場合は、次のコマンドを発行できます。

\ d ne_110m_admin_0_countries

列とそのデータタイプが表示されます。 wbk_geometry列のデータタイプは次のとおりです。

 wkb_geometry |geometry(MultiPolygon,4326)|

wbk_geometry列にはポリゴンが含まれています。私たちは国とその不規則な国境を扱っているので、データベースには各国の単一の緯度値はありません。したがって、各国の緯度を取得するために、まずPostGISの ST_Centroid関数を使用して、各国のセントロイドを見つけます。次に、 ST_Y関数を使用して、セントロイドのY値を抽出します。この値を緯度として使用できます。

これが実行するクエリです。

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

最北端の国が最も緯度が高いため、結果を降順で並べ替えます。

このクエリを実行すると、最北端の上位10か国が表示されます。

 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)

答えが得られたので、データベースを終了できます

\ q

結論として ##

これで、空間クエリ用に空間対応データベースを構成しました。このデータベースの一部のデータを使用して、さらに詳しく調べることができます。

PostGIS関連のチュートリアルのインストールと構成の詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。


参照:「Ubuntu14.04にPostGISをインストールして構成する方法」

Recommended Posts

Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu14.04にPostGISをインストールして構成する方法
Ubuntu16.04にNATSをインストールして構成する方法
Ubuntu18.04にGogsをインストールして構成する方法
Ubuntu18.04にCyberpanelをインストールして構成する方法
Ubuntu16.04にownCloudをインストールして構成する方法
Ubuntu18.04にGitLabをインストールして構成する方法
Ubuntu18.04にAnsibleをインストールして構成する方法
Ubuntu18.04にVNCをインストールして構成する方法
Ubuntu16.04にSphinxをインストールして構成する方法
Ubuntu14.04にOrientDBをインストールして構成する方法
Ubuntu12.04にAppScaleをインストールして構成する方法
Ubuntu 16.04 /18.04にPycharmとIpythonをインストールする方法
CentOS7にElasticsearchをインストールして構成する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
Ubuntu20.04にDockerをインストールして使用する方法
CentOS8にVNCをインストールして構成する方法
Ubuntu18.04にCurlをインストールして使用する方法
Ubuntu18.04にWineをインストールして使用する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
Ubuntu20.04にComposerをインストールして使用する方法
Ubuntu14.04にBaasBoxをインストールして使用する方法
CentOS6にphpMyAdminをインストールして構成する方法
Ubuntu16.04にDockerをインストールして使用する方法
CentOS8にRedmineをインストールして構成する方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
UbuntuにMySQLをインストールして構成する
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu20.04にSkypeをインストールする方法
Ubuntu20.04にJenkinsをインストールする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
ubuntu14.04にopencv3.0.0をインストールする方法
Ubuntu20.04にAnacondaをインストールする方法
Ubuntu16.04にPrometheusをインストールする方法
Ubuntu18.04にJenkinsをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu14.04にSolr5.2.1をインストールする方法
Ubuntu20.04にMariaDBをインストールする方法