You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.0 KiB
C

1 month ago
#pragma once
#include "Xy.h"
#include "LayerName.h"
#include <filesystem>
1 month ago
#include <afxinet.h>
#include <thread>
#include <mutex>
#include <queue>
#include <atomic>
#include <string>
#include <memory>
1 month ago
// 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>
1 month ago
bool MapProjection(CXy *pXy, CRect8 rect, bool state = false);
1 month ago
// <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,
1 month ago
int threadCount = 12,
std::function<void(int completed, int total)> progressCallback = nullptr);
void StopTask();
1 month ago
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);
1 month ago
//ת<><D7AA>WGS-84<38><34>GCJ-02(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ)
void WGS84ToGCJ02(double& lon, double& lat);
1 month ago
// 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);
1 month ago
//ȡͼ
cv::Mat StitchTilesFromSQLite(int x0, int y0, int x1, int y1, int zoom, sqlite3* db);
1 month ago
protected:
double m_dX0, m_dY0; // <20><><EFBFBD>ϵ㾭γ<E3BEAD><CEB3>
double m_dX1, m_dY1; // <20><><EFBFBD>µ㾭γ<E3BEAD><CEB3>
1 month ago
std::atomic<bool> m_cancelFlags; //<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>־
std::mutex m_httpMut;
std::vector<std::shared_ptr<CHttpFile>> m_activeHttpFiles;
1 month ago
};