ไวยากรณ์ GDAL SQL เพื่อเพิ่มฟิลด์การใส่ค่า


9

ฉันพยายามสร้างฟิลด์ใหม่ในตารางคุณลักษณะของฉันและใส่ค่าจากฟิลด์อื่นหลังจากแปลงจากอักขระเป็นจำนวนเต็ม แต่ไม่สามารถรับไวยากรณ์ที่ถูกต้องได้ ฉันเรียกใช้สิ่งนี้เป็นเชลล์สคริปต์ใน 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))"

ข้อความผิดพลาด (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.

แก้ไข - ไปกับ 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))"

ข้อความผิดพลาด:

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.

คุณได้รับข้อผิดพลาดอะไร
RK

@RK ฉันเพิ่มข้อความแสดงข้อผิดพลาดใน op
Kay

คุณลอง CAST แทน CONVERT หรือไม่
dmci

ฉันไม่ประสบความสำเร็จ ..
Kay

คำตอบ:


13

เนื่องจาก UPDATE ไม่ได้รับการสนับสนุนในOGR SQLดังที่คุณระบุไว้ในความคิดเห็นคุณควรอัปเดตตารางโดยใช้ภาษา SQLite SQL ที่มีอยู่ในGDAL> = 1.10 ด้วยการสนับสนุนSQLite และ 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

คุณสามารถลองใช้โอเปอเรเตอร์ CAST ตามที่dmciระบุไว้เช่นนี้

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

ภาษา SQL ที่สนับสนุนโดย OGR ไม่มี CONVERT หากการเรียกคืนถูกต้อง คุณสามารถตรวจสอบเอกสารสำหรับข้อมูลเพิ่มเติม โชคดี!


1
ดูเหมือนUPDATEจะไม่ได้รับการสนับสนุนโปรดดูที่นี่: osgeo-org.1560.x6.nabble.com/ ......อย่างไรก็ตามมันควรจะอยู่ในภาษาถิ่นของ SQLite แต่ฉันก็ไม่มีโชคกับเรื่องนั้นเช่นกัน ..
Kay

คุณใช้ GDAL รุ่นใดอยู่
RK

ฉันใช้ gdal-17
Kay

1
ภาษา SQLite ต้องการGDAL / OGR 1.10
scruss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.