GDAL SQL-Syntax zum Hinzufügen von Feld- und Put-Werten

9

Ich versuche, ein neues Feld in meiner Attributtabelle zu erstellen und Werte aus einem anderen Feld einzugeben, nachdem ich von Zeichen in Ganzzahlen konvertiert habe, kann aber nicht die richtige Syntax erhalten. Ich führe dies als Shell-Skript in MSYS aus.

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))"

Fehlermeldung (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.

Bearbeiten - Ein weiterer Schritt mit 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))"

Fehlermeldung:

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.
Kay
quelle
Welchen Fehler bekommen Sie?
RK
@RK, ich habe die Fehlermeldung zum op hinzugefügt.
Kay
Haben Sie CAST statt CONVERT ausprobiert?
dmci
Ich habe ohne Erfolg ..
Kay

Antworten:

13

Da UPDATE in OGR SQL nicht unterstützt wird , wie Sie in einem Kommentar angegeben haben, sollten Sie die Tabelle mit dem in GDAL> = 1.10 verfügbaren SQLite SQL-Dialekt mit SQLite- und SpatiaLite- Unterstützung aktualisieren :

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))"
Antonio Falciano
quelle
3

Sie können versuchen, den CAST-Operator zu verwenden, wie dmci dies bereits erwähnt hat

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

Der von OGR unterstützte SQL-Dialekt verfügt bei korrektem Rückruf nicht über CONVERT. Sie können die Dokumente für weitere Informationen überprüfen . Viel Glück!

RK
quelle
1
Scheinbar UPDATEwird dies nicht unterstützt, siehe hier: osgeo-org.1560.x6.nabble.com/… Es sollte jedoch im SQLite-Dialekt sein, aber ich hatte auch kein Glück damit.
Kay
Welche Version von GDAL verwenden Sie?
RK
Ich benutze gdal-17
Kay
1
Der SQLite-Dialekt benötigt GDAL / OGR 1.10 .
Scruss