美文网首页地图
Mapbox源码分析(6)数据库初始化

Mapbox源码分析(6)数据库初始化

作者: 一个观察世界的普通人 | 来源:发表于2020-02-23 20:38 被阅读0次

    简介:

    通过源码,我们来一步步分析Mapbox地图引擎初始化本地数据库的流程,这里是基于5.3.0的版本.

    #### 注意

    当我写这篇博客的时候,在官方changlog看到后续版本中对FileSource激活部分有做改动,这里暂时以现有版本为主,需要详细了解的同学可以下载新版本的源码了解

    Mapbox提供了地图的离线下载存储功能,那么它是什么时候创建本地数据库的呢,我们看到NativeMapView的构造方法

    这里我们看到它拿到了FileSource对象的实例,在这个类的注解中,我们知道它是负责激活本地数据源的,那么我们看看它的getInstance()方法

    这里我们可以看出这是一个单例模式,我们看到它传入了一个缓存路径,那么这个路径会不会就是数据库存放的路径呢,我们继续往下看

    这里我们看到它调用了底层的初始化方法,那么我们看看和这个对应的底层文件file_source.cpp

    这里我们看到它在传入的路径后面加了"/mbgl-offline.db",这个路径果然是数据库路径,我们看到在这个构造方法中实例化了一个DefaultFileSource对象,那么我们看看DefaultFileSource对象的构造方法

    这里我们发现他又初始化了它的Impl实现类,那么我继续看它的实现类

    这里我们看到在它的构造方法中,又执行了initializeOfflineDatabase()方法,从这个方法名可以看出是初始化数据库,我们看到这个方法里面有实例化一个OfflineDatabase对象,我们看看这个对象

    这里看出并未做什么,初始化值之后,便调用了ensureSchema()方法,我们看看这个方法

    到这里基本就可以看出来了首先是通过connect()方法连接数据库,我们先看看connect()方法

    这里我就把相关代码放一起了,我们看到connect()方法实例化了一个Database对象,并通过DatabaseImpl类调用sqlite3_open_v2()打开了一个数据库,那么和离线瓦片数据相关的表是怎么创建的呢,这里我们回到上面的ensureSchema()代码处,看到有这么一行

    ```c++

    #include "offline_schema.cpp.include"

    ```

    我们找到这个文件看看,我们找到该文件在 platform/default/mbgl/storage目录下

    看到这里我们明白了,这里将相关创建表的语句定义成schema变量,通过#include引入到代码中,然后通过db->exec(schema)执行创建表,有关数据库初始化的过程就到这里了

    相关文章

      网友评论

        本文标题:Mapbox源码分析(6)数据库初始化

        本文链接:https://www.haomeiwen.com/subject/hoisqhtx.html