PostGIS数据库

  • PostGIS数据库搭建
    • 一、PostGIS安装
      • 1.1 PostgreSQL安装
      • 1.2 PostGIS安装
      • 1.3 PgAdmin
    • 二、一键导入.gdb数据
      • 2.1 OSGeo4w安装GDAL
      • 2.2 验证安装
      • 2.3 一键导入
    • 三、QGIS连接PostGIS数据库
    • 四、常见问题
      • 4.1 OSGeo4w换源
      • 4.2 一键导入报错

PostGIS数据库搭建

暑期接了一个实习的活,主要是关于QGIS这个软件的一些功能开发(说是开发其实是批处理)。不过得先会走才能跑,这个软件本身还没搞明白就想着开发是不行的。同事发来了一些gdb格式的样例数据直接就给我整蒙了,google了一番之后有了这篇博客,我将叙述如何将gdb格式的数据导入PostGIS数据库,然后在QGIS中连接。

一、PostGIS安装

1.1 PostgreSQL安装

PostGIS是PostgreSQL的一个插件,因此我们需要首先配置PostgreSQL环境。进入下载地址,查找对应自己系统的版本进行安装即可,注意要设置管理员用户密码。

1.2 PostGIS安装

安装完PostgreSQL后,会提示运行Stack Builder。这个工具可以安装PostGIS,但是它使用的下载源速度很慢,挂梯子可以解决这个问题,但更好的选择是去官网直接下载。

手动安装的过程中,首先要注意安装路径,必须是PostgreSQL的根目录。其次在设置安装组件时,最好选择“Create spatial database”,建立一个模板,以便之后我们据此创建数据库,当然这不是必须的。

1.3 PgAdmin

pgAdmin是PostgreSQl的图形化管理工具,win+s搜索后即会开启服务,并在浏览器中打开可视化界面。

开启服务会要求输入管理员密码,第一次打开数据库(Servers)也会要求输入密码。初次使用时可能是英文界面,我们可以在:File-Preference-Miscellaneous-Language中修改为Chinese。

点击Servers-数据库,可以看到一个默认的postgres数据库,架构(schema)中就是常见的关系数据库中的一些属性。一般情况下我们对默认数据库不感兴趣,所以右键点击数据库,可以新建一个:

成功创建数据库之后,我们点击架构-public,然后点击查询工具:


在右侧出现的查询编辑器中输入下列语句:

CREATE EXTENSION postgis;    # 启用postgis插件SELECT postgis_full_version();  # 用来检查是否安装了postgis

如果输出了PostGIS的版本,那么我们就成功的为这个数据库开启了postGIS扩展,至此PostGIS的安装就完成了。

二、一键导入.gdb数据

2.1 OSGeo4w安装GDAL

gdb是arcGIS的专有空间数据库格式,postGIS本身是不支持的,这里我们使用一个辅助软件,OSGeo4W中的GDAL来完成一键导入的功能。OSGeo4w是一系列GIS工具的集合。实际上,我强烈推荐用OSGeo4W来完成QGIS的全套安装,否则后续配置环境变量是一个非常痛苦的过程,如果你已经用QGIS独立安装包安装了,那么看我之后的博客有解决环境变量的办法。

OSGeo4W的官网只提供了在线安装器的下载,这个安装器中提供了4个默认的下载源,但是速度都非常慢,因此必须要挂代理进行下载,这里我给出挂梯子的流程:

我们首次安装需要选择第一个,Express Desktop Install,但是由于我们需要先挂代理,所以选择Advanced Install进行设置。点击下一步后,选择Install from Internet,然后是选择安装路径和安装用户,再下一步是选择下载的临时存储地址,再下一步就是我们设置代理的地方了,启用HTTP代理后,不断上一步直到回到上图界面,选择Express Desktop Install,下一步。

我们这里只需要安装GDAL,跟着流程安装完成,然后我们再次打开安装器,因为GDAL默认是不安装gdb的驱动的。这次我们选择Advanced Install,一直到下图位置:


搜索GDAL,并在Libs中勾选标红的gdb driver,安装即可。

2.2 验证安装

win+s打开OSGeo4w Shell,然后输入:ogrinfo --formats


如果返回结果中有上图标红的FileGDB,则证明安装成功

2.3 一键导入

确保在pgAdmin中建立了新的数据库,并且启用了postgis插件后,在OSGeo4W Shell中输入以下语句:

ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 user=postgres password=xxx dbname=yyy" D:/data/geodata.gdb -overwrite -progress --config PG_USE_COPY YES

其中xxx为管理员密码,yyy为数据库名称,gdb文件夹的路径需根据实际情况修改。后面加入的三个参数意义如下:

-overwrite 表示会覆盖已经存在的记录

-progress 表示显示进度

–config PG_USE_COPY YES 将极大改善导入速度

三、QGIS连接PostGIS数据库

打开QGIS后,在Browser中找到PostGIS,右键新建连接。在弹出的对话框中输入数据库的相应配置即可:

四、常见问题

4.1 OSGeo4w换源

即使挂了梯子,在线安装过程的速度也可能比较慢,软件自身提供的4个源中,推荐使用第二个:http://download.osgeo.org,或者使用国内的镜像源,但如果误选了其他源而对其速度不满意,那么我们只需要在进行到Agreement协议打勾这一步时,按上一步,即可重新选择源。

4.2 一键导入报错

如果执行一键导入的代码之后,有如下提示:

function addgeometrycolumn does not exist

则说明目标数据库没有启用PostGIS,或者PostGIS的安装不完整。请在建立数据库时务必启用postGIS插件。

PostGIS数据库搭建与gdb数据导入相关推荐

  1. Python全栈 MySQL 数据库 (索引、数据导入、导出)

    ParisGabriel 每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰  开局一张图 表字段重命名(change) alter table 表名 change 原名 新名 数据类型: S ...

  2. mysql数据首次导入hive_sqoop1.4.7环境搭建及mysql数据导入导出到hive

    sqoop文档:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_prerequisites 在hive创建表和导入数据时必须添加分隔符, ...

  3. Oracle将数据库中的表数据导入到另一个数据库中

    因为工作需要,把Oracle数据库1中的表数据导入到相同数据结构的数据库2表中,下面将数据库1简称为DB1,数据库2简称为DB2,刚开始的时候我只是简单的将DB1的表数据导出成sql脚本,然后导入到D ...

  4. 带弧CAD和GDB数据导入ARCSDE后面积一致性问题

    带弧CAD.GDB.SHAP 等数据导入ARCSDE前面积如下: 导入ARCSDE后面积如下 面积严重不一致 但用导入ARCSDE后的图形重新添加字段计算出的结果切和前面的一致 因此,不要使用ARCS ...

  5. 如何将sql数据导入到oracle数据库,将SQLServer的数据导入到Oracle数据库的方法-Oracle...

    1.首先在SQL Server的电脑上安装Oracle,或者是操作的电脑上安装Oracle,如果没有,导出时会提示失败 2.打开SQL Server,右键点击要导出的数据库,选择"任务&qu ...

  6. Oracle数据库的创建、数据导入导出

    如何结合Sql脚本和PL/SQL Developer工具来实现创建表空间.创建数据库.备份数据库.还原数据库等操作,然后实现Oracle对象创建.导入数据等操作,方便我们快速了解.创建所需要的部署Sq ...

  7. oracle9i导出数据库,Oracle10g导出的数据导入Oracle9i

    我们知道Oracle导入导出数据通过命令: imp user_app/user_pass@mydb file=d:/app.dmp [full=y --] imp user_sys/user_pass ...

  8. 如何把MySql数据库中的数据导入到MyCat集群中_---Linux运维工作笔记050

    我这里,单个MySql数据表的大小已经超过20GB了,单表8000多万条数据,马上 上亿了,这个时候我,搭建了一个MyCat集群解决的,一个写库,11个读库这样来做的. 提高查询效率.但是搭建完以后, ...

  9. sqlbulkcopy mysql_c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中

    今天遇到了一个导入类第一次见 SqlBulkCopy 可以实现从一个数据集导入到数据库中的表中 本来想从数据集中一条条遍历insert到库中 有了这个后发现: 只在把表与数据集的列做一下对应关系,再走 ...

最新文章

  1. hibernate中的PO持久化对象及PO三种状态
  2. getlab如何编辑提交时显示的用户名_GitHub 如何让你的提交显示被校验
  3. 5码默认版块_5个小众的生活学习类的宝藏App
  4. 电脑win7语音怎么测试软件,win7话筒怎么测试 win7话筒测试方法【图文】
  5. C++知识点(三)函数
  6. wordpress让百度分享支持https
  7. Android手势密码解锁设计
  8. STC15W单片机解析GPS数据
  9. 如何电脑上怎样查看微信聊天记录
  10. 转帖-在Eclipse中开发JSF
  11. ​全球首个机器人抓取云竞赛落幕,华科夺冠,中国团队包揽前三
  12. unity引擎发展史
  13. 《上古卷轴5:天际》控制台代码之配料药剂
  14. python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_用Python爬取英雄联盟(lol)全部皮肤...
  15. 关于上传文件的报错问题
  16. 青岛房产证信息查询步骤
  17. Lemp + Wordpress 快速搭建个人博客
  18. BZOJ【1082】栅栏
  19. Ag-Grid React入门
  20. 华为云图引擎服务GES-实时推荐算法

热门文章

  1. 机房动环监控系统的功能,动环监控系统的主要功能
  2. 牛客竞赛拯救咕咕咕之史莱姆题解
  3. 小道消息 放弃了国企铁饭碗,离开了民企 996,我在外企做测试开发
  4. 在GreenDao开源代码中添加FTS4全文检索功能
  5. 笔记本cpu排行榜天梯图2021最新版
  6. 上市公司财务报告的那点事(5):从新手试练到股票建仓,美丽的老板出海卖电器
  7. 2006中国商业网站100强 《互联网周刊》
  8. Python爬虫项目:下载王者荣耀官网所有皮肤并对名称(以后更新的也可以)
  9. Linux文件压缩和解压命令【gzip、gunzip、zip、unzip、tar】【详细总结】
  10. 类型多样的技能游戏素材素材,速来收藏