|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "Xy.h"
|
|
|
|
|
|
#include "LayerName.h"
|
|
|
|
|
|
#include <filesystem>
|
|
|
|
|
|
|
|
|
|
|
|
// forward declarations
|
|
|
|
|
|
class CXy;
|
|
|
|
|
|
namespace cv { class Mat; }
|
|
|
|
|
|
|
|
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
|
|
|
|
|
|
|
// --- SQLite
|
|
|
|
|
|
#include <sqlite3.h>
|
|
|
|
|
|
|
|
|
|
|
|
class AFX_EXT_CLASS MapViewLayer
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
MapViewLayer(void);
|
|
|
|
|
|
virtual ~MapViewLayer(void);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>γ<EFBFBD><CEB3>
|
|
|
|
|
|
bool MapProjection(CXy *pXy, CRect8 rect);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + ƴ<><C6B4> + <20>ü<EFBFBD> + <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
// - ʹ<><CAB9> SQLite <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><C6AC>MBTiles <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>
|
|
|
|
|
|
// - <20><><EFBFBD><EFBFBD> urls<6C><73> Ĭ<>Ϲ<EFBFBD><CFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ַ
|
|
|
|
|
|
// - <20><><EFBFBD><EFBFBD> path<74><68> SQLite <20>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺C:\\tiles\\map_cache.sqlite
|
|
|
|
|
|
// - <20><><EFBFBD><EFBFBD> outFile<6C><65><EFBFBD><EFBFBD><EFBFBD>ɵĵ<C9B5>ͼͼƬ·<C6AC><C2B7>
|
|
|
|
|
|
// - <20><><EFBFBD><EFBFBD> threadCount<6E><74>Ĭ<EFBFBD><C4AC><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>
|
|
|
|
|
|
bool SaveTDTMapCroppedParallel(int zoom,
|
|
|
|
|
|
const CString& urls,
|
|
|
|
|
|
const CString& path,
|
|
|
|
|
|
const CString& outFile,
|
|
|
|
|
|
int threadCount = 6);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// <20><>γ<EFBFBD><CEB3>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int lon2tileX(double lon, int zoom);
|
|
|
|
|
|
int lat2tileY(double lat, int zoom);
|
|
|
|
|
|
double lon2pixelX(double lon, int zoom);
|
|
|
|
|
|
double lat2pixelY(double lat, int zoom);
|
|
|
|
|
|
|
|
|
|
|
|
// SQLite
|
|
|
|
|
|
bool InitTileDatabase(const fs::path& dbPath);
|
|
|
|
|
|
bool ReadTileFromSQLite(sqlite3* db, int z, int x, int y,
|
|
|
|
|
|
const CString& url, cv::Mat& outTile);
|
|
|
|
|
|
bool InsertTileToSQLite(sqlite3* db, int z, int x, int y,
|
|
|
|
|
|
const CString& url,
|
|
|
|
|
|
const unsigned char* data, int size);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ص<EFBFBD><D8B5>ڴ棨<DAB4><E6A3A8> SQLite д<>룩
|
|
|
|
|
|
bool DownloadTileBytes(const CString& url, std::vector<unsigned char>& out);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
double m_dX0, m_dY0; // <20><><EFBFBD>ϵ㾭γ<E3BEAD><CEB3>
|
|
|
|
|
|
double m_dX1, m_dY1; // <20><><EFBFBD>µ㾭γ<E3BEAD><CEB3>
|
|
|
|
|
|
};
|