FastTileDatabase
轻量级高性能瓦片地图数据库
Loading...
Searching...
No Matches
MeFTD.h
Go to the documentation of this file.
1#ifndef MEFASTTILEDB_H__
2#define MEFASTTILEDB_H__
3
4#include <string>
5#include <vector>
6
7#include "MeFTDMedata.h"
8#include "MeFTDPoint2D.h"
9#include "MeFTDExtent.h"
10#include "MeFTDIterator.h"
11
31namespace MapEdges
32{
73 {
74 private:
75 struct FTDHandlerPrivate;
76
77 public:
78
84 {
85 ReadOnly = 0,
86
87 WriteOnly = 1,
88
89 ReadWrite = 2
90 };
91
92 public:
98 MeFTDHandler(const std::string& strFileName);
99
101
106 {
107 private:
108 struct FTDBuilderPrivate;
109
110 public:
112
114
121 FTDBuilder& setFileName(const std::string& strFileName);
122
129 FTDBuilder& setOverwrite(bool bOverwrite);
130
142
149 FTDBuilder& setEPSG(int nEPSG);
150
158 FTDBuilder& setZoomRange(int nMinZoom, int nMaxZoom);
159
166 FTDBuilder& setInitRes(double dRes);
167
174 FTDBuilder& setTileSize(int nTileSize);
175
183
190 FTDBuilder& setDescription(const std::string& strDesc);
191
201
209 FTDBuilder& setProcessor(MeFTDProcessing* pProc, void* pUserData);
210
217 MeFTDHandler* build(std::string& strErrMsg);
218
225
226 friend class MeFTDHandler;
227
228 private:
229 FTDBuilderPrivate* mPrivate = nullptr;
230
231 };
232
233 public:
234
241 bool open(OpenMode eMode);
242
248 bool isOpen() const;
249
254 void close();
255
260 void flush();
261
269 bool vacuum();
270
279 void setLogListener(MeFTDLogListener* pListener, void* pUserData = nullptr);
280
287
296 void setProcessor(MeFTDProcessing* pProc, void* pUserData);
297
316 bool initZoom(const MeFTDZoom& nZoom);
317
326 bool zoomIsInitialized(const MeFTDZoom& nZoom) const;
327
333 std::string fileName() const;
334
341
348
355 long long tileCount(const MeFTDZoom& nZoom) const;
356
365 bool write(const MeFTDTileKey& tk, MeFTDTileData pBuffer, int nDataLen);
366
375 bool read(const MeFTDTileKey& tk, MeFTDTileData* pOutBuffer, int& nDataLen) const;
376
388 bool deleteTile(const MeFTDTileKey& tk);
389
399 bool updateTile(const MeFTDTileKey& tk, MeFTDTileData pNewBuffer, int nDataLen);
400
413 bool geoTransform(const MeFTDZoom& zoom, double* pTransform, const MeFTDExtent& extent = MeFTDExtent());
414
428 bool calcPixelsSize(const MeFTDZoom& zoom, long long& nWidth, long long& nHeight, const MeFTDExtent& extent = MeFTDExtent());
429
436 double zoomResolution(const MeFTDZoom& zoom) const;
437
450
458
466 MeFTDTileExtent tileExtent(const MeFTDZoom& nZoom, const MeFTDExtent& extent) const;
467
475 MeFTDTileStatus tileStatus(const MeFTDTileKey& tk, bool& bOk) const;
476
484
492 MeFTDIterator* iterator(const MeFTDZoom& nZoom, const MeFTDExtent& extent);
493
500
505 static void destroy(MeFTDHandler* pHandler);
506
512 static void destroyTileData(MeFTDTileData pData);
513
521 static MeFTDHandler* fromFile(const std::string& strFileName, OpenMode eMode = ReadOnly);
522
523 private:
524 MeFTDHandler(FTDBuilder* pBuilder);
525
526 FTDHandlerPrivate* mPrivate = nullptr;
527
528 };
529
530};
531
532#endif
#define FTD_EXPORT
Definition: MeFTDGlobal.h:15
FTD 数据库构建器
Definition: MeFTD.h:106
FTDBuilder & setInitRes(double dRes)
设置初始化空间分辨率
FTDBuilder & setOverwrite(bool bOverwrite)
当文件存在时是否对其进行覆盖重写
FTDBuilder & setExtent(const MeFTDExtent &extent)
设置数据范围,数据范围应该与指定的 EPSG 匹配
FTDBuilder & setZoomRange(int nMinZoom, int nMaxZoom)
设置最低和最高级别
FTDBuilder & setFileName(const std::string &strFileName)
设置文件路径
MeFTDHandler * build(std::string &strErrMsg)
构建 FTD 文件,如果失败 strErrMsg 将输出错误消息
FTDBuilder & setInitZooms(const MeFTDZooms &zooms)
设置创建文件后,立即构建空间索引的级别。必须在
FTDBuilder & setTileSize(int nTileSize)
设置瓦片大小,瓦片大小应该与空间分辨率相匹配
FTDBuilder & setEPSG(int nEPSG)
设置 FTD 的空间参考,可以是 FTD_WGS_84_EPSG 或 FTD_MERCATOR_EPSG
FTDBuilder & setProcessor(MeFTDProcessing *pProc, void *pUserData)
设置处理监听器,例如获取初始化级别索引时的进度
MeFTDHandler * build()
构建 FTD 文件
FTDBuilder & setDescription(const std::string &strDesc)
设置附加描述信息
FTDBuilder & setFormat(MeFTDTileFormat eFormat)
设置一个格式用于标记 FTD 中存储的数据类型,如默认的格式
FTD 的处理器,如果您已经有一个构建好的历史文件需要打开进行只读或更新操作,您可以直接构造该
Definition: MeFTD.h:73
bool deleteTile(const MeFTDTileKey &tk)
删除指定的瓦片
void flush()
将缓存中的数据同步到磁盘
bool zoomIsInitialized(const MeFTDZoom &nZoom) const
判断指定的级别是否已经初始化,只有初始化以后的级别才能写入
bool isOpen() const
判断文件是否打开
MeFTDStatisticsResult statistics(MeFTDZoom nZoom=-1) const
对文件瓦片进行统计,如果 nZoom 给定的是 -1 将统计所有级别。
MeFTDZooms initializedZooms() const
获取已经初始化完成的级别
void close()
关闭文件句柄
MeFTDIterator * iterator(const MeFTDZoom &nZoom)
瓦片坐标迭代器,用于迭代指定层级的瓦片数据。迭代器不需要释放。
static void destroy(MeFTDHandler *pHandler)
销毁由 FTDBuilder 创建的文件句柄
MeFTDTileExtent tileExtent(const MeFTDZoom &nZoom, const MeFTDExtent &extent) const
获取指定级别范围内的瓦片坐标范围
MeFTDMedata medata() const
获取文件的元信息系
void setProcessor(MeFTDProcessing *pProc, void *pUserData)
设置处理监听器,在 FTD 执行一些耗时操作的时候,通过
MeFTDIterator * iterator(const MeFTDZoom &nZoom, const MeFTDExtent &extent)
瓦片坐标迭代器,用于迭代指定层级范围的瓦片数据。迭代器不需要释放。
bool read(const MeFTDTileKey &tk, MeFTDTileData *pOutBuffer, int &nDataLen) const
读取数据
bool initZoom(const MeFTDZoom &nZoom)
初始化一个级别,默认情况下为了节省磁盘空间,FTD 不会为
MeFTDTileExtent tileExtent(const MeFTDZoom &nZoom) const
获取指定级别的瓦片坐标范围
bool changeTileStatus(const MeFTDTileKey &tk, MeFTDTileStatus eStatus)
修改瓦片状态,文件不能是只读模式。
MeFTDHandler(const std::string &strFileName)
通过文件名构建文件句柄
bool write(const MeFTDTileKey &tk, MeFTDTileData pBuffer, int nDataLen)
写入数据到文件
double zoomResolution(const MeFTDZoom &zoom) const
返回指定级别的空间分辨率
void setLogListener(MeFTDLogListener *pListener, void *pUserData=nullptr)
设置日志监听器,FTD 自身不生成任何日志文件,通过
bool updateTile(const MeFTDTileKey &tk, MeFTDTileData pNewBuffer, int nDataLen)
将指定的瓦片更新为最新数据
MeFTDTileStatus tileStatus(const MeFTDTileKey &tk, bool &bOk) const
检查指定瓦片在数据库中的状态
static void destroyTileData(MeFTDTileData pData)
销毁瓦片数据缓存
OpenMode
文件打开模式
Definition: MeFTD.h:84
void setLogLevel(MeFTDLogListener::LogLevel eLevel)
设置监听日志的级别
bool calcPixelsSize(const MeFTDZoom &zoom, long long &nWidth, long long &nHeight, const MeFTDExtent &extent=MeFTDExtent())
计算指定级别范围内的像素宽度和高度,未指定 extent 时,使用
std::string fileName() const
获取文件名
static MeFTDHandler * fromFile(const std::string &strFileName, OpenMode eMode=ReadOnly)
从一个文件构建文件句柄,这个文件必须由 FTDBuilder 构建
bool vacuum()
回收碎片空间,无论如何你都应该知道,执行 vacuum 是一项代价高昂
bool open(OpenMode eMode)
打开文件
long long tileCount(const MeFTDZoom &nZoom) const
获取指定级别的瓦片数量
bool geoTransform(const MeFTDZoom &zoom, double *pTransform, const MeFTDExtent &extent=MeFTDExtent())
获取指定级别的仿射变换六参数,文件必须打开。当未给定 extent 范围时
瓦片数据迭代器。
Definition: MeFTDIterator.h:12
FTD 默认不会输出任何日志信息,将日志的持久化记录交给运用层面。
Definition: MeFTDApi.h:87
LogLevel
Definition: MeFTDApi.h:90
在进行一些耗时操作时(例如:初始化级别索引),我们想要知道
Definition: MeFTDApi.h:129
瓦片坐标。
Definition: MeFTDTileKey.h:25
Fast Tile Database 简称(FTD)是一个轻量级的瓦片数据本地持久化存储数据库,它的出现主要
Definition: MeFTD.h:32
MeFTDTileFormat
常见瓦片格式枚举。
Definition: MeFTDMedata.h:12
int MeFTDZoom
金字塔级别。
Definition: MeFTDTileKey.h:12
MeFTDTileStatus
有的时候我们可能需要将单张瓦片标记为某种状态,FTD 默认允许将瓦片标记为初始化、正常、失败、忽略、无数据、删除六种状态。
Definition: MeFTDApi.h:28
std::vector< MeFTDZoom > MeFTDZooms
金字塔级别集合。
Definition: MeFTDTileKey.h:18
void * MeFTDTileData
Definition: MeFTDApi.h:17
定义一个矩形范围。
Definition: MeFTDExtent.h:13
FTD 的文件元信息
Definition: MeFTDMedata.h:35
描述FTD的数据统计信息,包括有效的瓦片数量占比
Definition: MeFTDApi.h:47
瓦片坐标范围,在FTD中瓦片坐标永远定义为从 0 开始
Definition: MeFTDExtent.h:40