我想保存一个具有特定边界的OSM映射,以便在我的文件系统中脱机使用,而不是在web浏览器之外使用任何DB。之后,我想在离线时用传单库渲染地图。这有可能吗?
发布于 2020-07-21 00:49:35
我怀疑这可能是一个XY问题,在web浏览器的缓存中从外部提供者保存瓷砖听起来只是最初目标离线使用的许多解决方案中的一种,而不必使用(或者实际上不安装?)客户端的数据库。
如果是这样的话,@IvanSanchez的Leaflet.TileLayer.MBTiles插件就可以满足要求:虽然mbtiles文件在技术上是一个数据库,但它包含在一个可移植的文件中,而不需要安装(它是一个SQLite文件)。
大小可能在浏览器缓存上,但如果您对客户端有某种控制,则只需在文件系统上复制它。然后,您也可以从文件系统或本地服务器打开HTML页面,这也将与脱机使用更加一致。
发布于 2020-07-20 20:21:26
我认为这方面有两种主要办法:
IndexedDB
、WebSQL
、Web存储和/或相关的浏览器数据库.
据我所见,大多数开发人员更喜欢依赖于封装这些技术的库来提供跨浏览器的一致支持(因为并非所有浏览器都支持所有这些技术)。让我引用MDN的话:
注意: IndexedDB API功能强大,但对于简单的情况来说可能太复杂了。如果您想要一个简单的API,可以尝试一些库,比如localForage、dexie.js、ZangoDB、PouchDB、idb、idb、JsStore和lovefield,它们使IndexedDB更易于编程。特别是,一种PouchDB支持的小册子的实现是可用的;但不要因此而妨碍您探索其他选项。
ServiceWorker
的能力将东西存储在浏览器的Cache
上。
ServiceWorker
能够捕获网页发出的所有网络请求,包括tiles (即使分配器位于不同的域名)。然后,可以应用-based缓存技术。在此之后,甚至应该可以向ServiceWorker
发送消息来为缓存注入种子(或者仅仅为这些块发出足够的fetch
请求)。
我不知道(在撰写本文时)任何简单的传单集成。实现包括使用清单代码创建指向JS文件的ServiceWorker
,以及缓存机制的实现。https://stackoverflow.com/questions/62989519
复制相似问题