Harita verilerini depolamak için ideal veri yapısı?


12

Bunu bir röportaj testinde istedim. Testte iyiydim ama bu soruya cevap verecek kadar bilgim yoktu. Verileri hızlı bir şekilde sorgulamak için hangi veri yapılarını kullanabileceğimi merak ediyorum.

Temel olarak fikir, bir tür veri yapısında depolanan yol bölümlerinin (noktalardan oluşan çizgiler) olmasıdır. Hangi yol bölümlerinin (veya noktaların) bir noktadan (yarıçap) belirli bir mesafede olduğunu sorgulamak hızlı olmalıdır.


Gerçekten daha fazla bilgi edinmek için cgal.org adresini okudum , sonra şu projelere baktım : cgal.org/projects.html#gis , istediğini andıranı bul ve sonra API kullanımını inceleyip sonunda API'nın yapısı.
İş

Yanıtlar:


16

Coğrafi verileri depolamanın tipik yolu, R-ağacı (veya R + ağacı, R * ağacı, vb. Gibi bir varyant) gibi coğrafi bir veri yapısıdır. Coğrafi veri türleri normal olarak CBS özellikli RDBMS. (Hem Microsoft'un SQL Server 2008'in hem de PostGIS'in coğrafi türler için R ağaçlarını kullandığını biliyorum.) Tanımladığınız tüm temel gereksinimleri karşılarlar ve kesişim, konum, mesafe ve diğer sorgu türlerini önemsiz bir şekilde desteklerler.

Veri türüne bağlı olarak, ortak kullanımda kD ağaçları, dörtlü ağaçlar, oktrees, sınırlayıcı hacim hiyerarşileri (eksene hizalanmış sınırlayıcı kutu ağaçları dahil) vb. Bu aslında 3D oyunlarda çok daha yaygındır, çünkü bir nesnenin boyutu ve şekli kavşak sorgularıyla daha ilgilidir. CBS için R ağaçlarından daha az kullanılırlar.


0

Harita verileri üzerindeki farklı işlemler, en iyi sonuçlar için farklı depolama biçimleri gerektirir. Örneğin, aşağıdaki üç görevi göz önünde bulundurun:

  1. Bir nokta verildiğinde, o noktaya en yakın yolu bulun
  2. Belirli bir büyüklükte bir coğrafi alan göz önüne alındığında, o alandaki tüm yolları bulun.
  3. İki yol verildiğinde, aralarındaki en kısa yolu bulun.

Gereksinimlerdeki farklılıklar, haritadaki "canlı" değişiklikleri barındırması gerekmediği sürece, verilerin denenmekten ziyade her biri yukarıdaki görevlerden biri için optimize edilmiş olan üç ayrı kopyasının depolanmasında daha iyi olacağı konusunda yeterince büyüktür. her üç görevi de iyi bir şekilde yerine getirebilecek bir format oluşturmak.

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.