Sintaxe GDAL SQL para adicionar valores de campo e de colocação


9

Tento criar um novo campo na minha tabela de atributos e inserir valores de outro campo após converter de caractere para número inteiro, mas não consigo obter a sintaxe correta. Eu executo isso como shell-script no MSYS.

cd D:/GIS_DataBase/CorineLC/shps_app_and_extr/
myfile=extr_and_app.shp

name=${myfile%.shp}

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num int(3)"
ogrinfo $myfile -sql "UPDATE TABLE $name SET code_num = CONVERT(code_06 As int(3))"

Mensagem de erro (MSYS):

Kay@KAY-PC /c/users/kay/desktop/bash
$ sh calc_field_shp.sh
Warning 6: Unsupported column type 'int'. Defaulting to VARCHAR
INFO: Open of `extr_and_app.shp'
      using driver `ESRI Shapefile' successful.
ERROR 1: SQL Expression Parsing Error: syntax error
INFO: Open of `extr_and_app.shp'
      using driver `ESRI Shapefile' successful.

Editar - Outra opção com o SQLite:

cd D:/GIS_DataBase/CorineLC/shps_app_and_extr/
myfile=extr_and_app.dbf

name=${myfile%.dbf}

ogrinfo $myfile -sql "ALTER TABLE $name DROP COLUMN code_num"

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num integer(3)"
ogrinfo $myfile -dialect SQLite -sql "UPDATE $name SET code_num = CAST(code_06 As integer(3))"

Mensagem de erro:

Kay@KAY-PC /c/users/kay/desktop/bash
$ sh calc_field_shp.sh
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
ERROR 1: SQL Expression Parsing Error: syntax error
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.

que erro você está tendo?
RK

@RK, adicionei a mensagem de erro ao op.
Kay

você tentou o CAST em vez do CONVERT?
dmci

Eu fiz sem sucesso ..
Kay

Respostas:


13

Como UPDATE não é suportado no OGR SQL , como você afirmou em um comentário, você deve atualizar a tabela usando o dialeto SQLite SQLite disponível em GDAL> = 1.10 com suporte ao SQLite e SpatiaLite :

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num integer(3)"
ogrinfo $myfile -dialect SQLite -sql "UPDATE $name SET code_num = CAST(code_06 AS integer(3))"

3

Você pode tentar usar o operador CAST como o dmci mencionou da seguinte maneira

ogrinfo $myfile -sql "UPDATE TABLE $name SET code_num = CAST(code_06 as int(3))"

O dialeto SQL suportado pelo OGR não possui CONVERT se for recuperado corretamente. Você pode verificar os documentos para obter mais informações. Boa sorte!


11
Aparentemente UPDATEnão é suportado, consulte aqui: osgeo-org.1560.x6.nabble.com/... No entanto, ele deve estar em SQLite dialeto mas não tive sorte com isso, quer ..
Kay

Qual versão do GDAL você está usando?
RK

Estou usando gdal-17
Kay

11
O dialeto SQLite precisa de GDAL / OGR 1.10 .
scruss
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.