วิธีจัดการกับการกำหนดเวอร์ชันใน OpenStreetMap


11

หัวข้อของการจัดการข้อมูลเชิงพื้นที่ในแง่ทั่วไปได้เกิดขึ้นที่นี่ หัวข้อของการกำหนดเวอร์ชันได้รับการกล่าวถึงเช่นกัน แต่ไม่ได้เกี่ยวข้องกับ

การรวบรวมและบำรุงรักษาข้อมูลเชิงพื้นที่แบบดั้งเดิมจำเป็นต้องจัดการกับการกำหนดเวอร์ชันภายในเท่านั้นเนื่องจากฐานข้อมูลจะได้รับการอัปเดตจากภายในองค์กรเท่านั้น นี่ไม่ใช่กรณีในฐานข้อมูล Geod ที่มีแหล่งข้อมูลหนาแน่นเช่น OpenStreetMap ที่นั่นใคร ๆ ก็สามารถเข้ามาและเพิ่มแก้ไขหรือลบวัตถุได้ ใน OpenStreetMap สิ่งนี้ได้รับการจัดการด้วยวิธีการพื้นฐาน: แต่ละวัตถุมีหมายเลขรุ่นจำนวนเต็มและเฉพาะวัตถุที่มีรุ่นที่สูงที่สุดเท่านั้นที่เปิดเผยในฐานข้อมูลสด ฐานข้อมูลใช้การล็อกในแง่ดีดังนั้นผู้ใช้จะต้องแก้ไขข้อขัดแย้งทั้งหมดที่เกิดขึ้นเมื่ออัพโหลดการสนับสนุนด้วยตนเอง

ทั้งหมดนี้ทำงานได้ดีพอสมควรตราบใดที่การมีส่วนร่วมของมนุษย์ผ่านบรรณาธิการ ( JOSM , Potlatch ) เป็นรูปแบบการมีส่วนร่วมเพียงอย่างเดียว - แต่พวกเขาไม่ได้ มีการนำเข้าข้อมูลภาคสาธารณะแบบเปิดกว้างมากขึ้น สิ่งเหล่านี้ทำให้เกิดปัญหาการกำหนดเวอร์ชันที่ซับซ้อนมากขึ้น พิจารณาสถานการณ์สมมติต่อไปนี้:

  1. กำลังสร้างวัตถุนำเข้าจากชุดข้อมูลสาธารณะที่เปิดอยู่
  2. อาคารได้รับการดัดแปลงบางอย่างโดยผู้มีส่วนร่วมของมนุษย์ (คุณลักษณะเรขาคณิตหรือทั้งสองอย่าง)
  3. ข้อมูลภาครัฐรุ่นใหม่มีให้บริการและนำเข้าแล้ว

ปัจจุบันในขั้นตอนที่ 3 เงินบริจาคจากมนุษย์จะสูญหายไปเว้นแต่อาคารแต่ละหลังที่ได้รับการดัดแปลงชุมชนจะถูกรวมเข้าด้วยตนเองด้วยการนำเข้าใหม่

OpenStreetMap จะจัดการกับสถานการณ์นี้ได้อย่างไร? เราจำเป็นต้องดูที่การควบคุมเวอร์ชันแบบกระจายในการพัฒนาซอฟต์แวร์หรือไม่? วิธีการของ DVC สามารถปรับให้รับมือกับการบำรุงรักษาข้อมูลเชิงพื้นที่แบบกระจายได้อย่างไร

คำตอบ:


5

ฉันใฝ่ฝันที่จะมีคนใช้การแก้ไขแบบไม่ทำลายสำหรับข้อมูล GIS มันคำนวณอย่างเข้มข้น แต่ไม่ควรนำไปใช้งานได้ยากใน RDBMS

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

สิ่งนี้จะช่วยให้คุณสามารถยกเลิกในระดับที่ละเอียด มันเป็นสิ่งสำคัญที่การควบคุมเวอร์ชันทำ ตัวอย่างที่ดีของการแก้ไขแบบไม่ทำลายคือ Apple Aperture รูปภาพดิจิทัลที่นำเข้าในรูรับแสงจะไม่ถูกปรับเปลี่ยนโดยตรง การเปลี่ยนแปลงในระดับการปรับความคมชัดเบลอ ฯลฯ จะถูกจัดเก็บเป็นการแก้ไขและนำไปใช้ได้ทันทีเมื่อคุณทำงานกับภาพ การเปลี่ยนแปลงใด ๆ ที่สามารถลบออกได้ทันที

แน่นอนว่าคุณจะใช้สแน็ปช็อตของฐานข้อมูลเพื่อการแจกจ่ายและใช้ในสภาพแวดล้อมการผลิต สิ่งนี้จะเป็นการพัฒนาและแก้ไขเท่านั้น

ลองดูที่การกำหนดเวอร์ชันของ PostGIS , pgVersionและPost Factoสำหรับแนวคิดและวิธีแก้ไขที่เป็นไปได้ นี่คือระบบควบคุมเวอร์ชันที่ใช้ในฐานข้อมูล PostgreSQL


3

OSM ใช้ Postgres และ Postgis ซึ่งเก็บสแน็ปช็อตของฐานข้อมูล

เมื่อต้องการใช้สิ่งนี้บนเซิร์ฟเวอร์และฐานข้อมูลของคุณเอง

http://wiki.openstreetmap.org/wiki/Databases#Choice_of_DBMS

ฐานข้อมูล (plantet.osm) อัพเดททุกสัปดาห์ http://wiki.openstreetmap.org/wiki/Planet_dump

Osmosisใช้ในการ"มันมีส่วนประกอบสำหรับการอ่านจากฐานข้อมูลและจากไฟล์ส่วนประกอบสำหรับการเขียนไปยังฐานข้อมูลและไปยังไฟล์ส่วนประกอบสำหรับการรับและการใช้ชุดการเปลี่ยนแปลงกับแหล่งข้อมูล"

http://wiki.openstreetmap.org/wiki/Osmosis

Changsets: http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage#Changeset_Derivation_and_Merging


0

ฉันว่าปัญหานี้และมีความคิด แต่ไม่ได้ทดสอบ มันอาจทำงานได้:

ใช้ระบบควบคุมเวอร์ชันเช่น Mercurial หรือ Git Mercurial จะง่ายขึ้นเพราะมันจะช่วยสร้างกิ่งที่ไม่ระบุชื่อได้อย่างง่ายดาย

ตอนนี้จากการแก้ไขครั้งแรกเริ่มสาขาสำหรับการนำเข้าชุดข้อมูลสาธารณะ ดังนั้นจะมี 2 สาขา:

  1. ฉีด (OSM)
  2. ชุดข้อมูลสาธารณะ X

การนำเข้าจากชุดข้อมูลสาธารณะควรทำในสาขา 2 จากนั้นรวมเข้ากับสาขา OSM

สถานการณ์ของคุณอาจทำงานดังนี้:

  • วัตถุไม่มีอยู่
  • จากนั้นจะถูกนำเข้าและรวมเข้าไปในสาขา 1
  • จากนั้นจะถูกแก้ไขในการฉีดรวมถึงรูปทรงเรขาคณิต
  • มันนำเข้าอีกครั้งในสาขา 2
  • เมื่อรวมเข้ากับสาขา 1 เฉพาะข้อมูลที่อัปเดตในสาขา 2 เท่านั้นที่จะได้รับการอัปเดตในสาขา 1

สิ่งนี้อาจต้องแยกข้อมูลออกเป็นหลายไฟล์หนึ่งรายการต่อวัตถุและอาจอยู่ในรูปแบบเช่น json เพื่อให้ VCS สามารถจัดการกับการเปลี่ยนแปลงแอตทริบิวต์ที่แยกกันได้อย่างง่ายดาย

{
     id: 1357
     lat: 1,
     lon: 2,
     tags: {
          'building': 'entrance'
     }
     type: 'node',
}
{
     nodes: [
         1357,
         2468
     ],
     tags: {
         building: 'yes',
     }
     type: 'way',
}

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

ฉันไม่สามารถรับประกันได้ว่ามันจะทำงาน

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