PostGIS'ten yönlendirilmemiş bir grafik nasıl doldurulur?


9

Bu soru, web'de bir süredir arama yapmama rağmen henüz tanımlamamış olabileceğim kaynaklarla daha ilgili.

Şu anda çalıştığım projede, ofis odaları, koridorlar, merdivenler, asansörler ve binalar arasındaki yolları temsil eden bir grafik üzerinde en kısa yol algoritmasını çalıştırmam gerekiyor.

Sunum katmanı için MapServer ile Python komut dosyası kullanmayı düşündüm, ama şimdi kenarları eklemek ve kaldırmak kolay olması için OpenEV'den oluşturulan postGIS db'den grafiğin nasıl oluşturulacağı hakkında daha fazla fikir veriyorum. ağırlık veya daha sonra puan hakkında bilgi.

Python için, networkX adında grafikler ile ilgilenen bir modül var ve bu sorun burada stackexchange'te gündeme getirilmiş olsa da , oluşturmaya çalıştığım grafik bir digraf değil, yönelimsiz.

Güncelleme: 5 gün önce Ben Reilly'nin şebeke ağı networkX projesine eklendi. Hizmet ağı, şekil dosyası özelliklerinden yönlendirilmiş bir grafik oluşturur.
Sorular, postGIS veritabanındaki benzer okuma özellikleri yaklaşımına açıktır.


PgRouting'i kullanmak istemiyor musunuz?
underdark

Ben pgRouting kullanacağım, ancak uygulamaya çalıştığım algoritma çift yönlü bir yıldız ve hazır bir seçenek değil.
user39901230

Yanıtlar:


5

NetworkX, yönlendirilmiş grafikleri yönlendirilmemiş grafiklere dönüştürme yöntemine sahiptir .

Ayrıca, bir şekil dosyasını (veya şekil dosyalarının dizinini) okumak için kodun gerçekten yönlendirilmiş bir grafik çıktısı alması gerekmez, o zaman ihtiyacım olan şey budur. Ben denedim, ama tek satır yerine:

net = nx.DiGraph()

... sadece hile yapabilir.

NetworkX, 1.4'te ( özellik ) kutudan (OGR ile) şekil dosyalarının okunmasını destekleyecek gibi görünüyor .


karışıklık için özür dilerim. Aslında yapmaya çalıştığım shp2pgsql kullanarak ve sonra postGIS veritabanından shapeGIS veritabanına shapefiles dönüştürmek için ağX grafik almaktır.
user39901230

teşekkürler Ben. Sadece 5 gün önce bileti kapattıklarını ve kodunuzun networkX projesine eklendiğini fark ettim. PostGIS veritabanındaki özelliklerle aynı şeyi yapmanın mümkün olup olmadığını görmek ilginç olurdu, ancak Noel tatili boyunca buna bir göz atacağım.
user39901230

networkx modülü içerdiğinden ancak henüz v1.4'ü yayınlamadığından, yardımcı ağ kullanımı ile ilgili bazı örnekler vermek mümkün olacaktır. Şimdiye kadar testnetworkload ve burada bulunan örnekleri aracılığıyla yağmaladım
user39901230

Bunun için hala biraz iş var, bu yüzden pypi'ye koymadım. Bence en iyisi çalışma örneklerini içermelidir, şimdi wiki kamuoyuna yaptık: bitbucket.org/gallipoli/utilitynetwork/wiki/Home
bwreilly

bunu son lisans yılı projeme dahil etmeyi planladığım için, katkıda bulunmam da mümkün mü?
user39901230


2

Diğer çerçeveleri kullanmakla ne kadar ilgilendiğinizden emin değilseniz veya bunu zaten çözdüyseniz, ancak Geodjango projesi, PostGIS bağları yüklü postgres de dahil olmak üzere çeşitli CBS özellikli veritabanları için GIS veri modellerine gerçek hoş ORM özellikleri ekliyor .

Geodjango bağlantısı burada: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview

Django'nun python için bir web çerçevesi olduğunu, geodjango'nun arka uç web geliştirmesi için GIS verilerini düzenlemeye ve görüntülemeye geldiğini, ancak doğrudan OGR python bağlarından (çok daha 'pythonic' yerine çok daha sezgisel ve güçlü bir sınıf kümesi verdiğini unutmayın. doğrudan 'C sözdiziminden dönüştürülür', örneğin, yapıcıda wkbLineString sabitiyle ogr.Geometry sınıfı oluşturmak yerine doğrudan bir django.contrib.gis.geos.linestring.LineString sınıfı oluşturabilirsiniz).

Bulunan geodjango eğitiminde: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/

Postgres veritabanınızdan okuma / yazma yapılandırmak için gereken adımlar diğer django python modellerini kullanmak kadar basittir, baş ağrısı jeo-uzamsal veritabanınızı kurmaktadır. Bu nedenle, postgres veritabanına veri yüklemek için yukarıdaki öğreticideki çapa #layermapping bağlantısına bakın; şekil dosyasındaki kullanılabilir veriler ile veri modeliniz için ayarlanan veritabanı sütunları arasındaki bir alan eşlemesidir.

En azından, öğreticiden geçmek ve PostGIS bağlarını kurmak ve bu CBS aracının aradığınız şey olup olmadığını görmek için 2-3 saat sürecek.

Ayrıca, CBS özellikli bir veritabanınız olduğunda (örn. Pgsql için PostGIS bağlamaları), veritabanında depolanan işlevleri kullanarak doğrudan veritabanı geometrisi (Çizgiler / Çokgenler) verileri üzerinde 'içerme' yapabileceğinizi unutmayın (örneğin ST_Contains(...): örnek SQL'e bakın) PostGIS / pgsql burası için: http://postgis.refractions.net/docs/ch04.html#id2639062 ... ve Geodjango hakkında en iyi parçası, yani sizin için bu mekânsal aramalarını yapmak için optimize edilmiştir! .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.