PostGISは、PostgreSQLリレーショナルデータベースの空間拡張です。 PostGISを使用すると、幾何学的および地理的データタイプを使用して空間データを保存し、空間関数を使用して空間クエリを実行して面積、距離、長さ、および周囲を決定し、データに空間インデックスを作成して空間クエリを高速化できます。
このチュートリアルでは、PostGISをインストールし、空間データ用にPostgreSQLを構成し、いくつかの空間オブジェクトをデータベースにロードして、基本的なクエリを実行します。
このチュートリアルを開始する前に、次のものが必要です。
test1
データベースとユーザーを使用します。実稼働環境で使用する場合でも、[クラウドリレーショナルデータベース](https://cloud.tencent.com/product/cdb-overview?from=10680)を直接使用することをお勧めします。クラウドリレーショナルデータベースを使用すると、クラウド内のリレーショナルデータベースを簡単に展開、管理、拡張できるため、安全で信頼性が高く、スケーラブルです。オンデマンドクラウドデータベースサービス。 Tencent Cloudリレーショナルデータベースは、[MySQL](https://cloud.tencent.com/product/cdb?from=10680)、SQL Server、[MariaDB](https://cloud.tencent.com/product/tdsql?from=10680)、PostgreSQLデータベースエンジンを提供し、データベースエンジンのパフォーマンスを最適化します。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を統合できます。
空間データを保存する前に、各データベースに基づいて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設定を調整しましょう。
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
を押して終了し、次に Y
と ENTER
を押してこのファイルへの変更を保存します。
PostgreSQLを再起動して、次の変更を行います。
sudo service postgresql restart
これで、PostGISをインストールし、PostgreSQLを構成しました。テストできるように、データベースにデータを入力してみましょう。
いくつかの空間データをデータベースにロードして、このデータを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つの追加ファイルが作成されます。
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
**. 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)
これでデータベースに空間データができたので、それを使用して問題を解決する方法を見てみましょう。
世界最北端の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