การเลือกคุณสมบัติตามคุณสมบัติโดยใช้ ogr2ogr?


17

ฉันกำลังเขียน shapefile หลังจากประมวลผลบางอย่าง; อย่างไรก็ตามในขั้นตอนสุดท้ายฉันต้องทำการเลือกบางอย่างโดยคุณสมบัติจาก Shapefile

ฉันใช้คำสั่งในเชลล์โดยมีวัตถุประสงค์เพื่อใช้ในสคริปต์ Python เมื่อทำงาน

ogr2ogr -f "ESRI Shapefile" -select * where ID="1" outfile.shp infile.shp

ฉันได้รับข้อความแสดงข้อผิดพลาด:

FAILURE: 
Unable to open datasource `Downloads' with the following drivers.

ฉันทำอะไรผิดได้


นั่นเป็นข้อความที่แน่นอนสำหรับคำสั่งนั้นจริงหรือ
BradHards

คำตอบ:


30

คุณพลาดเครื่องหมายลบก่อนหน้าwhereและselectไม่จำเป็นดังนั้นจึงควร:

ogr2ogr -where ID="1" outfile.shp infile.shp

หรือถ้าคุณต้องทำแบบสอบถามที่ซับซ้อนมากขึ้นในข้อมูลที่คุณป้อน:

ogr2ogr -sql "SELECT * FROM infile WHERE ID='1'" outfile.shp infile.shp

ถ้าIDเป็นเขตของชนิดจำนวนเต็มแทนด้วยID='1'ID=1

หมายเหตุ:

  1. -f "ESRI Shapefile"ไม่จำเป็นเพราะ"ESRI Shapefile"เป็นogr2ogrรูปแบบเอาต์พุตเริ่มต้น
  2. สะดวกในการข้าม-selectและใช้ส่วน-whereคำสั่งโดยตรงเมื่อคุณต้องการเลือกเขตข้อมูลทั้งหมด

1
ขอบคุณมากมันใช้งานได้ ฉันใช้: ogr2ogr -where "ID = '1'" output.shp input.shp
user2757128

ฉันจะใช้รหัสนี้ได้อย่างไร: ogr2ogr -sql "SELECT * จาก infile WHERE ID = '1'" outfile.shp infile.shp "ในไพ ธ อน?
Shiuli Pervin

1
@ShiuliPervin os.system('''ogr2ogr ... ''') คุณสามารถใช้คำสั่งในหลามโดยใช้ ต้องแน่ใจว่าimport osอยู่ด้านบนสุดของสคริปต์ไพ ธ อนของคุณ
geoeye

@afalciano สำหรับคำสั่งogr2ogr -sql "SELECT * FROM infile WHERE ID='1'" outfile.shp infile.shpแทนที่จะเป็นเพียง ID = 1 มีวิธีให้เวกเตอร์หรือชุดของตัวเลขแทนเช่นogr2ogr -sql "SELECT * FROM infile WHERE ID IN ['1','5','29']" outfile.shp infile.shp?
hlm

@afalciano อีกอย่างหนึ่ง ... แทนที่จะเขียนไฟล์ shp อีกไฟล์หนึ่งมีวิธีรับพิกัดของรูปหลายเหลี่ยม ID ที่เลือกหรือไม่
hlm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.