วิธีการเติมกราฟที่ไม่ได้บอกทิศทางจาก PostGIS


9

คำถามนี้เกี่ยวข้องกับแหล่งข้อมูลที่ฉันอาจยังไม่ได้ระบุถึงแม้ว่าฉันจะค้นหาเว็บมาระยะหนึ่งแล้ว

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

สำหรับเลเยอร์การนำเสนอฉันคิดว่าการใช้สคริปต์ Python กับ MapServer แต่ตอนนี้ฉันให้ความคิดเพิ่มเติมเกี่ยวกับวิธีการสร้างกราฟจาก (shapefiles conveted เป็น a) postGIS db ที่สร้างจาก OpenEV เพื่อเพิ่มและลบขอบหรือ น้ำหนักหรือข้อมูลเกี่ยวกับคะแนนในภายหลัง

สำหรับ Python มีโมดูลที่ชื่อว่า networkX ซึ่งเกี่ยวข้องกับกราฟและถึงแม้ว่าปัญหานี้จะเกิดขึ้นใน stackexchange ที่นี่กราฟที่ฉันพยายามสร้างไม่ใช่ digraph แต่เป็นทิศทางเดียว

อัปเดต: 5 วันที่ผ่านมาเครือข่ายสาธารณูปโภคของ Ben Reilly ได้ถูกเพิ่มเข้าในโครงการ networkX แล้ว Utilitynetwork สร้างกราฟโดยตรงจากคุณสมบัติ shapefile
คำถามยังคงเปิดอยู่สำหรับวิธีการคล้ายกันในการอ่านคุณสมบัติจากฐานข้อมูล postGIS


คุณไม่ต้องการใช้ pgRouting?
underdark

ฉันจะใช้ pgRouting แต่อัลกอริทึมที่ฉันพยายามจะใช้นั้นเป็นดาราสองทิศทางไม่ใช่ตัวเลือกที่ไม่ได้วางจำหน่าย
user39901230

คำตอบ:


5

NetworkX มีวิธีการที่จะแปลงกราฟกำกับเป็นคนที่ไม่มีทิศทาง

นอกจากนี้รหัสเพื่ออ่าน shapefile (หรือไดเรกทอรีของ shapefiles) ไม่จำเป็นต้องแสดงกราฟโดยตรงนั่นเป็นสิ่งที่ฉันต้องการในเวลานั้น ฉันไม่ได้ลอง แต่เปลี่ยนบรรทัดเดียว:

net = nx.DiGraph()

... อาจทำเคล็ดลับ

NetworkX ดูเหมือนว่าจะรองรับการอ่านรูปร่างไฟล์ออกจากกล่อง (ด้วย OGR) ใน 1.4 ( คุณสมบัติ )


ขอโทษสำหรับความสับสน. สิ่งที่ฉันพยายามทำจริงๆคือการแปลงรูปร่างเป็นไฟล์ postGIS โดยใช้ shp2pgsql จากนั้นจากฐานข้อมูล postGIS เพื่อนำเข้าในกราฟ networkX
user39901230

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

เนื่องจาก networkx ได้รวมโมดูลแล้ว แต่ยังไม่ได้เปิดตัว v1.4 มันจะเป็นไปได้ไหมที่จะให้ตัวอย่างบางส่วนของการใช้เครือข่ายยูทิลิตี้ จนถึงตอนนี้ฉันได้ผ่านการทดสอบโหลดเน็ตเวิร์กและจากตัวอย่างของคุณที่นี่: gis.stackexchange.com/questions/210/alternatives-to-pgrouting/
39901230

ยังมีงานอีกเล็กน้อยที่ต้องทำในเรื่องนี้ซึ่งเป็นสาเหตุที่ฉันไม่ได้วางมันลงบน pypi ฉันได้เผยแพร่วิกิต่อสาธารณะแล้วควรมีตัวอย่างการทำงานที่ดีที่สุด: bitbucket.org/gallipoli/utilitynetwork/wiki/Home
bwreilly

เนื่องจากฉันวางแผนที่จะรวมสิ่งนี้ไว้ในโครงการระดับปริญญาตรีปีสุดท้ายของฉันฉันจะมีส่วนร่วมด้วยได้หรือไม่
39901230


2

ไม่แน่ใจว่าคุณสนใจใช้เฟรมเวิร์กอื่น ๆ อย่างไรหรือถ้าคุณได้แก้ไขปัญหานี้แล้ว แต่โครงการ Geodjango ได้เพิ่มฟีเจอร์ ORM ที่ดีให้กับตัวแบบข้อมูล GIS สำหรับฐานข้อมูลที่เปิดใช้งาน GIS รวมถึง Postgres ที่ติดตั้ง PostGIS .

ลิงก์ Geodjango อยู่ที่นี่: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview

โปรดทราบว่า Django เป็นเฟรมเวิร์กเว็บสำหรับไพ ธ อน Geodjango มาเพื่อแก้ไขและแสดงข้อมูล GIS สำหรับการพัฒนาเว็บแบ็กเอนด์ แต่มันยังให้ชุดของคลาสที่ใช้งานง่ายและทรงพลังมากกว่าการผูก Python OGR โดยตรงมากกว่า 'แปลงโดยตรงจากไวยากรณ์ C' โดยตรงเช่นคุณสามารถสร้างคลาส django.contrib.gis.geos.linestring.LineString โดยตรงแทนที่จะสร้างคลาส ogr.Geometry ด้วยค่าคงที่ wkbLineString ใน Constructor)

ในบทแนะนำ geodjango ที่อยู่: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/

ขั้นตอนที่จำเป็นในการกำหนดค่าการอ่าน / เขียนจากฐานข้อมูล Postgres ของคุณนั้นง่ายเหมือนการใช้รุ่น django python อื่น ๆ อาการปวดศีรษะกำลังตั้งค่าฐานข้อมูลเชิงพื้นที่ของคุณ ดังนั้นหากต้องการโหลดข้อมูลลงในฐานข้อมูล postgres ให้ดูที่ลิงค์ anchor #layermapping ในบทช่วยสอนด้านบน เป็นการแมปฟิลด์ระหว่างข้อมูลที่มีอยู่ในไฟล์รูปร่างกับคอลัมน์ฐานข้อมูลที่ตั้งค่าไว้สำหรับตัวแบบข้อมูลของคุณ

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

โปรดทราบว่าเมื่อคุณมีฐานข้อมูลที่เปิดใช้งาน GIS (เช่นการผูก PostGIS สำหรับ pgsql) คุณสามารถทำ 'ประกอบด้วย' 'ภายใน' โดยตรงบนฐานข้อมูลเรขาคณิต (Lines / Polygons) ข้อมูลโดยใช้ฟังก์ชันฐานข้อมูลที่เก็บไว้ (เช่นST_Contains(...): ดูตัวอย่าง SQL สำหรับ PostGIS / pgsql ที่นี่: http://postgis.refractions.net/docs/ch04.html#id2639062 ... และส่วนที่ดีที่สุดเกี่ยวกับ Geodjango คือว่ามันเหมาะที่จะทำการค้นหาเชิงพื้นที่เหล่านี้สำหรับคุณ!

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