Harita Yönlendirme, a la Google Maps?

oy
19

Hep Harita Yönlendirme ilgisini oldum ama hiç iyi tanıtımı yer buldum çıkmadı (hatta gelişmiş!) Üzerinde öğreticiler seviye. Herkes herhangi işaretçiler var mı, ipuçları, vs?

Güncelleme: Ben öncelikle bir harita sistemi nasıl uygulandığını dikkate olarak işaretçiler arayan (veri yapıları, algoritmalar, vs) var.

Oluştur 05/08/2008 saat 21:24
kaynak kullanıcı
Diğer dillerde...                            


9 cevaplar

oy
14

Bir göz atın açık sokak haritası projesi bu tür şeylerin sadece kullanıcı sağlanan ve lisanslı verileri girip birer kullanarak gerçekten özgür yazılım projesinde ele ediliyor görmek ilginizi çekebilecek şeyler içeren wiki .

Birkaç yıl oldukça kolay olacak ve ben hala güzel bir demet değildir neden hiç bir neden görmüyorum bu yüzden vardı bir sürü soru cevap nerede adamlar dahil geri.

Cevap 05/08/2008 saat 21:27
kaynak kullanıcı

oy
4

A * aslında üretim haritalama algoritmaları yakın davranıyor. Bu Dijikstra orijinal algoritmaya kıyasla biraz daha az keşif gerektirir.

Cevap 25/09/2008 saat 00:19
kaynak kullanıcı

oy
4

Barry Brumitt, Google haritalar rota bulma özelliği mühendislerden biri, ilgisini çekebilecek konu üzerine bir yazı yazdı:

Daha iyi yol bulma giden yol 11.06.2007 03:47:00 PM

Cevap 17/09/2008 saat 09:44
kaynak kullanıcı

oy
4

Harita Yönlendirme ederek, bir sokak ağı boyunca kısa yolu bulmak demek?

Dijkstra en kısa yol algoritması en bilinmektedir. Vikipedi kötü bir girişi içerir: http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

Bir Java uygulaması eylem görebileceği bir yere var burada: http://www.dgp.toronto.edu/people/JamesStewart/270/9798s/Laffra/DijkstraApplet.html ve Google'ın sadece herhangi yaklaşık kaynak kodu götürecek dil.

Sürüş yolları üretmek için herhangi bir gerçek uygulama vb kateden linkleri ve düğümleri-Yol ağı hiyerarşisi, ortalama hız, kavşak önceliği, trafik sinyal bağlama, yasaklı dönüşler ile maliyetler ilişkilendirmek açıklar sokak ağ üzerindeki verilerin biraz içerecektir

Cevap 15/08/2008 saat 05:31
kaynak kullanıcı

oy
2

Bir kavram açıdan, bir havuza taş bırakarak ve dalgaların izlerken düşünün. yolları gölet ve taş başlangıç ​​pozisyonunu temsil edecek.

Tabii algoritma mesafesi n arttıkça n ^ 2 yollarının belirli oranda aramak zorunda kalacaktı. Sen başlama pozisyonu almak ve bu noktadan mevcut tüm yolları kontrol ederim. Sonra yinelemeli o yollara sonunda ve benzeri noktaları için arayın.

Bunu zaten kapalı olup olmadığını bir noktada yolları yeniden kontrol etmiyor tarafından ve çok uzun sürüyor yolları üzerinde vererek, bir yolda değil çift sırt tarafından, performansı artırabilir.

Alternatif bir yol karıncalar bir başlangıç ​​noktasından rastgele tarama ve belirli bir yolu karşıya geçmek daha karıncalar kurar bir koku izi, ayrılmak karınca feromon yaklaşımı, kullanmaktır. Eğer başlangıç ​​noktası ve bitiş noktaları hem (yeterli) karıncalar gönderirseniz o zaman sonunda, en güçlü kokusu ile yol, en kısa olacaktır. Bu kısa yol karıncalar tek tip bir tempoda yürümek göz önüne alındığında, belirli bir zaman diliminde daha fazla kez ziyaret edilmiş olacaktır çünkü.

DÜZENLEME @ Spikie

gölet algoritmasını nasıl uygulanacağı başka bir açıklaması olarak - vurgulanır gerekli potansiyel veri yapılarını:

Bir ağ gibi harita saklamak gerekir. Bu sadece bir dizi nodesve edgesaralarında. Bir dizi nodesbir teşkil route. Bir kenar iki düğüm (muhtemelen aynı düğüm her ikisi) katılır ve sahip olan bir ilişkili costgibi distanceya da timekenar çapraz. Bir kenar ya da iki çift yönlü ya da tek yönlü olabilir. Muhtemelen en basit sadece tek yönlü olanlar ve düğümler arasındaki iki yön olarak (örneğin, bir A ile B arasındaki kenar ve A B için farklı bir) iki katına.

Örnek olarak yukarıya doğru bakacak eşkenar üçgen içinde düzenlenmiş üç tren istasyonları düşünün. Hem de üç istasyon aralarında her yarım vardır. Kenarlar hep birlikte komşu istasyonları katılmak, nihai diyagram büyük üçgen içinde oturan ters bir üçgen olacaktır.

sol alt başlanarak Etiket düğümler A, B, C, D, E, F (üst F) olarak, yukarı soldan sağa ve gidiyor.

kenarları her iki yönde hareket ettirilebilir varsayalım. Her kenar 1 km maliyeti vardır.

Tamam, bu yüzden alttan rota isteyen bir üst istasyona F. örneğin ABCEBDEF kendilerine ikileyeceğiz olanlar da dahil olmak üzere birçok olası yolları vardır bıraktı.

Biz rutin bir söz var NextNodebir kabul, nodeve a costve seyahat edebilirsiniz her düğüm için kendisini çağırır.

Bu rutin çalışmasına izin Açıkçası eğer uzunluğunda potansiyel olarak sonsuz olanlar (örn ABABABAB vs) dahil tüm yolları sonunda keşfedeceksiniz. Biz karşı kontrol ederek bunun olmasını durdurmak cost. Daha önce ziyaret edilmemiş bir düğüm ziyaret ettiğinizde, biz maliyet ve biz bu düğümden karşı gelen düğüm hem koydu. Biz mevcut maliyet karşı kontrol edip ucuza iseniz o zaman düğüm güncelleyip (recursing) devam önce bir düğüm ziyaret edilmişse. Biz daha pahalı iseniz, o zaman düğüm atlayın. Tüm düğümler atlanır edersek rutin çıkın.

Bizim hedef düğümü vurursanız o zaman da rutin çıkın.

Bu şekilde tüm canlı yolları kontrol fakat en önemlisi, sadece maliyeti en az olan. sürecin sonunda her düğüm hedef düğüm dahil olmak üzere bu düğüme almak için en düşük maliyeti olacaktır.

Bizim hedef düğümden geriye doğru rotayı almak için. Biz maliyet ile birlikte gelen düğümü depolanan bu yana, sadece rotayı kadar bina geriye hop. Bizim örneğimizde gibi bir şey ile sona ereceğini:

Düğüm A - (Toplam) Maliyet 0 - Düğüm Yok kaynaktan
Düğüm B - Maliyet 1 - Düğüm A dan
düğüm C - Maliyet 2 - Düğüm B kaynaktan
düğüm D - Maliyet 1 - Düğüm A dan
düğüm E - Maliyet 2 - Düğüm D / Maliyet kaynaktan 2 - Düğüm B (eşit bir maliyet olduğu gibi bu bir istisnadır) kaynaktan
maliyeti 2 - - Düğüm D kaynaktan Düğüm F

Yani en kısa rota ADF olduğunu.

Cevap 26/09/2008 saat 15:05
kaynak kullanıcı

oy
2

Ben yönlendirme üzerinde iyi bir öğretici bulmak için henüz ettik ama okumak için bir sürü kod vardır:

OpenStreetMap verileri kullanmak GPL yönlendirme uygulamaları bulunmaktadır, örneğin Gosmore Windows (+ mobil) ve Linux üzerinde çalışır. Aynı verileri kullanarak ilginç [uygulamalar vardır, ancak bazı serin kullanır gosmore sahiptir web siteleri ile örneğin arayüz .

yönlendirme ile en büyük sorun kötü bir veridir ve iyi miktarda veri elde asla. Yani veri daha iyi kontrol edebilir bu yüzden çok yerel testinizi tutmak denemek isterseniz.

Cevap 17/09/2008 saat 09:34
kaynak kullanıcı

oy
2

Yerine Onun öğrenmek için iyi (Gmaps, Ymaps API gibi) her harita hizmet sağlayıcısına API'leri öğrenme Mapstraction

"Mapstraction çeşitli javascript haritalama API'ler için ortak bir API sağlayan bir kütüphanedir"

Sana URL'ye gidin ve genel API öğrenmek öneririz. Nasıl Tos iyi miktarı çok vardır.

Cevap 06/08/2008 saat 14:35
kaynak kullanıcı

oy
1

bu alanda çalışan tecrübelerimden hareketle, A * çok iyi iş yapar. O (yukarıda belirtildiği gibi) Dijkstra'nın algoritması daha hızlıdır, ancak yine de uygulanması ve anlamak için normalde yetkili programcı için yeterli basittir.

Rota ağı Bina zor kısım olduğunu, ancak bu kadar basit bir dizi adım ayrılabilir: tüm yollar olsun; düzene puan sıralaması; kesişme (düğümleri), farklı yollarda aynı nokta gruplarını yapmak; düğümleri (veya sadece bir yönde, bir tek yönlü yol için) bağlamak her iki yönde de yaylar ekleyin.

A * algoritması kendisi olduğunu iyi Wikipedia'da belgelenmiş . Optimize etmek anahtar bir yer yüksek performanslı öncelik sırası gereken açık listesinden, en iyi düğümün seçimidir. Eğer C kullanıyorsanız, STL priority_queue adaptörünü kullanabilirsiniz ++.

iyilik hız, mesafe ya da diğer kriterler ağının farklı bölgelerinde (örneğin, yaya, araba, toplu taşıma, vb) üzerinde yönlendirmek için algoritma Özelleştirme oldukça kolaydır. Sen bağları güçlendirmesini rota segmentleri hangi kontrol etmek için filtreler yazarak bunu ve hangi kilo her birine atanır.

Cevap 15/07/2012 saat 22:13
kaynak kullanıcı

oy
1

Başka bir düşünce, her kastetmek maliyeti ile ilgili olarak aklıma ancak hesaplamak için gerekli zaman ve işlem gücü artar.

Örnek: A noktasından B noktasına gitmek için (yaşadığım) Ben alabilir 3 yolu GoogleMaps göre vardır. Giyim eşyası birimleri bu 3 yollarının her sunmaktadır Quickestyol hesaplama. Defalarca bu yolların her biri kateden ve ortalama sonra (tabii ki günün saatine bağlı olarak hatalar olacaktır, kafein vb miktarı), ben algoritmalar doğruluk yüksek seviyede yol dikkate virajlarda sayısını sürebilir hissetmek , örneğin 1 mil düz yol içinde keskin virajlarda ile 1 mil yol daha hızlı olacaktır . Değil pratik bir öneri ama kesinlikle bir benim günlük gidip sonuç kümesini iyileştirmek için kullanırız.

Cevap 18/09/2011 saat 22:34
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more