提交 436203feb1f360ad766a61b3a9dc32aabee1cf6e

作者 qingxiongf
1 个父辈 8478d518

在线配图

@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 #include "dmpservermanager.h" 9 #include "dmpservermanager.h"
10 #include "dmpserver.h" 10 #include "dmpserver.h"
11 #include "dmphttputils.h" 11 #include "dmphttputils.h"
12 -#include "dmpserverConfig.h" 12 +#include "dmpserverconfig.h"
13 #include <memory> 13 #include <memory>
14 #include <boost/property_tree/ptree.hpp> 14 #include <boost/property_tree/ptree.hpp>
15 #include <boost/property_tree/json_parser.hpp> 15 #include <boost/property_tree/json_parser.hpp>
@@ -110,6 +110,10 @@ void DmpManagerApiHandler::regService(const DmpServerApiContext &context) const @@ -110,6 +110,10 @@ void DmpManagerApiHandler::regService(const DmpServerApiContext &context) const
110 // context.response()->removeHeader("Content-Type"); 110 // context.response()->removeHeader("Content-Type");
111 // context.response()->setHeader("Content-Type", "text/xml;charset=utf-8"); 111 // context.response()->setHeader("Content-Type", "text/xml;charset=utf-8");
112 // context.response()->write(projData); 112 // context.response()->write(projData);
  113 +
  114 +
  115 +
  116 +
113 } 117 }
114 else 118 else
115 { 119 {
@@ -21,6 +21,7 @@ SET (MAPSERVER_SRCS @@ -21,6 +21,7 @@ SET (MAPSERVER_SRCS
21 mapping/dmpmapping.cpp 21 mapping/dmpmapping.cpp
22 mapping/dmpeditservice.cpp 22 mapping/dmpeditservice.cpp
23 mapping/dmpmappingparameters.cpp 23 mapping/dmpmappingparameters.cpp
  24 + mapping/dmpimageinfo.cpp
24 ) 25 )
25 26
26 SET (MAPSERVER_HDRS 27 SET (MAPSERVER_HDRS
@@ -42,6 +43,7 @@ SET (MAPSERVER_HDRS @@ -42,6 +43,7 @@ SET (MAPSERVER_HDRS
42 mapping/dmpmapping.h 43 mapping/dmpmapping.h
43 mapping/dmpeditservice.h 44 mapping/dmpeditservice.h
44 mapping/dmpmappingparameters.h 45 mapping/dmpmappingparameters.h
  46 + mapping/dmpimageinfo.h
45 ) 47 )
46 48
47 ######################################################## 49 ########################################################
@@ -91,13 +91,6 @@ namespace DmpMapping @@ -91,13 +91,6 @@ namespace DmpMapping
91 context.response()->writeJson("{\"status\":\"false\",\"message\":\"post 参数错误!\"}"); 91 context.response()->writeJson("{\"status\":\"false\",\"message\":\"post 参数错误!\"}");
92 return false; 92 return false;
93 } 93 }
94 -  
95 - if(!context.serverProject())  
96 - {  
97 - LOGGER_ERROR("加载服务信息失败,服务名称是否错误");  
98 - context.response()->writeJson("{\"status\":\"false\",\"message\":\"加载服务信息失败,服务名称是否错误!\"}");  
99 - return false;  
100 - }  
101 94
102 try 95 try
103 { 96 {
  1 +/**************************************************************************
  2 +* file: dmpimageinfo.cpp
  3 +
  4 +* Author: qingxiongf
  5 +* Date: 2022-01-04 10:50:35
  6 +* Email: qingxiongf@chinadci.com
  7 +* copyright: 广州城市信息研究所有限公司
  8 +***************************************************************************/
  9 +#include <unistd.h>
  10 +#include <dirent.h>
  11 +#include <stdlib.h>
  12 +#include <sys/stat.h>
  13 +#include <map>
  14 +#include <set>
  15 +#include <fontconfig/fontconfig.h>
  16 +
  17 +#include <boost/foreach.hpp>
  18 +#include <boost/lexical_cast.hpp>
  19 +#include <boost/algorithm/string.hpp>
  20 +#include <boost/date_time.hpp>
  21 +#include <boost/property_tree/ptree.hpp>
  22 +#include <boost/property_tree/json_parser.hpp>
  23 +#include <boost/typeof/typeof.hpp>
  24 +#include "dmplogger.h"
  25 +#include "dmpserverresponse.h"
  26 +#include "dmpserverrequest.h"
  27 +
  28 +#include "dmpimageinfo.h"
  29 +
  30 +namespace DmpMapping
  31 +{
  32 + void getTypefaceList(const DmpServerContext &context)
  33 + {
  34 + FcConfig *config = FcInitLoadConfigAndFonts();
  35 + FcPattern *pat = FcPatternCreate();
  36 + FcObjectSet *os = FcObjectSetBuild(FC_FAMILY, FC_STYLE, FC_LANG, FC_FILE, (char *)0);
  37 + FcFontSet *fs = FcFontList(config, pat, os);
  38 + if (fs == nullptr)
  39 + {
  40 + context.response()->writeJson("{\"error\":\"load FcFontSet failed\"}");
  41 + return;
  42 + }
  43 + //printf("Total matching fonts: %d\n", fs->nfont);
  44 + boost::property_tree::ptree ptDoc;
  45 + boost::property_tree::ptree ptRoot;
  46 +
  47 + std::map<std::string, std::string> mapFont;
  48 + mapFont["SimSun"] = "宋体";
  49 + mapFont["NSimSun"] = "新宋体";
  50 + mapFont["SimHei"] = "黑体";
  51 + mapFont["FangSong"] = "仿宋";
  52 + mapFont["KaiTi"] = "楷体";
  53 + mapFont["LiSu"] = "隶书";
  54 + mapFont["YouYuan"] = "幼圆";
  55 + mapFont["STXihei"] = "华文细黑";
  56 + mapFont["STKaiti"] = "华文楷体";
  57 + mapFont["STSong"] = "华文宋体";
  58 + mapFont["STZhongsong"] = "华文中宋";
  59 + mapFont["STFangsong"] = "华文仿宋";
  60 + mapFont["FZShuTi"] = "方正舒体";
  61 + mapFont["FZYaoti"] = "方正姚体";
  62 + mapFont["STCaiyun"] = "华文彩云";
  63 + mapFont["STHupo"] = "华文琥珀";
  64 + mapFont["STLiti"] = "华文隶书";
  65 + mapFont["STXingkai"] = "华文行楷";
  66 + mapFont["STXinwei"] = "华文新魏";
  67 + mapFont["Microsoft YaHei"] = "微软雅黑";
  68 + mapFont["Microsoft JhengHei"] = "微軟正黑體";
  69 + mapFont["DengXian"] = "等线";
  70 + mapFont["MingLiU"] = "細明體";
  71 + mapFont["MingLiU_HKSCS"] = "細明體_HKSCS";
  72 + mapFont["MingLiU"] = "細明體";
  73 +
  74 + std::set<std::string> setFont;
  75 + char buff[1000];
  76 + for (int i = 0; fs && i < fs->nfont; ++i)
  77 + {
  78 +
  79 + FcPattern *font = fs->fonts[i];
  80 + FcChar8 *file, *style, *family, *prgname;
  81 + if (FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch &&
  82 + FcPatternGetString(font, FC_FAMILY, 0, &family) == FcResultMatch &&
  83 + FcPatternGetString(font, FC_STYLE, 0, &style) == FcResultMatch)
  84 + {
  85 + sprintf(buff, "%s", family);
  86 + if (setFont.find(buff) == setFont.end())
  87 + {
  88 +
  89 + setFont.insert(buff);
  90 + if (mapFont.find(buff) != mapFont.end())
  91 + {
  92 + boost::property_tree::ptree ptNode;
  93 + ptNode.put("", buff);
  94 + ptRoot.push_back(std::make_pair("", ptNode));
  95 + }
  96 + }
  97 + }
  98 + }
  99 +
  100 + for (std::set<std::string>::iterator iter = setFont.begin();
  101 + iter != setFont.end(); iter++)
  102 + {
  103 + if (mapFont.find(*iter) == mapFont.end())
  104 + {
  105 + boost::property_tree::ptree ptNode;
  106 + ptNode.put("", *iter);
  107 + ptRoot.push_back(std::make_pair("", ptNode));
  108 + }
  109 + }
  110 +
  111 + FcFontSetDestroy(fs);
  112 +
  113 + ptDoc.add_child("value", ptRoot);
  114 + std::stringstream stream;
  115 + write_json(stream, ptDoc);
  116 + std::string responseStr = stream.str();
  117 + context.response()->writeJson(responseStr);
  118 + }
  119 +
  120 + void getImage(const DmpServerContext &context)
  121 + {
  122 + DmpServerParameters params = context.request()->serverParameters();
  123 + std::string name;
  124 + params.getValue("name", name);
  125 +
  126 + std::string imagePath = getFilePath("../symbollib/" + name);
  127 + FILE *file = fopen(imagePath.c_str(), "rb");
  128 +
  129 + try
  130 + {
  131 + char buff[1024];
  132 + if (file == 0)
  133 + {
  134 + context.response()->writeJson("{\"error\":\"open file failed\"}");
  135 + return;
  136 + }
  137 +
  138 + context.response()->removeHeader("Content-Type");
  139 + context.response()->setHeader("Content-Type", "image/png");
  140 +
  141 + for (int i = 0; i < 20000; i++)
  142 + {
  143 + size_t t = fread(buff, 1, sizeof(buff), file);
  144 + context.response()->writeContent(buff, t);
  145 +
  146 + if (t != sizeof(buff))
  147 + break;
  148 + }
  149 + fclose(file);
  150 + return;
  151 + }
  152 + catch (...)
  153 + {
  154 + if (file)
  155 + fclose(file);
  156 + }
  157 + context.response()->writeJson("{\"error\":\"Parameter name is null\"}");
  158 + }
  159 +
  160 + void getImageTypeList(const DmpServerContext &context)
  161 + {
  162 + DIR *dirp;
  163 + struct dirent *dp;
  164 + std::string imagePath = getFilePath("../symbollib");
  165 + dirp = opendir(imagePath.c_str());
  166 +
  167 + boost::property_tree::ptree ptDoc;
  168 + boost::property_tree::ptree ptRoot;
  169 +
  170 + if (dirp)
  171 + {
  172 + while ((dp = readdir(dirp)) != NULL)
  173 + {
  174 + if (dp->d_name == NULL || dp->d_name[0] == '.')
  175 + {
  176 + continue;
  177 + }
  178 +
  179 + boost::property_tree::ptree ptDir;
  180 +
  181 + ptDir.add("name", dp->d_name);
  182 + ptRoot.push_back(std::make_pair("", ptDir));
  183 + //ptRoot.add_child("imageType",ptDir);
  184 + }
  185 + closedir(dirp);
  186 + }
  187 + else
  188 + {
  189 + LOGGER_ERROR("not find dir " + imagePath);
  190 + }
  191 +
  192 + ptDoc.add_child("value", ptRoot);
  193 + std::stringstream stream;
  194 + write_json(stream, ptDoc);
  195 + std::string responseStr = stream.str();
  196 + context.response()->writeJson(responseStr);
  197 + }
  198 +
  199 + void getImageList(const DmpServerContext &context)
  200 + {
  201 + DmpServerParameters params = context.request()->serverParameters();
  202 + std::string name;
  203 + params.getValue("name", name);
  204 +
  205 + if (name.empty())
  206 + {
  207 + context.response()->writeJson("{\"error\":\"Parameter name is null\"}");
  208 + return;
  209 + }
  210 +
  211 + struct dirent *dp;
  212 + std::string imagePath = getFilePath("../symbollib/" + name);
  213 + DIR *dirp = opendir(imagePath.c_str());
  214 +
  215 + boost::property_tree::ptree ptDoc;
  216 + boost::property_tree::ptree ptRoot;
  217 +
  218 + if (dirp)
  219 + {
  220 + while ((dp = readdir(dirp)) != NULL)
  221 + {
  222 + boost::property_tree::ptree ptDir;
  223 + if (dp->d_name == NULL || dp->d_name[0] == '.')
  224 + {
  225 + continue;
  226 + }
  227 + ptDir.add("name", dp->d_name);
  228 + ptDir.add("path", ("../symbollib/" + name + "/" + dp->d_name));
  229 + ptRoot.push_back(std::make_pair("", ptDir));
  230 + }
  231 + closedir(dirp);
  232 + }
  233 + else
  234 + {
  235 + LOGGER_ERROR("not find dir " + imagePath);
  236 + }
  237 +
  238 + ptDoc.add_child("value", ptRoot);
  239 + std::stringstream stream;
  240 + write_json(stream, ptDoc);
  241 + std::string responseStr = stream.str();
  242 + context.response()->writeJson(responseStr);
  243 + }
  244 +
  245 + std::string getFilePath(const std::string &path)
  246 + {
  247 + char sz[300] = {0};
  248 + if (getCurrentFolderPath(sz, sizeof(sz)) > 0)
  249 + {
  250 + std::string s;
  251 + s = sz;
  252 + size_t t = s.rfind('/');
  253 + sz[t] = 0;
  254 + if (path[0] == '/')
  255 + {
  256 + return path;
  257 + }
  258 + int i = 0;
  259 + if (path[0] == '.')
  260 + {
  261 + if (path[1] == '.')
  262 + {
  263 + i++;
  264 + s = sz;
  265 + t = s.rfind('/');
  266 + sz[t] = 0;
  267 + }
  268 + i++;
  269 + }
  270 + if ((sz[t] == '/' || sz[t] == '\\') && (path[i] == '/' || path[i] == '\\'))
  271 + {
  272 + i++;
  273 + }
  274 +
  275 + int j = t;
  276 + for (j = t; i < path.length(); i++, j++)
  277 + {
  278 + if (path[i] == '\\')
  279 + {
  280 + sz[j] = '/';
  281 + }
  282 + else
  283 + {
  284 + sz[j] = path[i];
  285 + }
  286 + }
  287 + sz[j] = 0;
  288 + //strcat(sz, path.c_str());
  289 + return sz;
  290 + }
  291 + else
  292 + return 0;
  293 + }
  294 +
  295 + size_t getCurrentFolderPath(char *processdir, size_t len)
  296 + {
  297 + char *path_end;
  298 + if (readlink("/proc/self/exe", processdir, len) <= 0)
  299 + return -1;
  300 + path_end = strrchr(processdir, '/');
  301 + if (path_end == NULL)
  302 + return -1;
  303 + ++path_end;
  304 + //strcpy(processname, path_end);
  305 + *path_end = '\0';
  306 + return (size_t)(path_end - processdir);
  307 + }
  308 +
  309 +}
  1 +/**************************************************************************
  2 +* file: dmpimageinfo.h
  3 +
  4 +* Author: qingxiongf
  5 +* Date: 2022-01-04 10:03:50
  6 +* Email: qingxiongf@chinadci.com
  7 +* copyright: 广州城市信息研究所有限公司
  8 +***************************************************************************/
  9 +
  10 +#ifndef __dmpimageinfo_h__
  11 +#define __dmpimageinfo_h__
  12 +
  13 +#include <map>
  14 +#include <memory>
  15 +#include <functional>
  16 +#include "dmpservercontext.h"
  17 +
  18 +
  19 +
  20 +namespace DmpMapping
  21 +{
  22 + void getTypefaceList(const DmpServerContext &context) ; //获取字体列表
  23 + void getImageTypeList(const DmpServerContext &context) ; //获取图片目录列表
  24 + void getImageList(const DmpServerContext &context) ; //获取图片列表
  25 + void getImage(const DmpServerContext &context) ; //获取图片
  26 + std::string getFilePath(const std::string& path);
  27 + size_t getCurrentFolderPath(char *processdir, size_t len);
  28 +}
  29 +
  30 +#endif // __dmpimageinfo_h__
  31 +
@@ -17,8 +17,11 @@ @@ -17,8 +17,11 @@
17 #include "dmpserverresponse.h" 17 #include "dmpserverresponse.h"
18 #include "dmplogger.h" 18 #include "dmplogger.h"
19 #include "../wms/dmpwmsgetmap.h" 19 #include "../wms/dmpwmsgetmap.h"
  20 +#include "../wms/dmpwmsparameters.h"
20 #include "dmpmapping.h" 21 #include "dmpmapping.h"
21 #include "dmpmappingparameters.h" 22 #include "dmpmappingparameters.h"
  23 +#include "dmpimageinfo.h"
  24 +
22 using namespace std; 25 using namespace std;
23 26
24 namespace DmpMapping 27 namespace DmpMapping
@@ -47,10 +50,37 @@ namespace DmpMapping @@ -47,10 +50,37 @@ namespace DmpMapping
47 { 50 {
48 loadService(context, vectorMappingProjects_); 51 loadService(context, vectorMappingProjects_);
49 } 52 }
  53 + else if (boost::iequals(request, "editService"))
  54 + {
  55 + editService(context, vectorMappingProjects_);
  56 + }
50 else if (boost::iequals(request, "getmap")) 57 else if (boost::iequals(request, "getmap"))
51 { 58 {
52 - DmpWms::writeGetMap(context, params, nullptr); 59 + const std::string map = params.Map();
  60 + if(vectorMappingProjects_.find(map) != vectorMappingProjects_.end())
  61 + {
  62 + shared_ptr<DmpProject> project = vectorMappingProjects_.find(map)->second;
  63 + const DmpWms::DmpWmsParameters wmsParams(context.request()->serverParameters());
  64 + DmpWms::writeGetMap(context, wmsParams, project.get());
  65 + }
  66 + }
  67 + else if (boost::iequals(request,"gettypefacelist")) {
  68 + getTypefaceList(context);
  69 + }
  70 + else if (boost::iequals(request,"getimagetyplist")) {
  71 + getImageTypeList(context);
  72 + }
  73 + else if (boost::iequals(request,"getimagelist")) {
  74 + getImageList(context);
  75 + }
  76 + else if (boost::iequals(request,"getimage")) {
  77 + getImage(context);
53 } 78 }
54 } 79 }
  80 +
  81 +
  82 +
  83 +
  84 +
55 } 85 }
56 86
@@ -87,4 +87,11 @@ namespace DmpMapping @@ -87,4 +87,11 @@ namespace DmpMapping
87 return value; 87 return value;
88 } 88 }
89 89
  90 + std::string DmpMappingParameters::Map() const
  91 + {
  92 + std::string value = "";
  93 + GetStringParameter("MAP",value);
  94 + return value;
  95 + }
  96 +
90 } // namespace DmpWms 97 } // namespace DmpWms
@@ -23,6 +23,8 @@ namespace DmpMapping @@ -23,6 +23,8 @@ namespace DmpMapping
23 std::string Request() const; //必须 值为GetMap GetCapabilities GetFeatureInfo GetFeatureInfo GetLegendGraphic 23 std::string Request() const; //必须 值为GetMap GetCapabilities GetFeatureInfo GetFeatureInfo GetLegendGraphic
24 std::string Version() const; //必须 服务版本, 值为 1.0.0, 1.1.0, 1.1.1, 1.3 24 std::string Version() const; //必须 服务版本, 值为 1.0.0, 1.1.0, 1.1.1, 1.3
25 25
  26 + std::string Map() const;
  27 +
26 private: 28 private:
27 bool GetStringParameter(const char* key, std::string &value) const; 29 bool GetStringParameter(const char* key, std::string &value) const;
28 bool GetIntParameter(const char* key, int& value) const; 30 bool GetIntParameter(const char* key, int& value) const;
@@ -50,7 +50,7 @@ namespace DmpWms @@ -50,7 +50,7 @@ namespace DmpWms
50 { 50 {
51 writeGetMap(context,params, project); 51 writeGetMap(context,params, project);
52 } 52 }
53 - else if(boost::iequals(request,"thumbnail")) 53 + else if(boost::iequals(request,"thumbnail") || boost::iequals(request,"getthumbnail"))
54 { 54 {
55 writeThumbnail(context,params, project); 55 writeThumbnail(context,params, project);
56 } 56 }
@@ -125,6 +125,7 @@ namespace DmpWms @@ -125,6 +125,7 @@ namespace DmpWms
125 125
126 shared_ptr<Rect> rect (new Rect(maxy, maxx, miny, minx)); 126 shared_ptr<Rect> rect (new Rect(maxy, maxx, miny, minx));
127 mapRenderer.SetExtent(rect); 127 mapRenderer.SetExtent(rect);
  128 + mapRenderer.AddWmsMapLayers(project);
128 mapRenderer.GetMap(nullptr, nullptr, nullptr, true); 129 mapRenderer.GetMap(nullptr, nullptr, nullptr, true);
129 string responseData; 130 string responseData;
130 mapRenderer.ToStream(responseData); 131 mapRenderer.ToStream(responseData);
@@ -8,8 +8,6 @@ @@ -8,8 +8,6 @@
8 ***************************************************************************/ 8 ***************************************************************************/
9 #include "dmptmstileprovider.h" 9 #include "dmptmstileprovider.h"
10 #include "dmpserverresponse.h" 10 #include "dmpserverresponse.h"
11 -#include <math.h>  
12 -#include "dmplogger.h"  
13 namespace DmpTms 11 namespace DmpTms
14 { 12 {
15 DmpTmsTileProvider::DmpTmsTileProvider(const std::string& root_path) 13 DmpTmsTileProvider::DmpTmsTileProvider(const std::string& root_path)
@@ -45,104 +43,4 @@ namespace DmpTms @@ -45,104 +43,4 @@ namespace DmpTms
45 } 43 }
46 fread.close(); 44 fread.close();
47 } 45 }
48 - void DmpTmsTileProvider::GetTileThumbnail(DmpTileLayer* dmpTileLayer,DmpServerResponse& respons)  
49 - {  
50 - int tilematrix=0;  
51 - std::string tilePath=dmpTileLayer->getDataSource();  
52 -  
53 - //tilePath="/mnt/d/Code/tiles/qgis";  
54 - DmpRectangle rectangle=dmpTileLayer->extent();  
55 -  
56 - DmpPoint min=DmpPoint(rectangle.xmin(),rectangle.ymin());  
57 - DmpPoint max=DmpPoint(rectangle.xmax(),rectangle.ymax());  
58 - tilematrix=this->screenMatrixSet(min,max);  
59 - int xMinTile, yMinTile,xMaxTile,yMaxTile;  
60 - this->degToNum(tilematrix,min.x(),min.y(),xMinTile,yMinTile);  
61 - this->degToNum(tilematrix,max.x(),max.y(),xMaxTile,yMaxTile);  
62 - int heigth=abs(yMaxTile-yMinTile);  
63 - int width=abs(xMaxTile-xMinTile);  
64 -  
65 - cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 256*(width+1), 256*(heigth+1));  
66 - cairo_t *cr =cairo_create (surface);  
67 - for( int i = 0 ; i <= width ; i++ )  
68 - {  
69 - for(int j=0;j<=heigth;j++)  
70 - {  
71 - std::string filepath=tilePath+"/"+std::to_string(tilematrix)+"/"+std::to_string(xMinTile+i)+"/"+std::to_string(yMaxTile+j)+".png";  
72 - cairo_surface_t* image = cairo_image_surface_create_from_png( filepath.c_str());  
73 - this->BufferCopy(image,surface,cr,i*256,j*256);  
74 - //cairo_surface_write_to_png (surface, "./tms.png");  
75 - LOGGER_DEBUG(filepath);  
76 - }  
77 - }  
78 - //cairo_surface_write_to_png (surface, "./tms.png");  
79 - std::string responseData;  
80 - cairo_surface_write_to_png_stream(surface, cairo_write_func, &responseData);  
81 - respons.removeHeader("Content-Type");  
82 - respons.setHeader("Content-Type", "image/png");  
83 - respons.write(responseData);  
84 - cairo_destroy (cr);  
85 - cairo_surface_destroy (surface);  
86 - }  
87 - //经纬度到瓦片  
88 - void DmpTmsTileProvider::degToNum(int zoom, double lon_deg, double lat_deg,int& x,int& y)  
89 - {  
90 - double n = pow(2.0, zoom);  
91 - double xtile = n * ((lon_deg + 180) / 360);  
92 - //角度转弧度  
93 - double lat_rad = lat_deg * RAD2DEG;  
94 - double ytile = n * (1 - (log(tan(lat_rad) + (1 / cos(lat_rad))) / pi)) / 2;  
95 -  
96 - x = (int)floor(xtile);  
97 - y = (int)floor(ytile);  
98 - }  
99 - //瓦片到经纬度  
100 - // double* DmpTmsTileProvider::numToDeg(int zoom, int xtile, int ytile)  
101 - // {  
102 - // double n = pow(2.0, zoom);  
103 - // double lon_deg = double(xtile) / n * 360.0 - 180.0;  
104 - // double lat_rad = atan(sinh(pi * (1 - 2 * ytile / n)));  
105 - // double lat_deg = lat_rad * 180.0 / pi;  
106 - // double lonlat[2] = {};  
107 - // lonlat[0] = lon_deg;  
108 - // lonlat[1] = lat_deg;  
109 - // return lonlat;  
110 - // }  
111 - bool DmpTmsTileProvider::BufferCopy(cairo_surface_t *pClsCSFrom, cairo_surface_t *pClsCSTo, cairo_t *cr,int x,int y)  
112 - {  
113 - if (pClsCSFrom == NULL||pClsCSTo == NULL)  
114 - {  
115 - return false;  
116 - }  
117 - if(cr==NULL)  
118 - {  
119 - cr = cairo_create (pClsCSTo);  
120 - }  
121 - cairo_set_source_surface(cr, pClsCSFrom, x, y);  
122 - cairo_paint(cr);  
123 - return true;  
124 - }  
125 - cairo_status_t DmpTmsTileProvider::cairo_write_func(void *pbuff, const unsigned char *data, unsigned int length)  
126 - {  
127 - std::string *responseData = (std::string *)pbuff;  
128 - responseData->append((char *)data, length);  
129 - return CAIRO_STATUS_SUCCESS;  
130 - }  
131 - int DmpTmsTileProvider::screenMatrixSet(DmpPoint min,DmpPoint max)  
132 - {  
133 - int iMatrixSet=4;  
134 - for( ; iMatrixSet<=20 ; iMatrixSet++ )  
135 - {  
136 - int xMinTile, yMinTile,xMaxTile,yMaxTile;  
137 - this->degToNum(iMatrixSet,min.x(),min.y(),xMinTile,yMinTile);  
138 - this->degToNum(iMatrixSet,max.x(),max.y(),xMaxTile,yMaxTile);  
139 - int heigth=abs(yMaxTile-yMinTile);  
140 - int width=abs(xMaxTile-xMinTile);  
141 - if((heigth+1)*(width+1)<9 && (heigth+2)*(width+2)>10)  
142 - {  
143 - break;  
144 - }  
145 - }  
146 - return iMatrixSet;  
147 - }  
148 } 46 }
注册登录 后发表评论