PgRouting - Maksimum maliyetlere ulaşıldığında bağlantılar nasıl kesilir?


13

Bir yol ağını temsil eden bir çoklu çizgi şekil dosyası ve noktaları içeren ikinci bir şekil dosyası var. Bu noktalardan yayılan alt ağları veya hizmet alanlarını tanımlamak için PostGIS (muhtemelen PgRouting) kullanmak istiyorum.

Esasen, "X noktasından başlayarak, yol ağını takip eden toplam 1 km seyahat bütçesi göz önüne alındığında, herhangi bir yönde ne kadar yürüyebilirim?" Sorusunu sormayı umuyorum. Sonuç, 1 km'lik bir seyahat bütçesi göz önüne alındığında, toplam seyahat olasılığını temsil eden bir dizi kırpılmış polinindir.

Başvuru için, bu GRASS analizi tam olarak yapmak istediğim gibi görünüyor (bunu PostGIS'de yapmak istemiyorum hariç): http://www.gdf-hannover.de/lit_html/grass60_v1.2_en/node57.html#sec: optalloc

Bu sonraki örnek neredeyse yapmak istediğim gibi görünüyor, ancak "X mesafeli bir seyahat bütçesi verildiğinde hangi düğümlere seyahat edebilirim?" http://underdark.wordpress.com/2011/02/12/drive-time-isochrones/

İkincisi aradığım cevap tam olarak değil, polinleri seyahat mesafeme kırpmak istiyorum - Bir düğüme kadar gidip gelmediğimi umursamıyorum.


Bana gelen bir seçenek, bir şekilde çoklu satırlarımı birçok noktaya bölmektir. Bu beni doğru cevaba yaklaştırıyor, ama oldukça çirkin görünüyor ve yine de beni oraya götüremiyor.
Peter

Yanıtlar:


2

Ben bir düşünce 1) driving_distance rutin çalıştırmak olduğunu ve 2) pg_outing rutin noktalara dayalı verilen maliyet mesafelerinde en küçük poligon (lar) üretmek için pgRouting (alphashape işlevini çağırır) gelen "points_as_polygon" rutin kullanmak olduğunu düşündüm İadeler. Daha sonra çokgenler içinde size genel bir seyahat fikri verecek tüm sokakları seçebilirsiniz.

PgRouting kullanıcıları listesindeki tartışmayı takip etmediyseniz , son zamanlarda daha fazla seçenek tartışıyorlar (Mayıs ve Haziran 2011 konuları).


1
İlginç kullanıcı listesi tartışmaları. Driving_distance işlevi çok kötü.
underdark

1

Bu gerçekten bir grafik problemi olduğundan, ihtiyacınız olan bağlantı / topoloji + maliyet bilgisidir. Pg_routing için, en kısa yol algoritmalarına gönderdiğiniz tablo budur. Bu makalede nasıl yapılacağı hakkında bilgiler var (varsa zaten var). Maalesef, bunu yapan pg_routing'de tam işlevinizi veremiyorum, ancak bir tane yazmak yapılabilir. Ancak, size en kısa_yolunu tekrar tekrar çağırırsanız, aşağıdaki algoritmayı tekrar tekrar yaptığınızı ve sonucu çöpe attığınızı söyleyebilirim - hiç de verimli değil.

Ardından, çözümünüz "yürüdüğünüz bir listeye" eklenir ve bütçeniz (yani mesafe) fazla oluncaya kadar bir maliyet hesaplanırken her adımda yürür. Bütçe kabul edilebilirse (yani bütçe aşılmamışsa), geometriyi "kabul edilebilir liste geometri torbasına" da ekleyebilirsiniz. Her kenarı tam olarak bir kez işlemeniz gerekir. En son kenar için (bütçelerinizin aşırıya çekildiği yerde), uzunluğu almanız ve seyahat etmek istediğiniz tam mesafeyi enterpolasyon yapmanız ve ardından sonucu "kabul edilebilir listeye" eklemeniz gerekir. Sonuç, o geometri torbasının birleşimidir .


1
Son adımda bir incelik vardır: bazı kenarlara uç noktalarından herhangi birinden ulaşılabilir. Bu, her iki ucun bölümlerinin veya hatta tüm kenarın dahil edilmesine neden olabilir, ancak tüm kenarların uç noktalardan birinden geçirilmesi bütçe sınırını aşacaktır. Örneğin, a noktasından birim uzunluk kenarları {(a, b), (a, c), (b, c)} ve 1.6 bütçesi olan yönlendirilmemiş bir grafik boyunca seyahat etmeyi düşünün . B veya c'ye 0,6 harcayarak 1 maliyetle ulaşabilirsiniz . Bu kenar (b, c) boyunca her noktayı erişilebilir kılar.
whuber

Haklısın :) +1
Ragi Yaser Burhum

1

"X noktasından başlayarak, karayolu ağını takip ederek toplam 1 km'lik bir seyahat bütçesi göz önüne alındığında, herhangi bir yönde ne kadar yürüyebilirim?"

Sadece küçük bir bölgeyi (maks. 1 km yarıçap) düşünmeniz gerektiğinden, muhtemelen bağlantıları birden fazla küçük parçaya bölmek (ulaşmak istediğiniz doğruluğa bağlı olarak) ve gerekli düğümleri oluşturmaktan kurtulabilirsiniz. Ortaya çıkan "yüksek çözünürlüklü" ağlar yine de yönetilebilir olmalıdır.

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.