Sintaks GDAL SQL untuk menambahkan bidang nilai put

9

Saya mencoba membuat bidang baru di tabel atribut saya dan memasukkan nilai dari bidang lain setelah mengkonversi dari karakter ke integer tetapi tidak bisa mendapatkan sintaks yang tepat. Saya menjalankan ini sebagai shell-script di 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))"

Pesan Kesalahan (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.

Sunting - Lain lagi dengan 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))"

Pesan eror:

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
sumber
Kesalahan apa yang Anda dapatkan?
RK
@RK, saya menambahkan pesan kesalahan ke op.
Kay
Sudahkah Anda mencoba CAST dan bukannya CONVERT?
dmci
Saya berhasil tanpa hasil ..
Kay

Jawaban:

13

Karena UPDATE tidak didukung dalam OGR SQL , seperti yang Anda nyatakan dalam komentar, Anda harus memperbarui tabel menggunakan dialek SQLite SQL yang tersedia di GDAL> = 1.10 dengan dukungan SQLite dan 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))"
Antonio Falciano
sumber
3

Anda dapat mencoba menggunakan operator CAST seperti yang disebutkan oleh dmci seperti itu

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

Dialek SQL yang didukung oleh OGR tidak memiliki CONVERT jika dipanggil dengan benar. Anda dapat memeriksa dokumen untuk info lebih lanjut. Semoga berhasil!

RK
sumber
1
Tampaknya UPDATEtidak didukung, lihat di sini: osgeo-org.1560.x6.nabble.com/... Namun, itu harus dalam dialek SQLite tetapi saya tidak beruntung dengan itu, baik ..
Kay
GDAL versi apa yang Anda gunakan?
RK
Saya menggunakan gdal-17
Kay
1
Dialek SQLite membutuhkan GDAL / OGR 1.10 .
scruss