Składnia GDAL SQL, aby dodać pole wartości put

9

Próbuję utworzyć nowe pole w mojej tabeli atrybutów i wstawić wartości z innego pola po konwersji z znaku na liczbę całkowitą, ale nie mogę uzyskać właściwej składni. Uruchamiam to jako skrypt powłoki w 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))"

Komunikat o błędzie (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.

Edycja - Kolejna wersja 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))"

Komunikat o błędzie:

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
źródło
Jaki masz błąd?
RK
@RK, dodałem komunikat o błędzie do op.
Kay
próbowałeś CAST zamiast CONVERT?
dmci
Zrobiłem bez powodzenia ..
Kay

Odpowiedzi:

13

Ponieważ UPDATE nie jest obsługiwane w OGR SQL , jak stwierdzono w komentarzu, należy zaktualizować tabelę przy użyciu dialektu SQLite SQL dostępnego w GDAL> = 1.10 z obsługą SQLite i 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
źródło
3

Możesz spróbować użyć operatora CAST, o czym wspomniał dmci

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

Dialekt SQL obsługiwany przez OGR nie ma KONWERSJI, jeśli jest poprawnie wywoływany. Możesz sprawdzić dokumenty, aby uzyskać więcej informacji. Powodzenia!

RK
źródło
1
Niby UPDATEnie jest obsługiwany, patrz tutaj: osgeo-org.1560.x6.nabble.com/… Jednak powinien być w dialekcie SQLite, ale ja też nie miałem z tym szczęścia ...
Kay
Jakiej wersji GDAL używasz?
RK
Używam gdal-17
Kay
1
Dialekt SQLite wymaga GDAL / OGR 1.10 .
scruss