【问题标题】:Can't connect to PostGIS database无法连接到 PostGIS 数据库
【发布时间】:2018-08-03 15:24:17
【问题描述】:

从下面描述的 tsk 开始,我在看似简单的过程中遇到了无数问题。但首先是一些背景:
视窗 10
QGIS 2.18.5
PgAdmin 4 (v 2.0)
已安装 Postgresql 10
-Postgresql 数据库(托管在运行 PostgreSQL 9.6.5 的 Amazon AWS 云上)

我对 postgresql 和 postgis 很陌生,但是在遵循所有基本说明之后,我似乎无法在 QGIS 中查看任何 sql 表。这是我设置的:
我在 pgAdmin 4 中,以管理员身份登录(无论如何我是唯一的用户),连接到我的 Amazon AWS 服务器并连接到我创建的新数据库。

我已经启用了 postgis 扩展 (CREATE EXTENSION postgis;) 以及我读到的另外两个我可能需要...
到目前为止一切都好吗?

我有一个名为 test_poly.shp 的 shapefile(在 ArcCatalog 中创建,绘制了一个简单的形状并创建了一个字符串字段)我想上传到我的数据库,所以在与 Postgresql 捆绑的 PostGIS Shapefile 导入器中,我连接到我的数据库第一:

然后导入 shapefile,在 SRID 字段(英国国家网格)中手动输入 27700 并将 shapefile 的“Shape”字段设置为 Geo Column(我是要这样做吗?什么是 Geo Column?) .我还将 Schema 的名称从“public”更改为我在 pgAdmin 中重命名的名称。

问题:1- Shapefile 导入失败...

===============================
使用配置导入:test_poly, public, geom, D:\PostGIS\Test_poly.shp, mode=c, dump=1, simple=0, geography=0, index=1, shape=1, srid=0
形状文件类型:多边形
PostGIS 类型:MULTIPOLYGON[2]
Shapefile 导入失败。

这里发生了什么?我尝试更改了一些选项,包括将 Geo 列中的输入更改为“geom”,然后是 MULTIPOLYGON,然后是“POLYGON”并返回到“shape”,将编码从 UTF8 更改为 LATIN1……没有帮助。

【问题讨论】:

  • 这可能对你有帮助:gis.stackexchange.com/questions/41799/…
  • Hej Theo。几年前我确实遇到过同样的问题,但是使用来自QGIS 的形状文件导入器它工作得很好。 QGIS 扩展基于 shapefile 创建一个表,其中存储了目录和几何图形中的所有记录。很方便;-)
  • @JacobH 所以我以管理员身份打开 CMD 提示符,将目录更改为我的 PostgreSQL\10\bin 文件夹,然后运行 ​​cmd 行,然后.... >'shp2pgsl' 不被识别为内部或外部命令、可运行的程序或批处理文件。

标签: postgresql postgis shapefile


【解决方案1】:

根据您的需要,将几何图形导入到PostGIS 的一个好方法是使用来自QGISImport into PostGIS 工具。

只需转到工具箱(高级界面)并搜索Import into Postgis。该对话框非常简单(需要事先完成与数据库的连接)...

基于此shapefile,它创建以下表结构(使用 QGIS 2.8.6-Wien 测试):

CREATE TABLE public."tm_world_borders_simpl-0.3"
(
  id integer NOT NULL DEFAULT nextval('"tm_world_borders_simpl-0.3_id_seq"'::regclass),
  geom geometry(MultiPolygon,4326),
  fips character varying(2),
  iso2 character varying(2),
  iso3 character varying(3),
  un integer,
  name character varying(50),
  area integer,
  pop2005 integer,
  region integer,
  subregion integer,
  lon double precision,
  lat double precision,
  CONSTRAINT "tm_world_borders_simpl-0.3_pkey" PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public."tm_world_borders_simpl-0.3"
  OWNER TO disco2;

-- Index: public."sidx_tm_world_borders_simpl-0.3"

-- DROP INDEX public."sidx_tm_world_borders_simpl-0.3";

CREATE INDEX "sidx_tm_world_borders_simpl-0.3"
  ON public."tm_world_borders_simpl-0.3"
  USING gist
  (geom);

另一个用于导入 shapefile 的 PostGIS 扩展是 SPIT,但它不再被维护,并且可能与 MultiPolygons 相当颠簸。还有其他alternatives

编辑 如何使用QGIS 添加新的 PostGIS 连接:

转到Add PostGIS Layer 并点击New

输入您的数据库地址和凭据并点击OK

【讨论】:

  • 感谢您的建议,但它要求您已经连接到数据库。我无法连接到它 - 数据库需要已经导入了一个图层,然后才能在 QGIS 中连接到它。但这就是问题所在:我无法添加图层!
  • 并非如此。只需转到Add PostGIS Layer 并添加您的 PostGIS 数据库的地址和凭据。您不需要已经有一个几何图形来连接到数据库,您只需要预先安装扩展。
  • 刚刚添加了一些可能对您有所帮助的屏幕截图
  • 嗨,吉姆,谢谢,但我已经完成了所有这些。我仍然无法连接。在 DB Manager 中,我尝试连接并收到 python 错误:TypeError: 'NoneType' object has no attribute 'getitem'
  • 我可以使用离线本地数据库很好地导入文件。但似乎问题在于我有问题的数据库的 Amazon AWS 托管......
猜你喜欢
  • 2012-10-23
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2012-10-29
  • 2013-11-19
相关资源
最近更新 更多