Bagaimana cara mengisi grafik yang tidak terarah dari PostGIS?

9

Pertanyaan ini lebih terkait dengan sumber daya yang mungkin belum saya identifikasi, meskipun saya sudah mencari web untuk sementara waktu.

Dalam proyek saya sedang bekerja saat ini saya perlu menjalankan algoritma jalur terpendek pada grafik yang mewakili ruang kantor, koridor, tangga, lift dan rute antara bangunan.

Untuk lapisan presentasi saya berpikir untuk menggunakan skrip Python dengan MapServer, tapi sekarang saya lebih memikirkan bagaimana membangun grafik dari (shapefile conveted menjadi a) postGIS db yang dihasilkan dari OpenEV sehingga mudah untuk menambah dan menghapus tepi atau bobot atau informasi tentang poin setelahnya.

Untuk Python ada modul yang disebut networkX yang berhubungan dengan grafik, dan meskipun masalah ini telah dibesarkan di stackexchange di sini , grafik yang saya coba buat bukanlah digraf tetapi tidak langsung.

Pembaruan: 5 hari yang lalu Utilitas Ben Reilly telah ditambahkan ke proyek networkX. Utilitynetwork membuat grafik berarah dari fitur shapefile.
Pertanyaan-pertanyaan tetap terbuka untuk pendekatan yang serupa dari fitur membaca dari database postGIS.

pengguna39901230
sumber
Anda tidak ingin menggunakan pgRouting?
underdark
Saya akan menggunakan pgRouting, namun algoritma yang saya coba implementasikan adalah bidirectional a-star dan bukan opsi off-the-shelf.
user39901230

Jawaban:

5

NetworkX memiliki metode untuk mengubah grafik yang diarahkan menjadi yang tidak terarah .

Selain itu, kode untuk membaca shapefile (atau direktori shapefile) tidak benar-benar perlu menampilkan grafik yang diarahkan, hanya itu yang saya butuhkan pada saat itu. Saya belum mencoba, tetapi mengganti satu baris:

net = nx.DiGraph()

... mungkin melakukan triknya.

NetworkX sepertinya akan mendukung pembacaan shapefile di luar kotak (dengan OGR) di 1.4 ( fitur ).

tentu saja
sumber
maaf bila membingungkan. Apa yang sebenarnya saya coba lakukan adalah mengubah shapefile menjadi databse postGIS menggunakan shp2pgsql dan kemudian dari database postGIS untuk mengimpornya dalam grafik networkX.
user39901230
terimakasih Ben. Baru diketahui bahwa 5 hari yang lalu mereka menutup tiket dan kode Anda telah ditambahkan ke proyek networkX. Sangat menarik untuk melihat apakah mungkin untuk melakukan hal yang sama dengan fitur-fitur dari database postGIS, tetapi saya akan melihatnya selama liburan Natal.
user39901230
karena networkx telah menyertakan modul tetapi belum merilis v1.4 apakah mungkin untuk memberikan beberapa sampel menggunakan utilitynetwork. Sejauh ini saya telah membaca sekilas testnetworkload dan melalui sampel Anda yang ditemukan di sini: gis.stackexchange.com/questions/210/alternatives-to-pgrouting/…
user39901230
Masih ada sedikit pekerjaan yang harus dilakukan pada ini, itulah sebabnya saya belum menaruhnya di pypi. Saya sudah membuat wiki publik sekarang, harus berisi sampel kerja terbaik: bitbucket.org/gallipoli/utilitynetwork/wiki/Home
bwreilly
karena saya berencana untuk memasukkan ini dalam proyek tahun terakhir sarjana saya, apakah mungkin bagi saya untuk juga berkontribusi?
user39901230
2

Tidak yakin seberapa tertarik Anda menggunakan kerangka kerja lain, atau jika Anda sudah menyelesaikannya, tetapi proyek Geodjango menambahkan fitur ORM yang sangat bagus untuk model data GIS, untuk berbagai basis data yang diaktifkan GIS, termasuk postgres dengan binding PostGIS yang diinstal .

Tautan Geodjango ada di sini: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview

Perhatikan bahwa Django adalah kerangka kerja web untuk python, geodjango muncul untuk mengedit dan menampilkan data GIS untuk pengembangan web backend, tetapi juga memberikan serangkaian kelas yang jauh lebih intuitif dan kuat daripada binding python OGR langsung (jauh lebih 'pythonic' daripada langsung 'dikonversi dari sintaks C', misalnya Anda dapat membuat kelas django.contrib.gis.geos.linestring.LineString secara langsung daripada membuat ogr. Kelas geometri dengan konstanta wkbLineString di konstruktor).

Dalam tutorial geodjango berada: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/

Langkah-langkah yang diperlukan untuk mengonfigurasi read / write dari database Postgres Anda semudah menggunakan model python django lainnya, sakit kepala sedang menyiapkan database geospasial Anda. Jadi, untuk memuat data ke dalam database postgres, lihat tautan anchor #layermapping dalam tutorial di atas; ini adalah pemetaan bidang antara data yang tersedia di file bentuk ke kolom database yang disiapkan untuk model data Anda.

Paling tidak, saya akan membutuhkan 2-3 jam untuk menyelesaikan tutorial dan mengatur binding PostGIS dan melihat apakah alat GIS ini adalah yang Anda cari.

Perhatikan juga, bahwa ketika Anda memiliki basis data yang diaktifkan GIS (mis. Binding PostGIS untuk pgsql), Anda dapat melakukan 'berisi' 'di dalam' langsung pada data geometri basis data (Garis / Poligon) menggunakan fungsi tersimpan basis data (mis ST_Contains(...): lihat contoh SQL SQL untuk PostGIS / pgsql sini: http://postgis.refractions.net/docs/ch04.html#id2639062 ... dan bagian terbaik tentang Geodjango, adalah bahwa hal itu dioptimalkan untuk melakukan ini pencarian spasial untuk Anda! .

tmarthal
sumber