PostgreSQL在QGIS中麻烦编辑点/线/面


15

我对postgresql和QGIS有问题:

  • 我可以添加点/线/多边形和填充字段

但是我不能:

  • 删除点/线/多边形
  • 修改点/线/多边形(移动或修改字段)

例如:dbname ='Europe'host = localhost port = 5432 user ='postgres'sslmode = disable key ='tid'estimatedmetadata = true srid = 900913 type = Point table =“ public”。“ planet_osm_point”(way)sql =

QGIS以管理员级别连接到数据库。使用pdAdmin III,我可以执行所有操作(创建,删除,修改...)

PostgreSQL数据库是使用osm2pgsql从OSM 导入的

在其他层上,例如.shp,我没有这个问题。

任何想法 ?

配置:Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10


嗨,马蒂厄(Mathieu),您能否澄清“我不能”的确切含义。工具是否已停用,是否在保存图层时失败?最重要的是:是否有错误消息?还可以查看postgis选项卡中的消息日志面板。
Matthias Kuhn,2015年

当然,我处于有关图层(黄色笔)的编辑模式。除添加实体图标外,编辑工具均为灰色。我得到的消息是:维护妇女地位公会:维护妇女地位公会
Mathieu

1
英语错误消息:提供程序不支持删除:数据提供程序不支持删除功能
Mathieu

1
编辑顶部图标:除添加功能外的
Mathieu

1
2015-08-08T12:10:22 1主键是ctid-禁用更改现有功能(方法;“ public”。“ planet_osm_point”)2015-08-08T12:10:23 1主键是ctid-更改现有功能已禁用(方式;“ public”。“ planet_osm_line”)2015-08-08T12:10:23 1无法确定或未请求“ planet_osm_polygon”的要素类型或srid。“ planet_osm_polygon”
Mathieu

Answers:


13

固定。 问题不在于主键。

在pgAdmin中执行此请求。

ALTER TABLE tableName ADD PRIMARY KEY(id);

planet_osm_line表和将osm_id列设置为主键的示例:

ALTER TABLE planet_osm_line 添加主键(osm_id);

直到osm_id是唯一的。


那就是你的方法!
DPSSpatial 2015年

您认为是对的吗?
Mathieu

我认同!我可以在工作中对其进行测试并进行报告,但是现在知道了如何导入数据,这就是您的解决方法。但是,有一个问题-为什么您要在QGIS中本地编辑此数据,而不是直接在OSM编辑器中编辑数据并将其提供回去?
DPSSpatial

1
关于OSM:是因为我们只需要生成包含我们的设计/图形规范的输出地图,并添加来自提供商的其他一些付费数据(不可能将其公开)。QGIS是一个完美的工具。贡献是另一回事,我们会及时做到。
Mathieu

10

如前所述,解决方案是创建一个主键。

但是通过设计,osm2pgsql并不能保证其osm_id唯一性。它可以产生具有相同osm_id的

planet_osm_*在QGIS中编辑表格,明智的做法是添加另一个id列,例如gid

要添加唯一gid列:

ALTER TABLE planet_osm_point ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_line ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_polygon ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_roads ADD gid serial PRIMARY KEY;

如果“几何”列仅是“几何”,则QGIS存在问题。某些查询可能会失败。我发现将planet_osm_polygon几何图形更改为很有MultiPolygon用:

ALTER TABLE planet_osm_polygon
    ALTER COLUMN way TYPE geometry(MultiPolygon,3857) USING ST_Multi(way);

3

我认为这是一个主要的关键问题。您的表应该有一个,并且在通过PGAdmin查看表时将被识别。

我遇到了同样的问题,但是使用名为ID(任意)的主键字段重新加载了图层,并且我的所有编辑工具现在都在工具栏上处于活动状态。

使用SQL,您可以添加“串行”数据类型的OID列,并使用以下语句创建主键:

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

ALTER TABLE schema."Tablename" ADD PRIMARY KEY (id);

使用GUI,您可以使用数据库和PostGIS和QGIS可以识别的主键重新加载图层:

  • 打开数据库管理器
  • 连接到您的数据库
  • 选择“导入层/文件”
  • 选中“主键”框,然后为“主键”列输入名称,该名称将存储将启用编辑功能的唯一ID:

在此处输入图片说明

从那里,回到PGAdmin,连接到数据库,然后单击刚刚重新创建的表-现在可以查看是否可以识别OID列:

在此处输入图片说明


在PGAdmin下没有主键。如何重新加载图层?
Mathieu

@Mathieu我将在QGIS中使用DBManager插件,然后单击“主键”选项,并将字段命名为OBJECTID或类似名称。那应该可以让您具有可编辑的功能...如果您有一个现有的唯一ID字段要用作主键,则以后可以随时重新设置它...
DPSSpatial 2015年

我当然很傻,但是在DBmanager下,我找不到在哪里设置主键。实际上,对于“ planetOSM多边形”(和其他),我有一个警告,说那不是主键。
Mathieu

好的-刚刚更新了我的答案,但这就是GUI的方式...让我知道这是否对您
有用

非常感谢该过程,现在我明白了为什么不能这样做:使用osm2pgsql将数据库直接从osm.pbf文件导入到postgis中。在您的程序中,必须加载一个外部文件。在我的情况下,数据库已经存在,并且没有显示屏幕截图中显示的主键。那么有一种方法-当数据库已经导入时-在pgsql下生成主键?
Mathieu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.