Problema no PostgreSQL ao editar pontos / linhas / polígonos no QGIS


14

Estou com um problema com o postgresql e o QGIS:

  • Posso adicionar pontos / linhas / polígonos e campo de preenchimento

Mas não posso:

  • excluir pontos / linhas / polígonos
  • modificar pontos / linhas / polígonos (mover ou modificar campo)

ex: dbname = host da Europa = porta localhost = 5432 usuário = 'postgres' sslmode = chave de desativação = 'tid' estimadometadados = verdadeiro srid = 900913 tipo = Tabela de pontos = "público". "planet_osm_point" (way) sql =

O QGIS está conectado como nível de administrador no banco de dados. Com o pdAdmin III, eu posso fazer tudo (criar, excluir, modificar ...)

O banco de dados postgresql é importado do OSM com osm2pgsql .

Em outra camada, como .shp, não tenho esse problema.

Qualquer ideia ?

Configuração: Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10


Oi Mathieu, você pode esclarecer o significado exato de "Eu não posso". As ferramentas estão desativadas, elas falham ao salvar a camada? E o mais importante: há uma mensagem de erro? Veja também o painel de log de mensagens na guia postgis.
Matthias Kuhn

offcourse Estou no modo de edição para a camada em questão (caneta amarela). As ferramentas de edição são todas cinza, exceto a adição do ícone da entidade. a mensagem que recebo é: Le service prestataire ne supporte pas l'apagamento: Le prestataire de données ne supporte pas l'apagamento des objets
Mathieu

1
mensagem de erro em Inglês: Provedor não suporta eliminação: Provedor de dados não suporta características apagar
Mathieu

1
Ícone da edição de topo: Tudo cinza EXCETO Add Feature
Mathieu

1
2015-08-08T12: 10: 22 1 Chave primária é ctid - alteração dos recursos existentes desativada (caminho; "público". "Planet_osm_point") 2015-08-08T12: 10: 23 1 Chave primária é ctid - alteração dos recursos existentes desativado (caminho; "público". "planet_osm_line") 2015-08-08T12: 10: 23 1 Tipo de recurso ou srid para o caminho de "público". "planet_osm_polygon" não pôde ser determinado ou não foi solicitado.
Mathieu

Respostas:


13

Fixo. O problema foi que não há chave primária.

No pgAdmin, faça essa solicitação.

ALTER TABLE tableName ADD PRIMARY KEY (id);

Exemplo para a tabela planet_osm_line e configurando a coluna osm_id, como chave primária:

ALTER TABLE planet_osm_line ADD PRIMARY KEY (osm_id);

até que osm_id seja único.


É assim que se faz!
precisa saber é o seguinte

Você acha que está certo?
27615 Mathieu

Acho que sim! Posso testá-lo no trabalho e relatar, mas agora, como você importou os dados, essa é a sua solução alternativa. Porém, um problema - por que você está editando esses dados localmente no QGIS em vez de editá-los diretamente em um editor OSM e contribuí-los de volta?
precisa saber é o seguinte

1
Sobre o OSM: é porque precisamos apenas gerar um mapa de saída com nossas especificações gráficas / de design e adicionar alguns outros dados pagos dos fornecedores (não é possível torná-los públicos). O QGIS é uma ferramenta perfeita para isso. Contribuir é outra coisa, que faremos a tempo.
27615 Mathieu

9

A solução é criar uma chave primária, como já mencionado.

Mas, por design, osm2pgsqlnão garante que o item osm_idseja único. Pode produzir várias linhas com o mesmo osm_id .

Para editar planet_osm_*tabelas no QGIS, é recomendável adicionar outra coluna de ID, por exemplo gid.

Para adicionar uma gidcoluna exclusiva :

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;

O QGIS tem problemas se a coluna geométrica for apenas GEOMETRIA. Algumas consultas podem falhar. Achei útil alterar a planet_osm_polygongeometria para MultiPolygoncom:

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

3

Eu acho que esse é um problema de chave primária. Sua tabela deve ter uma que é reconhecida quando você a exibe através do PGAdmin.

Eu tive o mesmo problema, mas recarreguei a camada com um campo de chave primária chamado ID (arbitrário) e todas as minhas ferramentas de edição agora estão ativas na barra de ferramentas.

Usando SQL, você pode adicionar uma coluna OID do tipo de dados 'serial' e criar uma chave primária usando esta instrução:

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

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

Usando uma GUI, você pode recarregar sua camada com uma chave primária que será reconhecida pelo banco de dados e, portanto, PostGIS e QGIS:

  • abra o DB Manager
  • conectar ao seu banco de dados
  • escolha 'importar camada / arquivo'
  • marque a caixa 'Chave primária' e insira um nome para a coluna 'chave primária' que armazenará os IDs únicos que permitirão a edição:

insira a descrição da imagem aqui

A partir daí, volte ao PGAdmin, conecte-se ao seu banco de dados e clique na tabela que você acabou de recriar - agora você pode ver se a coluna OID é reconhecida:

insira a descrição da imagem aqui


Sob PGAdmin, nenhuma chave primária. Como recarregar a camada?
Mathieu

@ Mathieu Eu usaria o plugin DBManager no QGIS e clique na opção 'chave primária' e nomeie o campo OBJECTID ou algo semelhante. Isso deve permitir que você tenha características editáveis ... se você tem um campo de identificação única existente que você deseja usar como sua chave primária, você sempre pode re-set que mais tarde ...
DPSSpatial

Certamente sou burro, mas no DBmanager não encontrei onde definir a chave primária. Na verdade, tenho para o "polígono planetOSM" (e outros) um aviso dizendo que não há chave primária.
Mathieu

ok - acaba de atualizar a minha resposta, mas essa é a maneira GUI de fazê-lo ... deixe-me saber se isso funciona para você ...
DPSSpatial

Muito obrigado pelo procedimento, e agora entendo por que não consigo: o banco de dados é importado usando osm2pgsql diretamente no postgis a partir do arquivo osm.pbf. No seu procedimento, há um arquivo externo que precisa ser carregado. No meu caso, o banco de dados já está no postgis e dizendo que nenhuma chave primária é mostrada na captura de tela. Portanto, existe uma maneira - quando o banco de dados já foi importado - de gerar no pgsql uma chave primária?
Mathieu
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.