Çevrimdışı kaygan harita döşemeleri için veritabanı


25

Şu anda bir uygulama bildirimi olan ve birden fazla platformda düzgün çalışan çevrimdışı bir HTML5 harita uygulamasına (Leaflet ve KendoUI üzerine inşa edilmiş) özel bir uygulama var. Ancak, gerçek harita döşemelerini bu şekilde depolamak için bildirimi kullanmakta tereddütüm var (PNG dosyaları TMS stili Döşeme Önbelleği olarak saklanır).

Sorunlar:

  • Yaklaşık 1.000 PNG dosyasında birçok döşeme (10MB - 50MB) olabilir
  • İlk indirme işlemi gerçekten yavaş olabilir (ve kullanıcıya ilerleme göstermesi zor olabilir)
  • Uygulama Manifestleri işe ya da tüm çevrimdışı önbellekleme başarısız olmazsa çalışmazlar ([whatwg.org] [1] uyarınca)
  • Çevrimdışı kullanıcı ara sıra yeniden bağlanacak ve Döşemelerin yenilenmesi gerekecek, Bunlar küçük deltalardır ancak uygulama bildirim mekanizması, bildirim güncellemelerinde en kısa sürede tüm js, css ve PNG dosyalarını yeniden yükler

Alternatif fikir: web uygulamasını kaygan harita döşemelerinin deposundan ayrı tutun. Döşemeleri web uygulaması dostu bir veritabanında saklayın

Güncelleştirme:

[PouchDB yakın zamanda ikili bloblar için destek ekledi. İyi başlangıç ​​sonuçları alıyorum. Bkz .: /programming/16721312/using-pouchdb-as-an-offline-raster-map-cache ]

Soru: Kolektif bilgelik (ve deneyim) JavaScript dostu bir DB için aşağıdaki seçenekler hakkında ne diyor:

  1. SQLLite
    • JavaScript ile konuşmasına izin vermek için bunun için bir yerel uygulama sarmalayıcısı oluşturmanız gerekiyor gibi görünüyor
    • Örneğin, windows için yerel bir programa DLL ekleyin ve android / IOS için PhoneGap
  2. WebSQL
    • BULUNMADI
    • ancak ana web sunucusundan kolayca oluşturabildiğim ve dağıtabildiğim bir SQL Lite idi.
  3. IndexDB

    Gereksinimler:

    • İstemci Web DB'ye hızlı başlangıç ​​popülasyonu (indirme yoluyla)
    • Geçerli Leaflet TileLayer API'siyle uyumlu (yani, özel bir katman yazmayı tercih etmem ama gerekirse ...) (ör. MbTiles)
    • Platform: Windows Dizüstü Bilgisayarlar, ancak Android ve IOS tabletleri isteniyor (IndexDB piyasaya sürülünceye kadar bekleyebilirim, hemen desteğe gerek yok)
    • Yerli bir uygulama (EXE, IOS, Android) yazmayı tercih etmem ama en iyisi buysa ...
    • Sunucu Tarafı web haritaları üretimi (bu otomatik bir işlem olacaktır). Kullanıcı bir yer seçer, haritaları seçer ve dinamik olarak dönüştürülür ve kaygan bir döşeme önbelleğine dönüştürülür (bu çalışma zaten büyük ölçüde yapılır).
    • Hızlı toplu ilk indirme
    • Harita değişikliği deltası yenilenir (sabit stok numaralarına göre güncellenir ve tarih mantığını günceller)
    • Güncel broşür ve KendoUI web uygulaması üzerinde minimum etki

Güncelleştirme:

Anahtar arkaplan fikri: web uygulaması oldukça kararlıyken, kaygan harita döşemeleri konumunuz için anında üretiliyor ve ne tür bir sorun yapıyorsunuz (arka tarafta). Bu yüzden ilk 'big bang'i transfer etmenin iki yolu daha düşündüm ve ardından güncellemeler:

Sıkıştırılmış Dosya (muhtemelen iyi bir fikir değil - sunucu yükü eklediği için) istemci makinedeki genişleme de kullanıcı etkileşimi gerektiriyor, ancak kaygan döşemelerin yerel URL'leri kullanmasına izin veriyor

HTML5 Dosya API'si: Buna tam olarak bakmadım. Ancak, TMS formatında yerel bir dosya ağacı oluşturmak için birçok işlem yapıldığı görülüyor: http://www.html5rocks.com/en/tutorials/file/filesystem/ Test etmek ilginç olacak ne (örneğin web çalışmalarını kullanabilir miyim? bant genişliğini diske ve ağ boyunca büyütmek için). IndexDB, web çalışanı dostu olarak yaygın şekilde uygulanmamaktadır (senkronizasyon arayüzü: /programming/10698728/indexeddb-in-web-worker-on-firefox)

IndexDB'yi Leaflet ile kullanma hakkında bazı ek bilgiler buldum:

https://github.com/calvinmetcalf/leaflet.pouch (offline için indexdb ile couchdb'yi eşitler) Ayrıca indexdb, websql ve yerel mağaza için okuma / yazma hızları için bazı testler: http://jsperf.com/indexeddb -vs-localStorage / 15

Ve burada javascript'ten okuma / yazma dosyası API'sini nasıl kullanacağınız: (ve ayrıca depolama sınırlarını arttırmayı da istemek için) http://www.html5rocks.com/tr/tutorials/file/filesystem/


Teşekkürler, Tom MacWright (aka tmcw), bazı iyi geribildirim için. Örneği, ikili blobları almak için özel katmanlar oluşturduğumda gerçekten yardımcı olacak.

Dün IndexedDB ile bazı testler yaptım ve bazı polyfills ve kütüphaneleri kullanarak sorunlarımı çözeceğini düşünüyorum. Şimdi buna biraz ter eşitliği koymanın zamanı geldi ve ben de rapor edeceğim.


BTW: Çalışmamın sonuçlarını müşteri tarafında veritabanlarında görmek istiyorsanız, bakınız:

/programming/14113278/storing-image-data-for-offline-web-application-client-side-storage-database



Yinelenmek için herhangi bir özel sebep var mı? stackoverflow.com/questions/14058489/…
radek

underdark anlamadı? ;]
radek

Düzenlemeniz için teşekkür ederim Anita. Ben bir acemiyim ve bu notu kapatmak için doğru kuralları görmedim, ancak çözüm için seçtiklerime okuyucular için ipuçları bıraktım.
Dr.YSG

Yanıtlar:


7

PhoneGap ve MBTiles .

WebSQL ve IndexDB yeterli olmayacak. 'Windows Dizüstü Bilgisayarlar' mobil cihazlarla aynı kod olmayacak.


Ek Arka Plan: Müşteri yalnızca dizüstü bilgisayar desteği istedi. Bunu tabletlerime (IOS, Android) uzatabilir miyim görmek benim açımdan kişisel bir dilek. Benim düşünceme göre, PhoneGap dev zamanını çok fazla artıracak ve kod tabanının parçalanmasına yol açacak (yazılım bakım maliyetleri) Ama makale için çok önemliydi.
Dr.YSG

Burada ek bir kısıtlama olduğunu hatırladım: PhoneGap ile uygularsak, sponsor buna yerel bir uygulama diyecek ve daha sonra bir yıl veya daha uzun süren bir sertifikasyondan geçmesi gerekecektir. Bundan gerçekten kaçınmak istiyoruz.
Dr.YSG

1
Aradığın şey doğal bir bileşen olmadan mümkün değil. Muhtemelen yeniden müzakere etmenin zamanı geldi.
tmcw

Merakım için IndexDB veya FileAPI ile ilgili sorun nedir?
Dr.YSG

1
Sıfıra yakın ve sivilceli tarayıcı desteği artı düşük boyut sınırları. Kendiniz deneyin
tmcw

3

Sonuçlar PNG slippy maps için Çevrimdışı blob önbelleği

Test yapmak

  • 171 PNG dosyası (toplam 3,2 MB)
  • Test edilen platformlar: Chrome v24, FireFox 18, IE 10
  • Ayrıca Android için Chrome ve FF ile çalışmalı

Web sunucusundan al

  • Web sunucusundan blob indirmek için XHR2 (neredeyse tüm tarayıcılarda desteklenir) kullanarak
  • XHR2-Lib ile JQUERY .ajax'a çok benzeyen Phil Parsons tarafından gittim.

Depolama

Görüntüle

  • Harita döşemelerini göstermek için http://leafletjs.com/ Leaflet kullanıyorum
  • Fonksiyonel karo katmanı eklentisini Ishmael Smyrnow'un karo katmanını DB'den almak için kullandım.
  • DB tabanlı döşemeler katmanını tamamen yerel (localhost: //) bir depolama alanıyla karşılaştırdım.
  • Performansta gözle görülür bir fark yoktur! IndexedDB ve yerel dosyaları kullanma arasında!

Sonuçlar

  • Krom: Al (6.551s), Mağaza (8.247s)
  • FireFox: Getir (0.422s), Mağaza (34.519s)
  • IE 10: Getir (0.668s), Mağaza: (0.896s)

2

bu yüzden neredeyse kesinlikle leaf.pouch kullanmak istemezsiniz, fayans değil vektör verilerini göz önünde bulundurarak , fayanslarınızı saklamak için muhtemelen Boğazı yükseltmek için PouchDB kullanmaktan daha iyi olacağınızı , çünkü hızlı ilk yükleme, yukarıdaki tmcw tarafından verilen cevap, eğer bir mobil web sayfasının aksine bir telefon uygulamasına sahipseniz de işe yarar.


0

standart SQLite3 konteyner MBTILES biçimini, PNG veya JPG veya WebP veya GZipped PBF ile tile_data blob alanına sahip fayans tablosu ile MBTILES.JS https://github.com/tilemapjp/mbtiles.js/tree/master https: // www.npmjs.com/package/Leaflet.TileLayer.MBTiles

TMS veya XYZ Fayanslarını MapBox by MBUTIL ile mbtiles'e dönüştürebilirsiniz. Eğer fayans klasörünü oluşturmanız gerekiyorsa, önce GDAL2TILES_Parallel.py veya gdal2tilesp.py dosyasını orjinalin paralel çok işlemli python uygulamalarını kullanın. Her ikisi de GDAL gerektirir.


Tamamen çevrimdışı görüntüleme için broşürlerde mbtillerin (raster, vektör ve arazi / yükseklik) doğrudan okunmasını uyguladım.
GeospatialInformationTech

Uygulamam OGC GeoPackage desteği ekledi. Raster, Vektör, Yükseklik ve Vektör Karoları. GeoPackage-JS kullanarak
GeospatialInformationTech

0

Leafletjs'te MBTILES görüntü tanımını buraya girin

Yerel ve uzak mbtiles okuyacak. IONIC ile mobil uygulama olarak paketleyin veya Native ile React. veya Elektron Atomlu Masaüstü. MBTILES gitmenin yolu

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.