วิธีระบุฟิลด์เพื่อส่งออกจาก QGIS


9

ฉันใช้ QGIS 2.0.1 และกำลังเชื่อมต่อกับฐานข้อมูล MS SQL Server ที่เปิดใช้งานเชิงพื้นที่ (ไม่ใช่ ESRI) ฉันสามารถเชื่อมต่อกับเลเยอร์และโหลดลงใน TOC ของฉันได้ ฉันได้ซ่อนเขตข้อมูลจำนวนหนึ่งซึ่งไม่สำคัญสำหรับการมองเห็น

ตอนนี้ฉันต้องการส่งออกข้อมูลไปยังประเภทข้อมูลอื่น (เราจะใช้ shapefile สำหรับตัวอย่างนี้) เมื่อฉันคลิกขวาที่เลเยอร์เลือก "บันทึกเป็น" และกำหนดไฟล์ผลลัพธ์ฉันได้รับข้อผิดพลาดต่อไปนี้:

การส่งออกเป็นไฟล์เวกเตอร์ล้มเหลว ข้อผิดพลาด: ประเภทที่ไม่สนับสนุนสำหรับฟิลด์ GlobalID

หมายเหตุ 1 : ถ้าฉันทำเครื่องหมาย "ข้ามการสร้างแอททริบิวต์" ในกล่องโต้ตอบไฟล์รูปร่างจะถูกสร้างขึ้นโดยไม่มีข้อผิดพลาด

หมายเหตุ 2 : ArcGIS ไม่มีปัญหานี้เพียงแปลง GUID ฟิลด์เป็นประเภท "TEXT"

หนึ่งในฟิลด์ที่ฉันซ่อนไว้คือ GUID ของ SQL type < uniqueidentifier > ซึ่งเป็นผู้กระทำผิด ในความพยายามที่จะแก้ไขปัญหานี้ฉันสร้างฟิลด์ "ซ่อน" ฉันจะสันนิษฐานว่าเนื่องจากฟิลด์นั้นถูกซ่อน QGIS จะไม่พยายามส่งออกข้อมูลนี้ แต่กลับกลายเป็นว่าไม่ใช่กรณี

คุณสามารถกำหนดฟิลด์ที่คุณต้องการส่งออกจาก QGIS ได้หรือไม่?

เป็นไปได้หรือไม่ที่ QGIS จะส่งออกเฉพาะฟิลด์ "ที่มองเห็นได้" หรือมีวิธีอื่นในการทำเช่นนี้จาก QGIS (อาจกำหนดเขตข้อมูลผ่านแบบสอบถาม ogr2ogr) ดูเหมือนว่าจะเป็นข้อบกพร่องของ QGIS ถ้าฉันไม่สามารถกำหนดเขตข้อมูลที่จะส่งออกได้

UPDATE:ฉันทำการทดสอบโดยใช้ shapefile ตัวอย่างเพื่อดูว่าฉันสามารถ จำกัด ฟิลด์เอาต์พุตหรือไม่ บรรทัดคำสั่ง ogr2ogr ต่อไปนี้ทำงานและกำจัดฟิลด์ทั้งหมดยกเว้นสำหรับ "name":

ogr2ogr -f "ESRI Shapefile" test.shp city.shp -sql "select name from city"

แต่ใช้ QGIS และเพิ่ม:

-sql "select name from city"

ไปที่ส่วน "เลเยอร์" ของไดอะล็อก "บันทึกเป็น" ไม่ได้ส่งผลให้ shapefile มีเพียงฟิลด์เดียว ดังนั้นฉันจึงไม่เห็นวิธีที่ฉันสามารถจัดการกับเอาต์พุตไฟล์เพื่อแสดงเพียงไม่กี่ฟิลด์ ความช่วยเหลือใด ๆ ที่ชื่นชม


หาก ogr2ogr สามารถทำได้ QGIS สามารถทำได้เพราะนั่นเป็นเครื่องมือที่ทำงานในพื้นหลังอย่างแท้จริง น่าเสียดายที่ฉันไม่มี SQL Server db เพื่อทดสอบ ...
underdark

ขวา. ดังนั้นฉันจึงพยายามเพิ่ม-sql "select <fields> from <table>"(ยกเว้นเขตข้อมูล GlobalID จาก <fields>) ไปยังส่วน "เลเยอร์" ของกล่องโต้ตอบ "บันทึกเป็น" แต่ข้อผิดพลาดเดิมยังคงปรากฏขึ้น ฉันใช้บล็อกโค้ดนี้ในทางที่ผิดหรือเป็นข้อบกพร่องหรือไม่
RyanKDalton

คำตอบนี้แนะนำ - เลือกแทน-sql gis.stackexchange.com/questions/30691/ ...... ฉันคิดว่ามันไปในส่วนของแหล่งข้อมูลไม่ใช่ในเลเยอร์
underdark

ไม่มีโชคสำหรับฉันด้วยคำแนะนำอย่างใดอย่างหนึ่งของฉันฉันได้ลองชุดค่าผสมหลายตัวเลือก - -sq & -sql ทั้งในฟิลด์ "เลเยอร์" และ "แหล่งข้อมูล" ของ "ตัวเลือกการสร้าง OGR" :( แน่นอนฉันไม่สามารถ คนแรกที่มีความจำเป็นในการส่งออกย่อยของสาขา ...
RyanKDalton

อาจคุ้มค่าที่จะตรวจสอบกับผู้พัฒนา อาจเป็นข้อผิดพลาด
underdark

คำตอบ:


1

ถ้ามันเหมาะกับคุณใน command line ด้วย ogr2ogr ฉันคิดว่ามันเป็นทางออกที่ดีที่สุดในการใช้มัน คุณสามารถเขียนไฟล์ bat แบบง่ายเพื่อสร้าง shapefile จากฐานข้อมูล MSSQL ของคุณ เห็นได้ชัดว่าคุณไม่สามารถแก้ไขข้อมูลและบันทึกกลับไปที่เซิร์ฟเวอร์ได้

QGIS มี Data Input และ Layer input box แต่เป็นเพียงพารามิเตอร์ -dsco และ -lco ของ ogr2ogr OGR Shapefile driver ไม่มี dsco หรือ lco ที่มีประโยชน์สำหรับความต้องการของคุณ:

http://www.gdal.org/ogr2ogr.html

http://www.gdal.org/ogr/drv_shapefile.html

หรือคุณควรเขียนปลั๊กอินหลามที่ร้องขอข้อมูลจากเซิร์ฟเวอร์ด้วยคำสั่ง SQL SELECT ตามที่คุณต้องการ สิ่งนี้จะทำให้สามารถแก้ไขข้อมูลได้


จนถึงตอนนี้ดูเหมือนว่าเป็นความคิดที่เป็นไปได้มากที่สุด มีวิธีการโทรโดยตรงบรรทัดคำสั่ง ogr2ogr จากส่วนติดต่อผู้ใช้ QGIS เพื่อม้วนไวยากรณ์ ogr2ogr ของคุณเองหรือไม่
RyanKDalton

ไม่ได้โดยตรง แต่คุณสามารถขโมยขั้ว gdalwarp เพื่อป้อนคำสั่ง ogr2ogr ของคุณได้ที่นั่น คุณได้รับข้อผิดพลาดที่เลเยอร์ไม่ได้ถูกสร้างขึ้น แต่อยู่ในระบบไฟล์อยู่แล้ว ไม่แน่ใจว่าเกิดอะไรขึ้นถ้าไฟล์มีอยู่แล้วดังนั้นควรเพิ่ม -overwrite ด้วย และควรใช้ชื่อพา ธ แบบเต็มสำหรับไฟล์
AndreJ

คุณเคยลองใช้ไฟล์เสมือน GDAL VRT เป็นสื่อกลางระหว่าง MSSQL และ QGIS หรือไม่?
AndreJ

ฉันยังไม่ได้ แต่ไม่ใช่ GDAL สำหรับการทำงานกับ rasters หรือไม่ ฉันกำลังทำงานกับเลเยอร์เวกเตอร์แบบจุด ฉันชอบความคิดของ "ตารางเสมือนจริง" ที่เป็นตัวเลือก QGIS 2 ไม่มีเลเยอร์ในหน่วยความจำที่เราสามารถเขียนถึงได้หรือไม่?
RyanKDalton

1
นอกจากนี้ยังมี GDAL ogrvrt ขับ: gdal.org/ogr/drv_vrt.html แต่ฉันคิดว่านี่น่าจะเป็นคำถามอื่นดีกว่า
AndreJ

0

ฉันขอแนะนำให้คุณตรวจสอบตารางคุณลักษณะสำหรับเลเยอร์ใน TOC และหากมี GlobalID อยู่ สลับเป็นโหมดแก้ไขลบคอลัมน์ที่สร้างปัญหาระหว่างการส่งออกและปิดหน้าต่าง จากนั้นบันทึกเป็น shapefile หรือรูปแบบเอาต์พุตใด ๆ ที่คุณต้องการ ฉันหวังว่านี่จะช่วยได้.


1
ฉันไม่แน่ใจว่าการลบเขตข้อมูลในตาราง SQL Server เป็นตัวเลือกที่ดีหรือไม่ เซิร์ฟเวอร์อาจยังต้องการ
AndreJ

ฉันคิดว่าการลบคอลัมน์คุณลักษณะจาก QGIS TOC Layer บันทึกโครงสร้างที่ปรับปรุงในบัฟเฟอร์ QGIS และช่วยให้คุณสามารถส่งออกไฟล์ในรูปแบบอื่น เมื่อคุณเสร็จสิ้นการส่งออกอย่าบันทึกการเปลี่ยนแปลงของเลเยอร์ (สิ่งที่คุณได้ลบ)
Farhat Abbas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.