正在显示
1 个修改的文件
包含
72 行增加
和
0 行删除
1 | +/************************************************************************** | |
2 | +* file: dmpesribundlev2provider.cpp | |
3 | + | |
4 | +* Author: wanzhongping | |
5 | +* Date: 2021-06-02 11:29:16 | |
6 | +* Email: zhongpingw@chinadci.com | |
7 | +* copyright: 广州城市信息研究所有限公司 | |
8 | +***************************************************************************/ | |
9 | +#include "dmpesribundlev2provider.h" | |
10 | +#include "dmpwmtsutils.h" | |
11 | + | |
12 | +namespace DmpWmts | |
13 | +{ | |
14 | + DmpEsriBundleV2Provider::DmpEsriBundleV2Provider() | |
15 | + { | |
16 | + _rootPath ="/mnt/d/Data/SDZT_DIANZDT_2016_FS2K/Layers/_alllayers"; | |
17 | + } | |
18 | + void DmpEsriBundleV2Provider::WriteTile(const int row, const int col, const int level, const std::string& format, DmpServerResponse& response) | |
19 | + { | |
20 | + int packSize = _packetSize; | |
21 | + int rGroup = (int)row/packSize; | |
22 | + rGroup = rGroup * packSize; | |
23 | + int cGroup = (int)col/packSize; | |
24 | + cGroup = cGroup*packSize; | |
25 | + | |
26 | + std::string bundleBase = GetBundlePath(level,rGroup,cGroup); | |
27 | + std::string bundleFilePath = bundleBase + ".bundle"; | |
28 | + | |
29 | + int index = packSize * (row - rGroup) + (col - cGroup); | |
30 | + | |
31 | + //读取bundle文件,计算偏移量 | |
32 | + std::ifstream fread(bundleFilePath, std::ifstream::binary); | |
33 | + if(!fread) | |
34 | + { | |
35 | + response.SendError(500, "找不到瓦片:("); | |
36 | + } | |
37 | + fread.seekg(64 + 8 * index, fread.beg); | |
38 | + char* buffer = new char[4]; | |
39 | + fread.read(buffer,4); | |
40 | + long offset = (long)(buffer[0]&0xff) | |
41 | + + (long)(buffer[1]&0xff) * 256 | |
42 | + + (long)(buffer[2]&0xff) * 65536 | |
43 | + + (long)(buffer[3]&0xff) * 16777216 | |
44 | + -4; | |
45 | + delete [] buffer; | |
46 | + | |
47 | + //读取bundle文件获取切片 | |
48 | + fread.seekg(offset, fread.beg); | |
49 | + char* buff = new char[4]; | |
50 | + fread.read(buff, 4); | |
51 | + long len = (long)(buff[0]&0xff) | |
52 | + + (long)(buff[1]&0xff) * 256 | |
53 | + + (long)(buff[2]&0xff) * 65536 | |
54 | + + (long)(buff[3]&0xff) * 16777216; | |
55 | + delete[] buff; | |
56 | + char* imgBuffer = new char[len]; | |
57 | + fread.read(imgBuffer, len); | |
58 | + fread.close(); | |
59 | + if(len > 0) | |
60 | + { | |
61 | + response.RemoveHeader("Content-Type"); | |
62 | + std::string f = (format == "jpg") ? "image/jpg" : "image/png"; | |
63 | + response.SetHeader("Content-Type", f); | |
64 | + response.WriteContent(imgBuffer, len); | |
65 | + } | |
66 | + else | |
67 | + { | |
68 | + response.SendError(500, "找不到瓦片:("); | |
69 | + } | |
70 | + delete[] imgBuffer; | |
71 | + } | |
72 | +} | |
\ No newline at end of file | ... | ... |
请
注册
或
登录
后发表评论