QGIS สามารถอ่าน Spatialite Views ได้หรือไม่?


11

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

ฉันสร้างมุมมองในฐานข้อมูลของฉัน แต่ไม่ปรากฏในรายการคลาสคุณลักษณะที่ฉันสามารถนำเข้าได้เมื่อฉันเชื่อมต่อกับ spatialite db ใน QGIS บางทีวิวไม่ถือว่าเป็นพื้นที่ (นี่คือสิ่งที่ฉันจะตรวจสอบในภายหลัง แต่ฉันคิดว่าฉันทำไปแล้วฉันไม่จำข้อสรุป) ไม่ว่าในกรณีใดคนหนึ่งจะทำซ้ำขั้นตอนการทำงานที่ฉันต้องการหรือ ArcGIS ทางเลือกอื่นที่คล้ายคลึงกันได้อย่างไร ?

คำตอบ:


15

ฉันคิดว่าคุณต้องลงทะเบียนมุมมองในตาราง geometry_columns เพื่อให้สามารถใช้งานได้ใน QGIS

ทรัพยากรที่ดีคือ"เขียน Spatial VIEW ของคุณเอง"ด้วยตัวอย่างต่อไปนี้:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column)
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry');

อย่างไรก็ตามคุณต้องลงทะเบียนมุมมองนี้ลงใน views_geometry_columns ดังนั้นเพื่อให้เป็นมุมมองเชิงพื้นที่จริง


ดูเหมือนว่าจะเป็นปัญหา ฉันสร้างมุมมองและตรวจสอบตารางเมตา เห็นได้ชัดว่ารูปเรขาคณิตจากมุมมองไม่ปรากฏ ฉันจะลงทะเบียนเรขาคณิตของมุมมองได้อย่างไร ฉันลอง RecoverGeometryColumn แต่มันบอกฉันว่าไม่มีตาราง ฉันคิดว่าฉันใช้เวอร์ชั่น 2.4 แต่ดูเหมือนว่าฉันจะทำงานกับ Spatialite 3.0 เบต้า บางทีฉันอาจใช้คำสั่งผิดหรือเปล่า? บางทีมันอาจไม่ทำงานกับมุมมอง? (ดีกว่า!); เพื่อความชัดเจนคำสั่งของฉันคือ SELECT RecoverGeometryColumn ('tblName', 'SHAPE', 2226, 'POINT', 2);
ไบรอัน Goodrich

4
มีตารางพิเศษสำหรับจัดการมุมมองตามรูปทรงเรขาคณิต ใช้ไวยากรณ์ต่อไปนี้ INSERT INTO VIEWS_GEOMETRY_COLUMNS ค่า ('{Table NAME}', '{GEOM COLUMN NAME}', '{GEOM TYPE}', 2, {SRID}, 0);
นาธาน W

ตัวอย่าง: INSERT INTO VIEWS_GEOMETRY_COLUMNS ค่า ('Towns_v1', 'เรขาคณิต', 'POINT', 2, 32632, 0);
นาธาน W

ใช้SELECT * FROM views_geometry_columns;เพื่อดูสิ่งที่จำเป็นต้องใส่ ข้อมูลเพิ่มเติมที่gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/…
Nathan W

2

คุณอาจต้องใส่ ID ที่ไม่ซ้ำกันในมุมมองคล้ายกับสิ่งที่กล่าวถึงที่นี่: ใน PostGIS เป็นไปได้ไหมที่จะสร้างมุมมองด้วย ID ที่ไม่ซ้ำกัน


หากฉันไม่ได้เลือก PK อย่างชัดเจนในการสร้างมุมมอง ID ที่ไม่ซ้ำกันจะถูกนำติดตัวไปด้วยหรือไม่ อย่างน้อยสำหรับแบบสอบถามแบบใช้เลือกข้อมูลที่ฉันกำลังทำอยู่ที่นี่
Bryan Goodrich

@ BryanGoodrich- ลองดู แต่วิธีนี้ใช้ไม่ได้กับมุมมอง PostGIS เท่าที่ฉันได้พบ
RyanKDalton

มุมมองถูกสร้างขึ้นโดย "SELECT * จากอาชญากรรม WHERE ... " และฉันเซ็ตย่อยโดย where-clause สิ่งนี้ส่งคืนคอลัมน์ PK (rowname ซึ่งฉันสร้างขึ้นจากชื่อคอลัมน์ในตาราง R ที่ฉันใช้เพื่อเติม SQLite DB) ปัญหาดังกล่าวอยู่ภายใต้การชี้ให้เห็น: ต้องการการอ้างอิงทางเรขาคณิตในตารางเมตา นี่คือสิ่งที่ QGIS ใช้เพื่อระบุตารางเชิงพื้นที่และมุมมองไม่มีบันทึกใด ๆ ในตารางเมตาเหล่านั้น
ไบรอัน Goodrich

ดีแล้วที่รู้. ขอขอบคุณที่ถามคำถามและได้รับคำตอบที่ดี
RyanKDalton

2

การลงทะเบียนมุมมองใน geometry_columns ทุกวันนี้ (ปี 2558) ดูเหมือนจะต้องการฟิลด์เพิ่มเติม 'read_only' เช่นนั้น:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry', 1);

1
คุณช่วยเพิ่มลิงค์ไปยังเอกสารประกอบได้ไหม? ขอบคุณ!
underdark

2

สำหรับ SpatialLite 4.x จำเป็นต้องเปลี่ยนคำตอบเดิมสองครั้งซึ่งเป็นการเพิ่มread_onlyคอลัมน์และเปลี่ยนค่าที่แทรกไว้ทั้งหมดเป็นตัวพิมพ์เล็ก SQL ที่อัปเดตจะมีลักษณะดังนี้:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'rowid', 'local_councils', 'geometry', 1);

read_onlyฟิลด์ยอมรับ 0 หรือ 1 (ความคิดเห็นดูซานโดร Furieri ในGoogle Groupsสำหรับคำชี้แจงเพิ่มเติม.)

รายละเอียดเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงเหล่านี้และ 4.x อื่น ๆ ที่สามารถพบได้ในวิกิพีเดียเปลี่ยนไป 4.0


1
INSERT INTO views_geometry_columns VALUES
('nameOfView' , 'geometry', 'rowid', 'geometryTable', 'geometry', 1);

หมายเหตุ: แทนที่เท่านั้น: nameOfView และ geometryTable

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