如何安装和配置的PostGIS在Ubuntu 14.04

介绍

PostGIS是PostgreSQL关系数据库的空间扩展。 PostGIS允许您使用几何和地理数据类型存储空间数据,使用空间函数执行空间查询以确定面积,距离,长度和周长,并为数据创建空间索引以加速空间查询。

在本指南中,您将安装PostGIS,为空间数据配置PostgreSQL,将一些空间对象加载到数据库中,并执行基本查询。

先决条件

在开始本指南之前,您需要具备以下条件:

第1步 - 安装PostGIS

PostGIS的不包括在Ubuntu的默认存储库,但是我们可以通过把它UbuntuGIS ,维持一些开源GIS软件的外部存储库。 虽然此存储库中的PostGIS包可能不总是最前沿的版本,但它维护良好,并且它不需要从源代码编译PostGIS。 所以要安装PostGIS,我们将这个存储库添加到我们的源,然后使用我们的包管理器安装它。

使用非root用户登录到服务器:

ssh sammy@your_ip_address

因为我们使用Ubuntu 14.04,我们需要repository的unstable分支。 执行以下命令将存储库添加到源:

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

您将看到以下输出:

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

ENTER接受警告,源将被添加:

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

在安装PostGIS之前,请更新可用软件包列表,以便将新存储库中的软件包添加到列表中。

sudo apt-get update

一旦您的源更新,安装PostGIS。

sudo apt-get install postgis

输入Y提示其必要的依赖一起安装PostGIS的时候。

我们现在可以连接到PostgreSQL并集成PostGIS。

第2步 - 使用PostGIS启用Spacial功能

PostGIS的功能必须在每个数据库基础上激活,然后才能存储空间数据。 我们将与工作test1数据库和postgres从用户如何安装和使用PostgreSQL在Ubuntu 14.04教程中,你跟着开始本教程之前。

使用sudo命令,切换到postgres用户:

sudo -i -u postgres

然后连接到test1数据库:

psql -d test1

接下来,在数据库上启用PostGIS扩展:

CREATE EXTENSION postgis;

让我们验证一切正常工作。 执行以下命令:

SELECT PostGIS_version();

您将看到此输出:

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

我们都设置了。 类型

\q

退出SQL会话并返回到终端提示符。

然后切换回您的主要用户帐户:

su sammy

我们现在有一个安装PostGIS的数据库,但让我们调整一些PostgreSQL设置,使事情运行顺利。

第3步 - 优化PostgreSQL GIS数据库对象

PostgreSQL旨在运行从集成系统到大型企业数据库的任何东西,但是开箱即用的配置非常保守。 GIS数据库对象比文本数据大,所以让我们配置PostgreSQL更好地与这些对象。

我们通过编辑配置的PostgreSQL postgresql.conf文件。 打开此文件:

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

我们需要对此文件进行一些更改以支持空间数据。

首先, shared_buffers应更改为75%左右您的服务器的内存。 因此, 200MB是512MB的RAM的服务器一个很好的价值。 找到shared_buffers线,并修改它是这样的:

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

接下来,找到该行开始#work_mem 此行是注释掉了,所以去掉这一行,并增加其值设置为16MB

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

然后找到#maintenance_work_mem ,取消它,并增加其价值, 128MB

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

查找checkpoint_segments ,然后取消注释它和它的值更改为6

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

最后,寻找#random_page_cost 当你找到它,取消它和它的值设置为2.0

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

CTRL+X退出,其次是YENTER将更改保存到这个文件。

您可以检查出的教程调节PostgreSQL的空间对这些设置的详细信息。

重新启动PostgreSQL以使这些更改发生:

sudo service postgresql restart

我们现在已经安装PostGIS并配置了PostgreSQL。 让我们将一些数据导入数据库,以便我们可以测试一下。

第4步 - 加载空间数据

让我们将一些空间数据加载到我们的数据库中,以便我们可以熟悉这些工具以及将这些数据导入PostgreSQL的过程,因此我们可以稍后进行一些空间查询。

自然地球提供基础数据,为全世界各种规模的重要来源。 最重要的是,这些数据是在公共领域。

导航到你的主文件夹,并创建一个名为新文件夹nedata 我们将使用此文件夹来保存我们下载的自然地球数据。

cd ~
mkdir nedata

然后导航到此新文件夹:

cd nedata

我们将从自然地球下载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

文件夹中现在有六个附加文件:

  • 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文件组成一个shape文件 ,通过GIS软件使用的流行地理空间矢量数据格式。 我们可以加载到我们这个test1数据库。

要做到这一点,我们将安装GDAL ,地理空间数据抽象库。 当我们安装GDAL,我们也将获得OGR(开放GIS简单要素参考实现)和命令ogr2ogr 这是一个向量数据转换库,我们将用它将Shapefile转换为PostGIS可以使用的数据。

使用软件包管理器安装GDAL:

sudo apt-get install gdal-bin

现在切换到postgres用户再次:

sudo -i -u postgres

现在转换您在使用天然地球陷入了PostGIS的表shape文件ogr2ogr ,就像这样:

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命令将根据文件中的前几个特征的几何类型的假设。 我们要导入的数据包含多边形类型和多部分多边形,或MultiPolygons的混合。 这些不能被插入到相同的字段,所以我们促进所有功能多部分的多边形,和几何字段将作为多多边形来创建。

最后,我们指定输入文件的路径:

/home/sammy/nedata/ne_110m_admin_0_countries.shp

访问ogr2ogr网站上看到的全套方案。

运行完整命令时,您将看到以下输出:

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

我们可以检查数据是通过进口ogrinfo命令。 执行以下命令:

ogrinfo -so PG:dbname=test1 ne_110m_admin_0_countries

这将显示以下输出:

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)

我们现在在我们的数据库中有空间数据,所以让我们看看如何使用它来解决问题。

第5步 - 查询空间数据

假设我们被要求找到世界上最北边的十个国家。 这很容易使用PostGIS和我们导入的数据。

到重新登录test1数据库。

psql -d test1

列出数据库中的表:

\dt 

这将返回两个表:

Output                   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功能。 然后,我们提取使用的质心的Y值ST_Y功能。 我们可以使用该值作为纬度。

这里是我们将运行的查询:

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

我们以降序排列结果,因为最北方的国家将具有最高的纬度。

执行该查询,您会看到前十个最北方的国家/地区:

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)

现在你有你的答案,你可以退出数据库

\q

你可以找到在各种PostGIS的功能的详细信息的PostGIS参考的PostGIS的文档部分。

结论

现在,您已为空间查询配置了一个空间启用的数据库,并且该数据库中有一些数据可供进一步探索。

为了更深入的指导,创造空间查询,看到了无限的PostGIS教程

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏