正在显示
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 | +} |
请
注册
或
登录
后发表评论