ประมวลผลข้อมูล OSM แบบดิบสำหรับ openstreetmap.org อย่างไร


12

ใครบ้างสามารถให้ข้อมูลเชิงลึกเกี่ยวกับวิธีการประมวลผลหรือแสดงผลข้อมูล OSM สำหรับ www.openstreetmap.org

ตัวอย่างที่เฉพาะเจาะจง ... ฉันดึงข้อมูลจากชุดข้อมูล planet.osm ล่าสุด PostGIS สำหรับพื้นที่ในรัฐมิสซูรี ข้อมูล OSM ต้องการการทำความสะอาดจำนวนมากก่อนที่จะสามารถแสดงผลได้โดยใช้สไตล์ที่ถูกต้อง แหล่งน้ำจำนวนมากถูกเก็บไว้เป็นสายอักขระที่ไม่ได้ปิดอย่างถูกต้องดังนั้นฉันต้องใช้ FME สำหรับการหักมุมแล้วสร้างรูปหลายเหลี่ยมเพื่อที่ฉันจะได้มีแม่น้ำ / ทะเลสาบที่เต็มไปด้วยสีฟ้า

ถ้าฉันดูข้อมูลเดียวกันที่นี่น้ำจะถูกแสดงตามที่คาดไว้

ฉันมีปัญหาในการระบุทุกกรณีที่จำเป็นต้องใช้การจัดเรียง (เช่นประเภท 'ธรรมชาติ' ต้องการและความอดทนควรเป็นเท่าใด) นอกจากนี้ฉันสงสัยว่ามีปัญหาข้อมูลอื่น ๆ อีกมากมายที่ฉันจะไม่มีวันเห็นเมื่อฉันติดต่อกับอเมริกาเหนือทั้งหมด

ทุกคนที่ดาวน์โหลดและใช้ข้อมูล OSM ผ่านกระบวนการล้างข้อมูลของตนเองหรือไม่ ไม่มีใครทราบวิธีจัดการการล้างข้อมูลนี้โดย www.openstreetmap.org ดูเหมือนว่ากระบวนการของพวกเขาจะเป็นข้อมูลที่ดีที่สุดและผ่านการทดสอบมากที่สุด

ความเข้าใจใด ๆ ชื่นชมมาก

แก้ไข : นี่คือข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนการทำงานของฉัน

ไฟล์ planet.osm ถูกดาวน์โหลดและโหลดลงใน PostGIS โดยใช้ Osmosis ลงในสคีมา pgsql จากนั้นฉันก็แยก OSM xml จาก PostGIS สำหรับพื้นที่ขนาดเล็กจำนวนมากอีกครั้งโดยใช้ Osmosis ไฟล์ xml ขนาดเล็กแต่ละไฟล์เหล่านี้จะถูกแปลงเป็น Shapefiles โดยใช้ FME และหมวดหมู่คุณสมบัติแบบกว้าง ๆ เป็นขั้นตอนนี้ (OSM xml -> Shp ผ่าน FME) ที่ฉันคาดว่าจะแปลงบรรทัดเป็นรูปหลายเหลี่ยมและดำเนินการล้างข้อมูลอื่น ๆ

Shapefiles เหล่านี้ให้บริการผ่าน GeoServer (และแคชโดยใช้ GWC)


คุณต้องการที่จะให้บริการกระเบื้อง? ถ้าเป็นเช่นนั้นที่เดียวที่จะเริ่มต้นคือที่นี่: switch2osm.org/serving-tiles
neuhausr

คำตอบ:


9

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

มีสองวิธีหลักในการใช้ข้อมูล OSM - โดยใช้osm2pgsqlซึ่งเป็นยูทิลิตี้รุ่นเก่าที่รองรับ 'stylesheets' และการอัพเดตที่แตกต่างกันและImposmซึ่งเป็นระบบใหม่ที่ใช้ Python ซึ่งรองรับการแปลงสไตล์ Python เมื่อผู้คนทำการประมวลผลส่วนใหญ่จะอยู่ในสคริปต์ประเภทนั้น ตัวอย่างเช่นนี่คือการแม็พ imposm สำหรับ osm-brightสไตล์ชีทที่MapBox Streets (การเปิดเผย / พนักงาน) ใช้

เพื่อให้เฉพาะเจาะจงมากขึ้นกับสิ่งที่คุณพบอาจเป็นไปได้ว่าคุณไม่สามารถประมวลผลความสัมพันธ์ของ osmได้อย่างถูกต้องซึ่งในตัวแบบข้อมูลเป็นสิ่งที่อนุญาตให้ linestrings หลายตัวสร้างรูปหลายเหลี่ยมได้ เครื่องมือเช่น Imposm และ osm2pgsql โดยทั่วไปจะจัดการกับการแปลงข้อมูลให้คุณ

เท่าที่วิธี OSM.org ตัวเองทำสิ่ง: การแก้ไขอยู่ใน 'ความหมาย' ฐานข้อมูล Postgres และนำเข้าอย่างต่อเนื่องลงในฐานข้อมูล PostGIS กับการดูดซึมและการแสดงผลที่มีMapnik ไม่มีขั้นตอนการล้างข้อมูลด้วยตนเองระหว่างฐานข้อมูลและการแสดงแผนที่เนื่องจากทั้งคู่เชื่อมโยงกันอย่างมากและแผนที่มีจุดมุ่งหมายให้ทันสมัย


ขอบคุณสำหรับข้อมูล. คุณจะกรุณาดูการแก้ไขของฉันและบอกฉันว่าสิ่งนี้มีผลกับตัวเลือกของฉันอย่างไร ฉันชอบความคิดของการใช้ Imposm หรือ osm2pgsql เพื่อสร้างพื้นที่เหล่านี้ แต่ฉันคิดว่านี่ต้องมี schema ที่ไม่ใช่ (pgsql) ที่แตกต่างกันใน PostGIS เพราะฉันค่อนข้างมั่นใจว่ามีเพียงโหนดและตารางวิธีไม่มีพื้นที่ สมมุติว่าฉันได้รับพื้นที่ใน PostGIS ฉันจะสูญเสียพื้นที่เหล่านั้นอีกครั้งเมื่อแตกไปยัง OSM xml หรือไม่ ฉันควรจัดเก็บข้อมูลต่าง ๆ ใน PostGIS แล้วดึงข้อมูลตรงไปยัง Shp อย่างใดหรือไม่
tomfumb

5

โดยทั่วไปคุณไม่จำเป็นต้อง "snapping" เช่นนี้เนื่องจากข้อมูล OSM ดั้งเดิมมีการจัดเรียงทอพอโลยี - รูปหลายเหลี่ยม (= วิธี OSM) ตัวอย่างเช่นถูกกำหนดผ่านรายการดัชนีโหนด (และไม่ตรงตามพิกัด) ดังนั้นหากดัชนีเริ่มต้นและดัชนีสิ้นสุดเหมือนกันนั่นถือว่าเป็นรูปหลายเหลี่ยมที่ปิด ไม่เช่นนั้นจะเป็นรูปหลายเหลี่ยม (เช่นถนน)

ร่างใหญ่กว่า (เช่นแม่น้ำ Osage ในกรณีของคุณ) มักจะถูกกำหนดผ่านOSM multipolygonsซึ่งประกอบด้วยชุดของวิธีการ OSM (linestrings) ที่กำหนดรูปร่างและหลุม (ถ้ามี) มีปัญหาที่อาจเกิดขึ้นได้หลายอย่างกับ OSM multipolygons:

  1. มีมากกว่าหนึ่งวิธีในการกำหนด (เพียงแค่ดูรายละเอียด) คนต่างใช้กฎต่างกัน
  2. กฎมีความหมาย - คุณต้องอ่านเอกสาร wiki ของ OSM เพื่อพยายามทำความเข้าใจวิธีจัดการกับเอกสารเหล่านั้น
  3. หากคุณใช้ตัวแยกข้อมูล OSM บางส่วนของมัลติโพลิกอนอาจขาดหายไป (เนื่องจากไม่ได้อยู่ในรัฐมิสซูรีตามภูมิศาสตร์) ดังนั้นคุณต้องหาวิธีปิดรูปหลายเหลี่ยมของตัวน้ำ (โดยการตัดโดยใช้ขอบเขตของรัฐหรือปิดด้วยตนเองด้วยเครื่องมือ GUI บางอย่าง)

ใช่มีปัญหาข้อมูลอื่นด้วย ส่วนใหญ่พวกเขามาจากธรรมชาติของการทำแผนที่ OSM: คนที่แตกต่างกันทำแผนที่สิ่งที่แตกต่างกันและไม่มีกฎที่กำหนดไว้ในหินเกี่ยวกับวิธีการทำ มันเป็นอนาธิปไตยที่จัดการตนเองได้ไม่มากก็น้อย)

ฉันเองไม่เคยทำงานกับข้อมูล OSM แบบแบนที่สร้างขึ้นโดย osm2pgsql - ฉันมักจะเริ่มต้นด้วยข้อมูลทอพอโลยีดั้งเดิมในรูปแบบ OSM XML และเขียนรหัสเพื่อประมวลผลที่เป็นรูปแบบที่ฉันต้องการ แต่อีกครั้งฉันไม่ได้ใช้ Mapnik เพื่อการเรนเดอร์ดังนั้นฉันอาจเป็นคนส่วนน้อย


1

หากคุณใช้ชุดรูปแบบฐานข้อมูลดั้งเดิมจาก osm2pgsql คุณมีรูปแบบข้อมูลปิดของ osm ที่เกี่ยวข้องกับ 'วิธีปิด' และ 'มัลติโพลิกอนสัมพันธ์' เป็นรูปหลายเหลี่ยมและวางในตารางที่เรียกว่า 'planet_polygon' วิธีและโหนดอยู่ใน 'planet_line' และ 'planet_point' คุณสามารถเข้าถึงตารางเหล่านี้ผ่าน Quantum GIS และส่งออกโดยตรงไปยังไฟล์รูปร่าง คุณสามารถทำแบบสอบถาม SQL จากภายใน Quantum GIS เพื่อกรองข้อมูล

ฉันจะไม่ใช้ออสโมซิสสำหรับสิ่งนั้น มันไม่ได้มีการจัดการรูปหลายเหลี่ยมตามที่ osm2pgsql ทำ ออสโมซิสจัดเก็บข้อมูลในลักษณะเดียวกับที่ผู้ติดต่อกับพวกเขา (โหนดวิธีและความสัมพันธ์) มันไม่ได้เป็นรูปแบบฐานข้อมูลที่เหมาะสมสำหรับการแสดงผล

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