|
@@ -6,36 +6,40 @@ |
|
@@ -6,36 +6,40 @@ |
6
|
* Email: qingxiongf@chinadci.com
|
6
|
* Email: qingxiongf@chinadci.com
|
7
|
* copyright: 广州城市信息研究所有限公司
|
7
|
* copyright: 广州城市信息研究所有限公司
|
8
|
***************************************************************************/
|
8
|
***************************************************************************/
|
|
|
9
|
+#include <boost/property_tree/ptree.hpp>
|
|
|
10
|
+#include <boost/property_tree/xml_parser.hpp>
|
|
|
11
|
+#include <boost/typeof/typeof.hpp>
|
9
|
#include "dmpwmsrenderer.h"
|
12
|
#include "dmpwmsrenderer.h"
|
|
|
13
|
+#include "dmpmapserverutil.h"
|
10
|
#include <sstream>
|
14
|
#include <sstream>
|
11
|
#include <stdarg.h>
|
15
|
#include <stdarg.h>
|
12
|
#include <set>
|
16
|
#include <set>
|
13
|
#include <png.h>
|
17
|
#include <png.h>
|
14
|
#include <math.h>
|
18
|
#include <math.h>
|
|
|
19
|
+
|
15
|
namespace DmpWms
|
20
|
namespace DmpWms
|
16
|
{
|
21
|
{
|
17
|
static cairo_status_t cairo_write_func(void *pbuff, const unsigned char *data, unsigned int length)
|
22
|
static cairo_status_t cairo_write_func(void *pbuff, const unsigned char *data, unsigned int length)
|
18
|
{
|
23
|
{
|
19
|
- std::string* responseData = (std::string*)pbuff;
|
|
|
20
|
- responseData->append((char*)data,length);
|
24
|
+ std::string *responseData = (std::string *)pbuff;
|
|
|
25
|
+ responseData->append((char *)data, length);
|
21
|
return CAIRO_STATUS_SUCCESS;
|
26
|
return CAIRO_STATUS_SUCCESS;
|
22
|
}
|
27
|
}
|
23
|
|
28
|
|
24
|
static void png_write_data_to_buffer(png_structp png_ptr, png_bytep data, png_size_t length)
|
29
|
static void png_write_data_to_buffer(png_structp png_ptr, png_bytep data, png_size_t length)
|
25
|
{
|
30
|
{
|
26
|
-
|
|
|
27
|
- std::string* responseData = (std::string*)png_get_io_ptr(png_ptr);
|
|
|
28
|
- responseData->append((char*)data,length);
|
31
|
+
|
|
|
32
|
+ std::string *responseData = (std::string *)png_get_io_ptr(png_ptr);
|
|
|
33
|
+ responseData->append((char *)data, length);
|
29
|
}
|
34
|
}
|
30
|
|
35
|
|
31
|
static void png_flush_data(png_structp png_ptr)
|
36
|
static void png_flush_data(png_structp png_ptr)
|
32
|
- {
|
|
|
33
|
-
|
|
|
34
|
- }
|
37
|
+ {
|
|
|
38
|
+ }
|
35
|
|
39
|
|
36
|
- DmpWmsRenderer::DmpWmsRenderer(double height, double width)
|
|
|
37
|
- {
|
|
|
38
|
- rasterBufferObj* rb = (rasterBufferObj*)malloc(sizeof(rasterBufferObj));
|
40
|
+ DmpWmsRenderer::DmpWmsRenderer(double height, double width)
|
|
|
41
|
+ {
|
|
|
42
|
+ rasterBufferObj *rb = (rasterBufferObj *)malloc(sizeof(rasterBufferObj));
|
39
|
initializeRasterBufferCairo(rb, width, height);
|
43
|
initializeRasterBufferCairo(rb, width, height);
|
40
|
|
44
|
|
41
|
pRasterBufferObj = rb;
|
45
|
pRasterBufferObj = rb;
|
|
@@ -47,9 +51,9 @@ namespace DmpWms |
|
@@ -47,9 +51,9 @@ namespace DmpWms |
47
|
m_vLayers = {};
|
51
|
m_vLayers = {};
|
48
|
m_WMSServers = {};
|
52
|
m_WMSServers = {};
|
49
|
m_iN = 1;
|
53
|
m_iN = 1;
|
50
|
- m_iBackColor = 0xffffffff; //背景默认白色
|
|
|
51
|
- cairo_surface_t *surface = cairo_image_surface_create_for_data(rb->data.rgba.pixels,
|
|
|
52
|
- CAIRO_FORMAT_ARGB32, (int)m_dWidth, (int)m_dHeight,rb->data.rgba.row_step); //cairo_win32_surface_create(hdc);
|
54
|
+ m_iBackColor = 0xffffffff; //背景默认白色
|
|
|
55
|
+ cairo_surface_t *surface = cairo_image_surface_create_for_data(rb->data.rgba.pixels,
|
|
|
56
|
+ CAIRO_FORMAT_ARGB32, (int)m_dWidth, (int)m_dHeight, rb->data.rgba.row_step); //cairo_win32_surface_create(hdc);
|
53
|
m_pClsSurfDC = new clsCrSurf(surface);
|
57
|
m_pClsSurfDC = new clsCrSurf(surface);
|
54
|
cairo_surface_t *surfaceBuffer = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, (int)m_dWidth, (int)m_dHeight);
|
58
|
cairo_surface_t *surfaceBuffer = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, (int)m_dWidth, (int)m_dHeight);
|
55
|
m_pClsSurfBuff = new clsCrSurf(surfaceBuffer);
|
59
|
m_pClsSurfBuff = new clsCrSurf(surfaceBuffer);
|
|
@@ -57,33 +61,33 @@ namespace DmpWms |
|
@@ -57,33 +61,33 @@ namespace DmpWms |
57
|
m_pClsMaxSurfBuffer = new clsCrSurf(maxSurfaceBuffer);
|
61
|
m_pClsMaxSurfBuffer = new clsCrSurf(maxSurfaceBuffer);
|
58
|
|
62
|
|
59
|
m_pExtent = shared_ptr<Rect>(new Rect(0, 0, 0, 0));
|
63
|
m_pExtent = shared_ptr<Rect>(new Rect(0, 0, 0, 0));
|
60
|
- }
|
|
|
61
|
-
|
|
|
62
|
- int DmpWmsRenderer::initializeRasterBufferCairo(rasterBufferObj *rb, int width, int height)
|
|
|
63
|
- {
|
|
|
64
|
- rb->type = MS_BUFFER_BYTE_RGBA;
|
|
|
65
|
- rb->width = width;
|
|
|
66
|
- rb->height = height;
|
|
|
67
|
- rb->data.rgba.pixel_step = 4;
|
|
|
68
|
- rb->data.rgba.row_step = width * 4;
|
|
|
69
|
- rb->data.rgba.pixels = (unsigned char*)calloc(width*height*4,sizeof(unsigned char));
|
|
|
70
|
- rb->data.rgba.r = &(rb->data.rgba.pixels[2]);
|
|
|
71
|
- rb->data.rgba.g = &(rb->data.rgba.pixels[1]);
|
|
|
72
|
- rb->data.rgba.b = &(rb->data.rgba.pixels[0]);
|
|
|
73
|
- rb->data.rgba.a = &(rb->data.rgba.pixels[3]);
|
|
|
74
|
- return MS_SUCCESS;
|
|
|
75
|
- }
|
64
|
+ }
|
|
|
65
|
+
|
|
|
66
|
+ int DmpWmsRenderer::initializeRasterBufferCairo(rasterBufferObj *rb, int width, int height)
|
|
|
67
|
+ {
|
|
|
68
|
+ rb->type = MS_BUFFER_BYTE_RGBA;
|
|
|
69
|
+ rb->width = width;
|
|
|
70
|
+ rb->height = height;
|
|
|
71
|
+ rb->data.rgba.pixel_step = 4;
|
|
|
72
|
+ rb->data.rgba.row_step = width * 4;
|
|
|
73
|
+ rb->data.rgba.pixels = (unsigned char *)calloc(width * height * 4, sizeof(unsigned char));
|
|
|
74
|
+ rb->data.rgba.r = &(rb->data.rgba.pixels[2]);
|
|
|
75
|
+ rb->data.rgba.g = &(rb->data.rgba.pixels[1]);
|
|
|
76
|
+ rb->data.rgba.b = &(rb->data.rgba.pixels[0]);
|
|
|
77
|
+ rb->data.rgba.a = &(rb->data.rgba.pixels[3]);
|
|
|
78
|
+ return MS_SUCCESS;
|
|
|
79
|
+ }
|
76
|
|
80
|
|
77
|
DmpWmsRenderer::~DmpWmsRenderer()
|
81
|
DmpWmsRenderer::~DmpWmsRenderer()
|
78
|
{
|
82
|
{
|
79
|
m_vLayers.clear();
|
83
|
m_vLayers.clear();
|
80
|
- if(this->pRasterBufferObj)
|
84
|
+ if (this->pRasterBufferObj)
|
81
|
{
|
85
|
{
|
82
|
cairo_surface_finish(m_pClsSurfDC->m_pSurf);
|
86
|
cairo_surface_finish(m_pClsSurfDC->m_pSurf);
|
83
|
- if( this->pRasterBufferObj->data.rgba.pixels)
|
87
|
+ if (this->pRasterBufferObj->data.rgba.pixels)
|
84
|
{
|
88
|
{
|
85
|
free(this->pRasterBufferObj->data.rgba.pixels);
|
89
|
free(this->pRasterBufferObj->data.rgba.pixels);
|
86
|
- this->pRasterBufferObj->data.rgba.pixels = nullptr;
|
90
|
+ this->pRasterBufferObj->data.rgba.pixels = nullptr;
|
87
|
}
|
91
|
}
|
88
|
free(this->pRasterBufferObj);
|
92
|
free(this->pRasterBufferObj);
|
89
|
this->pRasterBufferObj = nullptr;
|
93
|
this->pRasterBufferObj = nullptr;
|
|
@@ -107,7 +111,7 @@ namespace DmpWms |
|
@@ -107,7 +111,7 @@ namespace DmpWms |
107
|
}
|
111
|
}
|
108
|
}
|
112
|
}
|
109
|
|
113
|
|
110
|
- std::string DmpWmsRenderer::format(const char *fmt, ...)
|
114
|
+ std::string DmpWmsRenderer::format(const char *fmt, ...)
|
111
|
{
|
115
|
{
|
112
|
va_list argptr;
|
116
|
va_list argptr;
|
113
|
int cnt;
|
117
|
int cnt;
|
|
@@ -121,9 +125,7 @@ namespace DmpWms |
|
@@ -121,9 +125,7 @@ namespace DmpWms |
121
|
return buffer;
|
125
|
return buffer;
|
122
|
}
|
126
|
}
|
123
|
|
127
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
- string DmpWmsRenderer::GetDrawSQL(DmpVectorLayer* layer, Rect *pRect, const char *layerdef)
|
128
|
+ string DmpWmsRenderer::GetDrawSQL(DmpVectorLayer *layer, Rect *pRect, const char *layerdef)
|
127
|
{
|
129
|
{
|
128
|
if (layer == 0 || layer->geom().size() == 0)
|
130
|
if (layer == 0 || layer->geom().size() == 0)
|
129
|
return "";
|
131
|
return "";
|
|
@@ -131,7 +133,7 @@ namespace DmpWms |
|
@@ -131,7 +133,7 @@ namespace DmpWms |
131
|
//char sql[6000];
|
133
|
//char sql[6000];
|
132
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
134
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
133
|
|
135
|
|
134
|
- shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
136
|
+ shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
135
|
|
137
|
|
136
|
// int renType = renderer->RendererType();
|
138
|
// int renType = renderer->RendererType();
|
137
|
vector<string> vFieldName;
|
139
|
vector<string> vFieldName;
|
|
@@ -166,18 +168,16 @@ namespace DmpWms |
|
@@ -166,18 +168,16 @@ namespace DmpWms |
166
|
ss += " and ";
|
168
|
ss += " and ";
|
167
|
ss += layerdef;
|
169
|
ss += layerdef;
|
168
|
}
|
170
|
}
|
169
|
- ss += format(" limit %d ",MAXCOUNT);
|
171
|
+ ss += format(" limit %d ", MAXCOUNT);
|
170
|
//ss += " limit 40000 ";
|
172
|
//ss += " limit 40000 ";
|
171
|
|
173
|
|
172
|
double t = pRect->m_dTop, r = pRect->m_dRight, b = pRect->m_dBottom, l = pRect->m_dLeft;
|
174
|
double t = pRect->m_dTop, r = pRect->m_dRight, b = pRect->m_dBottom, l = pRect->m_dLeft;
|
173
|
std::string sql = format(ss.c_str(), shapeName.c_str(), layer->schema().c_str(), tableName.c_str(), shapeName.c_str(), l, b, r, t);
|
175
|
std::string sql = format(ss.c_str(), shapeName.c_str(), layer->schema().c_str(), tableName.c_str(), shapeName.c_str(), l, b, r, t);
|
174
|
- //printf("%s\r\n",sql.c_str());
|
176
|
+ //printf("%s\r\n",sql.c_str());
|
175
|
return sql;
|
177
|
return sql;
|
176
|
}
|
178
|
}
|
177
|
|
179
|
|
178
|
-
|
|
|
179
|
-
|
|
|
180
|
- string DmpWmsRenderer::GetRegionQuerySQL(DmpVectorLayer* layer,Rect *pRect,string srid, const char *regionDef,const char *layerdef)
|
180
|
+ string DmpWmsRenderer::GetRegionQuerySQL(DmpVectorLayer *layer, Rect *pRect, string srid, const char *regionDef, const char *layerdef)
|
181
|
{
|
181
|
{
|
182
|
if (layer == 0 || layer->geom().size() == 0)
|
182
|
if (layer == 0 || layer->geom().size() == 0)
|
183
|
return "";
|
183
|
return "";
|
|
@@ -186,69 +186,65 @@ namespace DmpWms |
|
@@ -186,69 +186,65 @@ namespace DmpWms |
186
|
if (pPgsqlConn != nullptr)
|
186
|
if (pPgsqlConn != nullptr)
|
187
|
{
|
187
|
{
|
188
|
double t = pRect->m_dTop, r = pRect->m_dRight, b = pRect->m_dBottom, l = pRect->m_dLeft;
|
188
|
double t = pRect->m_dTop, r = pRect->m_dRight, b = pRect->m_dBottom, l = pRect->m_dLeft;
|
189
|
- // if(pPgsqlConn->ExecWait(sql.c_str()) && pPgsqlConn->next())
|
|
|
190
|
- {
|
|
|
191
|
- // const char * polygon = pPgsqlConn->getString(0);
|
|
|
192
|
- string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
189
|
+ // if(pPgsqlConn->ExecWait(sql.c_str()) && pPgsqlConn->next())
|
|
|
190
|
+ {
|
|
|
191
|
+ // const char * polygon = pPgsqlConn->getString(0);
|
|
|
192
|
+ string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
193
|
|
193
|
|
194
|
- shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
194
|
+ shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
195
|
|
195
|
|
196
|
- // int renType = renderer->RendererType();
|
|
|
197
|
- vector<string> vFieldName;
|
|
|
198
|
- renderer->TryAddField(vFieldName);
|
196
|
+ // int renType = renderer->RendererType();
|
|
|
197
|
+ vector<string> vFieldName;
|
|
|
198
|
+ renderer->TryAddField(vFieldName);
|
199
|
|
199
|
|
200
|
- int length = (int)(vFieldName.size());
|
|
|
201
|
- for (int i = 0; i < length; i++)
|
|
|
202
|
- {
|
|
|
203
|
- string filename = vFieldName[i];
|
|
|
204
|
- ss += ",\"" + (filename) + "\"::varchar ";
|
|
|
205
|
- }
|
200
|
+ int length = (int)(vFieldName.size());
|
|
|
201
|
+ for (int i = 0; i < length; i++)
|
|
|
202
|
+ {
|
|
|
203
|
+ string filename = vFieldName[i];
|
|
|
204
|
+ ss += ",\"" + (filename) + "\"::varchar ";
|
|
|
205
|
+ }
|
206
|
|
206
|
|
207
|
- string tableName = layer->name(); //layer->name();
|
|
|
208
|
- string shapeName = layer->geom();
|
|
|
209
|
- shared_ptr<DmpVectorThinLayer> pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR);
|
207
|
+ string tableName = layer->name(); //layer->name();
|
|
|
208
|
+ string shapeName = layer->geom();
|
|
|
209
|
+ shared_ptr<DmpVectorThinLayer> pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR);
|
210
|
|
210
|
|
211
|
- if (pVectorThinLayer != nullptr)
|
|
|
212
|
- {
|
|
|
213
|
- tableName = pVectorThinLayer->tableName();
|
|
|
214
|
- }
|
211
|
+ if (pVectorThinLayer != nullptr)
|
|
|
212
|
+ {
|
|
|
213
|
+ tableName = pVectorThinLayer->tableName();
|
|
|
214
|
+ }
|
215
|
|
215
|
|
216
|
- ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName
|
|
|
217
|
- ss += " WHERE ST_Intersects( (select (ST_Intersection(ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),'%s'::Geometry)) ),\"%s\" )";
|
|
|
218
|
- if (layer->wherestr().length() > 0)
|
|
|
219
|
- {
|
|
|
220
|
- ss += " and ";
|
|
|
221
|
- ss += layer->wherestr();
|
|
|
222
|
- }
|
216
|
+ ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName
|
|
|
217
|
+ ss += " WHERE ST_Intersects( (select (ST_Intersection(ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),'%s'::Geometry)) ),\"%s\" )";
|
|
|
218
|
+ if (layer->wherestr().length() > 0)
|
|
|
219
|
+ {
|
|
|
220
|
+ ss += " and ";
|
|
|
221
|
+ ss += layer->wherestr();
|
|
|
222
|
+ }
|
223
|
|
223
|
|
224
|
if (layerdef != nullptr && strcmp(layerdef, "") != 0)
|
224
|
if (layerdef != nullptr && strcmp(layerdef, "") != 0)
|
225
|
{
|
225
|
{
|
226
|
ss += " and ";
|
226
|
ss += " and ";
|
227
|
ss += layerdef;
|
227
|
ss += layerdef;
|
228
|
}
|
228
|
}
|
229
|
- ss += format(" limit %d ",MAXCOUNT);
|
|
|
230
|
- // ss += " limit 40000 ";
|
229
|
+ ss += format(" limit %d ", MAXCOUNT);
|
|
|
230
|
+ // ss += " limit 40000 ";
|
231
|
//size_t size = strlen(regionDef);
|
231
|
//size_t size = strlen(regionDef);
|
232
|
std::string sql1 = format(ss.c_str(), shapeName.c_str(), layer->schema().c_str(),
|
232
|
std::string sql1 = format(ss.c_str(), shapeName.c_str(), layer->schema().c_str(),
|
233
|
- tableName.c_str(),l,t, r,t, r, b, l, b ,l, t,srid.c_str(), regionDef,shapeName.c_str() );
|
|
|
234
|
-
|
|
|
235
|
- // printf("%s\r\n",sql1.c_str());
|
233
|
+ tableName.c_str(), l, t, r, t, r, b, l, b, l, t, srid.c_str(), regionDef, shapeName.c_str());
|
236
|
|
234
|
|
237
|
- return sql1;
|
|
|
238
|
- }
|
|
|
239
|
- // else
|
|
|
240
|
- {
|
|
|
241
|
- return "";
|
|
|
242
|
- }
|
235
|
+ // printf("%s\r\n",sql1.c_str());
|
243
|
|
236
|
|
244
|
-
|
237
|
+ return sql1;
|
|
|
238
|
+ }
|
|
|
239
|
+ // else
|
|
|
240
|
+ {
|
|
|
241
|
+ return "";
|
|
|
242
|
+ }
|
245
|
}
|
243
|
}
|
246
|
return "";
|
244
|
return "";
|
247
|
}
|
245
|
}
|
248
|
|
246
|
|
249
|
-
|
|
|
250
|
-
|
|
|
251
|
- string DmpWmsRenderer::GetRegionQuerySQL(DmpVectorLayer* layer,Rect *pRect,string srid, const string ®ionLayerName,const string ®ionDef,const char *layerdef)
|
247
|
+ string DmpWmsRenderer::GetRegionQuerySQL(DmpVectorLayer *layer, Rect *pRect, string srid, const string ®ionLayerName, const string ®ionDef, const char *layerdef)
|
252
|
{
|
248
|
{
|
253
|
if (layer == 0 || layer->geom().size() == 0)
|
249
|
if (layer == 0 || layer->geom().size() == 0)
|
254
|
return "";
|
250
|
return "";
|
|
@@ -258,62 +254,59 @@ namespace DmpWms |
|
@@ -258,62 +254,59 @@ namespace DmpWms |
258
|
{
|
254
|
{
|
259
|
double t = pRect->m_dTop, r = pRect->m_dRight, b = pRect->m_dBottom, l = pRect->m_dLeft;
|
255
|
double t = pRect->m_dTop, r = pRect->m_dRight, b = pRect->m_dBottom, l = pRect->m_dLeft;
|
260
|
size_t pos = regionDef.find("not in");
|
256
|
size_t pos = regionDef.find("not in");
|
261
|
- if(pos == string::npos)
|
257
|
+ if (pos == string::npos)
|
262
|
{
|
258
|
{
|
263
|
- sql = format( "select ST_Intersection( \
|
259
|
+ sql = format("select ST_Intersection( \
|
264
|
ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
|
260
|
ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
|
265
|
(select st_union(geom) from \"%s\" where %s))",
|
261
|
(select st_union(geom) from \"%s\" where %s))",
|
266
|
- l,t, r,t, r, b, l, b ,l, t, srid.c_str(),regionLayerName.c_str(),regionDef.c_str());
|
262
|
+ l, t, r, t, r, b, l, b, l, t, srid.c_str(), regionLayerName.c_str(), regionDef.c_str());
|
267
|
}
|
263
|
}
|
268
|
else
|
264
|
else
|
269
|
{
|
265
|
{
|
270
|
string field = regionDef.substr(0, pos);
|
266
|
string field = regionDef.substr(0, pos);
|
271
|
- string exp = regionDef.substr(pos+6);
|
|
|
272
|
- sql = format( "select (ST_Difference( \
|
267
|
+ string exp = regionDef.substr(pos + 6);
|
|
|
268
|
+ sql = format("select (ST_Difference( \
|
273
|
ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
|
269
|
ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\
|
274
|
(select st_union(geom) from \"%s\" where %s in %s)))",
|
270
|
(select st_union(geom) from \"%s\" where %s in %s)))",
|
275
|
- l,t, r,t, r, b, l, b ,l, t, srid.c_str(), regionLayerName.c_str(),field.c_str(),exp.c_str());
|
271
|
+ l, t, r, t, r, b, l, b, l, t, srid.c_str(), regionLayerName.c_str(), field.c_str(), exp.c_str());
|
276
|
|
272
|
|
277
|
//regionDef = StringHelp::
|
273
|
//regionDef = StringHelp::
|
278
|
}
|
274
|
}
|
279
|
|
275
|
|
280
|
-
|
|
|
281
|
-
|
|
|
282
|
-
|
|
|
283
|
- // if(pPgsqlConn->ExecWait(sql.c_str()) && pPgsqlConn->next())
|
|
|
284
|
- {
|
|
|
285
|
- // const char * polygon = pPgsqlConn->getString(0);
|
|
|
286
|
- string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
276
|
+ // if(pPgsqlConn->ExecWait(sql.c_str()) && pPgsqlConn->next())
|
|
|
277
|
+ {
|
|
|
278
|
+ // const char * polygon = pPgsqlConn->getString(0);
|
|
|
279
|
+ string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
287
|
|
280
|
|
288
|
- shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
281
|
+ shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
289
|
|
282
|
|
290
|
- // int renType = renderer->RendererType();
|
|
|
291
|
- vector<string> vFieldName;
|
|
|
292
|
- renderer->TryAddField(vFieldName);
|
283
|
+ // int renType = renderer->RendererType();
|
|
|
284
|
+ vector<string> vFieldName;
|
|
|
285
|
+ renderer->TryAddField(vFieldName);
|
293
|
|
286
|
|
294
|
- int length = (int)(vFieldName.size());
|
|
|
295
|
- for (int i = 0; i < length; i++)
|
|
|
296
|
- {
|
|
|
297
|
- string filename = vFieldName[i];
|
|
|
298
|
- ss += ",\"" + (filename) + "\"::varchar ";
|
|
|
299
|
- }
|
287
|
+ int length = (int)(vFieldName.size());
|
|
|
288
|
+ for (int i = 0; i < length; i++)
|
|
|
289
|
+ {
|
|
|
290
|
+ string filename = vFieldName[i];
|
|
|
291
|
+ ss += ",\"" + (filename) + "\"::varchar ";
|
|
|
292
|
+ }
|
300
|
|
293
|
|
301
|
- string tableName = layer->name(); //layer->name();
|
|
|
302
|
- string shapeName = layer->geom();
|
|
|
303
|
- shared_ptr<DmpVectorThinLayer> pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR);
|
294
|
+ string tableName = layer->name(); //layer->name();
|
|
|
295
|
+ string shapeName = layer->geom();
|
|
|
296
|
+ shared_ptr<DmpVectorThinLayer> pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR);
|
304
|
|
297
|
|
305
|
- if (pVectorThinLayer != nullptr)
|
|
|
306
|
- {
|
|
|
307
|
- tableName = pVectorThinLayer->tableName();
|
|
|
308
|
- }
|
298
|
+ if (pVectorThinLayer != nullptr)
|
|
|
299
|
+ {
|
|
|
300
|
+ tableName = pVectorThinLayer->tableName();
|
|
|
301
|
+ }
|
309
|
|
302
|
|
310
|
- ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName
|
|
|
311
|
- ss += " WHERE \"%s\" && \'BOX3D(%lf %lf,%lf %lf)\'::box3d and ST_Intersects( (%s),\"%s\" )"; //'%s'::Geometry
|
|
|
312
|
- if (layer->wherestr().length() > 0)
|
|
|
313
|
- {
|
|
|
314
|
- ss += " and ";
|
|
|
315
|
- ss += layer->wherestr();
|
|
|
316
|
- }
|
303
|
+ ss += " FROM \"%s\".\"%s\" "; // 这个 %s 是tableName
|
|
|
304
|
+ ss += " WHERE \"%s\" && \'BOX3D(%lf %lf,%lf %lf)\'::box3d and ST_Intersects( (%s),\"%s\" )"; //'%s'::Geometry
|
|
|
305
|
+ if (layer->wherestr().length() > 0)
|
|
|
306
|
+ {
|
|
|
307
|
+ ss += " and ";
|
|
|
308
|
+ ss += layer->wherestr();
|
|
|
309
|
+ }
|
317
|
|
310
|
|
318
|
if (layerdef != nullptr && strcmp(layerdef, "") != 0)
|
311
|
if (layerdef != nullptr && strcmp(layerdef, "") != 0)
|
319
|
{
|
312
|
{
|
|
@@ -321,27 +314,24 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -321,27 +314,24 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
321
|
ss += layerdef;
|
314
|
ss += layerdef;
|
322
|
}
|
315
|
}
|
323
|
|
316
|
|
324
|
- ss += format(" limit %d ",MAXCOUNT);
|
317
|
+ ss += format(" limit %d ", MAXCOUNT);
|
325
|
|
318
|
|
326
|
std::string sql1 = format(ss.c_str(), shapeName.c_str(), layer->schema().c_str(),
|
319
|
std::string sql1 = format(ss.c_str(), shapeName.c_str(), layer->schema().c_str(),
|
327
|
- tableName.c_str(), shapeName.c_str(), l, b, r, t, sql.c_str(),shapeName.c_str() );
|
320
|
+ tableName.c_str(), shapeName.c_str(), l, b, r, t, sql.c_str(), shapeName.c_str());
|
328
|
|
321
|
|
329
|
//printf("%s\r\n",sql1.c_str());
|
322
|
//printf("%s\r\n",sql1.c_str());
|
330
|
|
323
|
|
331
|
- return sql1;
|
|
|
332
|
- }
|
|
|
333
|
- //else
|
|
|
334
|
- {
|
|
|
335
|
- return "";
|
|
|
336
|
- }
|
|
|
337
|
-
|
|
|
338
|
-
|
324
|
+ return sql1;
|
|
|
325
|
+ }
|
|
|
326
|
+ //else
|
|
|
327
|
+ {
|
|
|
328
|
+ return "";
|
|
|
329
|
+ }
|
339
|
}
|
330
|
}
|
340
|
- return "";
|
331
|
+ return "";
|
341
|
}
|
332
|
}
|
342
|
-
|
|
|
343
|
|
333
|
|
344
|
- string DmpWmsRenderer::GetDrawSQLAll_Catch(DmpVectorLayer* layer, shared_ptr<DmpVectorThinLayer> pVectorThinLayer)
|
334
|
+ string DmpWmsRenderer::GetDrawSQLAll_Catch(DmpVectorLayer *layer, shared_ptr<DmpVectorThinLayer> pVectorThinLayer)
|
345
|
{
|
335
|
{
|
346
|
if (layer == 0 || layer->geom().size() == 0)
|
336
|
if (layer == 0 || layer->geom().size() == 0)
|
347
|
return "";
|
337
|
return "";
|
|
@@ -349,7 +339,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -349,7 +339,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
349
|
//char sql[6000];
|
339
|
//char sql[6000];
|
350
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
340
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
351
|
|
341
|
|
352
|
- shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
342
|
+ shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
353
|
|
343
|
|
354
|
// int renType = renderer->RendererType();
|
344
|
// int renType = renderer->RendererType();
|
355
|
vector<string> vFieldName;
|
345
|
vector<string> vFieldName;
|
|
@@ -383,15 +373,15 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -383,15 +373,15 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
383
|
return sql;
|
373
|
return sql;
|
384
|
}
|
374
|
}
|
385
|
|
375
|
|
386
|
- string DmpWmsRenderer::GetDrawSQLAll(DmpVectorLayer* layer)
|
376
|
+ string DmpWmsRenderer::GetDrawSQLAll(DmpVectorLayer *layer)
|
387
|
{
|
377
|
{
|
388
|
- if (layer == 0 || layer->geom().size() == 0)
|
378
|
+ if (layer == 0 || layer->geom().size() == 0)
|
389
|
return "";
|
379
|
return "";
|
390
|
|
380
|
|
391
|
//char sql[6000];
|
381
|
//char sql[6000];
|
392
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
382
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
393
|
|
383
|
|
394
|
- shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
384
|
+ shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
395
|
|
385
|
|
396
|
// int renType = renderer->RendererType();
|
386
|
// int renType = renderer->RendererType();
|
397
|
vector<string> vFieldName;
|
387
|
vector<string> vFieldName;
|
|
@@ -421,15 +411,15 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -421,15 +411,15 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
421
|
return sql;
|
411
|
return sql;
|
422
|
}
|
412
|
}
|
423
|
|
413
|
|
424
|
- string DmpWmsRenderer::GetDrawSQLAllOrderby(DmpVectorLayer* layer)
|
414
|
+ string DmpWmsRenderer::GetDrawSQLAllOrderby(DmpVectorLayer *layer)
|
425
|
{
|
415
|
{
|
426
|
- if (layer == 0 || layer->geom().size() == 0)
|
416
|
+ if (layer == 0 || layer->geom().size() == 0)
|
427
|
return "";
|
417
|
return "";
|
428
|
|
418
|
|
429
|
//char sql[6000];
|
419
|
//char sql[6000];
|
430
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
420
|
string ss = "SELECT \"%s\" "; //这个 %s 是表示 shape 字段
|
431
|
|
421
|
|
432
|
- shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
422
|
+ shared_ptr<Renderer> renderer = layer->GetRenderer30();
|
433
|
|
423
|
|
434
|
// int renType = renderer->RendererType();
|
424
|
// int renType = renderer->RendererType();
|
435
|
vector<string> vFieldName;
|
425
|
vector<string> vFieldName;
|
|
@@ -451,7 +441,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -451,7 +441,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
451
|
ss += layer->wherestr();
|
441
|
ss += layer->wherestr();
|
452
|
}
|
442
|
}
|
453
|
|
443
|
|
454
|
- ss += format(" limit %d ",MAXCOUNT);
|
444
|
+ ss += format(" limit %d ", MAXCOUNT);
|
455
|
|
445
|
|
456
|
string tableName = layer->name();
|
446
|
string tableName = layer->name();
|
457
|
string shapeName = layer->geom();
|
447
|
string shapeName = layer->geom();
|
|
@@ -461,9 +451,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -461,9 +451,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
461
|
return sql;
|
451
|
return sql;
|
462
|
}
|
452
|
}
|
463
|
|
453
|
|
464
|
- string DmpWmsRenderer::GetCountSQL(DmpVectorLayer* layer)
|
454
|
+ string DmpWmsRenderer::GetCountSQL(DmpVectorLayer *layer)
|
465
|
{
|
455
|
{
|
466
|
- if (layer == 0 || layer->geom().size() == 0)
|
456
|
+ if (layer == 0 || layer->geom().size() == 0)
|
467
|
return "";
|
457
|
return "";
|
468
|
|
458
|
|
469
|
//char sql[6000];
|
459
|
//char sql[6000];
|
|
@@ -488,13 +478,11 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -488,13 +478,11 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
488
|
return sql;
|
478
|
return sql;
|
489
|
}
|
479
|
}
|
490
|
|
480
|
|
491
|
- string DmpWmsRenderer::GetFeatureInfoSQL(DmpVectorLayer* layer, double x, double y, double dis,int feature_count)
|
481
|
+ string DmpWmsRenderer::GetFeatureInfoSQL(DmpVectorLayer *layer, double x, double y, double dis, int feature_count)
|
492
|
{
|
482
|
{
|
493
|
if (layer == 0 || layer->geom().size() == 0)
|
483
|
if (layer == 0 || layer->geom().size() == 0)
|
494
|
return "";
|
484
|
return "";
|
495
|
|
485
|
|
496
|
-
|
|
|
497
|
-
|
|
|
498
|
string ss = "SELECT "; //这个 %s 是表示 shape 字段
|
486
|
string ss = "SELECT "; //这个 %s 是表示 shape 字段
|
499
|
|
487
|
|
500
|
string fields_str = "";
|
488
|
string fields_str = "";
|
|
@@ -504,9 +492,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -504,9 +492,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
504
|
{
|
492
|
{
|
505
|
|
493
|
|
506
|
char tablesql_buff[300];
|
494
|
char tablesql_buff[300];
|
507
|
- sprintf(tablesql_buff, "select column_name,data_type from information_schema.columns where table_schema = '%s' and table_name = '%s'",
|
|
|
508
|
- layer->schema().c_str(),
|
|
|
509
|
- layer->name().c_str());
|
495
|
+ std::sprintf(tablesql_buff, "select column_name,data_type from information_schema.columns where table_schema = '%s' and table_name = '%s'",
|
|
|
496
|
+ layer->schema().c_str(),
|
|
|
497
|
+ layer->name().c_str());
|
510
|
|
498
|
|
511
|
int returnResult = pPgsqlConn->ExecWait(tablesql_buff);
|
499
|
int returnResult = pPgsqlConn->ExecWait(tablesql_buff);
|
512
|
if (!returnResult)
|
500
|
if (!returnResult)
|
|
@@ -515,10 +503,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -515,10 +503,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
515
|
}
|
503
|
}
|
516
|
else
|
504
|
else
|
517
|
{
|
505
|
{
|
518
|
-
|
506
|
+
|
519
|
for (int i = 0; pPgsqlConn->next(); i++)
|
507
|
for (int i = 0; pPgsqlConn->next(); i++)
|
520
|
{
|
508
|
{
|
521
|
- if (i > 0 && fields_str.length() >0 && fields_str[fields_str.length() -1]!=',')
|
509
|
+ if (i > 0 && fields_str.length() > 0 && fields_str[fields_str.length() - 1] != ',')
|
522
|
{
|
510
|
{
|
523
|
fields_str += ",";
|
511
|
fields_str += ",";
|
524
|
}
|
512
|
}
|
|
@@ -572,8 +560,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -572,8 +560,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
572
|
|
560
|
|
573
|
if (layer->wherestr().length() > 0)
|
561
|
if (layer->wherestr().length() > 0)
|
574
|
{
|
562
|
{
|
575
|
- ss += format("where %s and ", layer->wherestr().c_str() );
|
|
|
576
|
-
|
563
|
+ ss += format("where %s and ", layer->wherestr().c_str());
|
577
|
}
|
564
|
}
|
578
|
else
|
565
|
else
|
579
|
{
|
566
|
{
|
|
@@ -584,60 +571,51 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -584,60 +571,51 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
584
|
std::string sql = format(ss.c_str(), layer->schema().c_str(), tableName.c_str());
|
571
|
std::string sql = format(ss.c_str(), layer->schema().c_str(), tableName.c_str());
|
585
|
|
572
|
|
586
|
string shapeName = layer->geom();
|
573
|
string shapeName = layer->geom();
|
587
|
- sql += format(" ST_DWithin(\"%s\", ST_GeometryFromText('POINT(%f %f)',%s), %f) limit %d ",
|
|
|
588
|
- shapeName.c_str(),x, y , layer->crs().srid(), dis, feature_count);
|
574
|
+ sql += format(" ST_DWithin(\"%s\", ST_GeometryFromText('POINT(%f %f)',%s), %f) limit %d ",
|
|
|
575
|
+ shapeName.c_str(), x, y, layer->crs().srid(), dis, feature_count);
|
589
|
//cout<<sql.c_str() <<endl;
|
576
|
//cout<<sql.c_str() <<endl;
|
590
|
return sql;
|
577
|
return sql;
|
591
|
}
|
578
|
}
|
592
|
|
579
|
|
593
|
-
|
|
|
594
|
- bool DmpWmsRenderer::GetFeatureInfo(std::string &responseData, int gmlVersion, int x, int y, int feature_count)
|
580
|
+ bool DmpWmsRenderer::GetFeatureInfo(std::string &responseData, int x, int y, int feature_count)
|
595
|
{
|
581
|
{
|
596
|
- if(m_dR == 0)
|
582
|
+ if (m_dR == 0)
|
597
|
return false;
|
583
|
return false;
|
598
|
//double x0 = m_dR * x + m_dXdis;
|
584
|
//double x0 = m_dR * x + m_dXdis;
|
599
|
//double y0 = -m_dR * y + m_dYdis;
|
585
|
//double y0 = -m_dR * y + m_dYdis;
|
600
|
|
586
|
|
601
|
- double x0 =(x - m_dXdis)/ m_dR ;
|
|
|
602
|
- double y0 = (m_dYdis -y )/m_dR ;
|
|
|
603
|
- double dis = 1/m_dR;
|
|
|
604
|
-
|
587
|
+ double x0 = (x - m_dXdis) / m_dR;
|
|
|
588
|
+ double y0 = (m_dYdis - y) / m_dR;
|
|
|
589
|
+ double dis = 1 / m_dR;
|
605
|
|
590
|
|
606
|
-
|
|
|
607
|
- for (int i = (int)(m_vLayers.size()) -1; i >=0; i--)
|
591
|
+ for (int i = (int)(m_vLayers.size()) - 1; i >= 0; i--)
|
608
|
{
|
592
|
{
|
609
|
- DmpVectorLayer* layer = (DmpVectorLayer*)m_vLayers[i];
|
593
|
+ DmpVectorLayer *layer = (DmpVectorLayer *)m_vLayers[i];
|
610
|
|
594
|
|
611
|
//double r1 = layer->m_dUpperScale; // *
|
595
|
//double r1 = layer->m_dUpperScale; // *
|
612
|
//double r2 = layer->m_dLowerScale; // *
|
596
|
//double r2 = layer->m_dLowerScale; // *
|
613
|
|
597
|
|
614
|
-
|
|
|
615
|
///if ((this->m_dScaleDenominator > r1 || this->m_dScaleDenominator < r2 || ml->m_pRenderer == 0))
|
598
|
///if ((this->m_dScaleDenominator > r1 || this->m_dScaleDenominator < r2 || ml->m_pRenderer == 0))
|
616
|
// continue;
|
599
|
// continue;
|
617
|
|
600
|
|
618
|
double start = clock();
|
601
|
double start = clock();
|
619
|
double cost, cost2;
|
602
|
double cost, cost2;
|
620
|
|
603
|
|
621
|
- string sql = this->GetFeatureInfoSQL(layer, x0, y0, dis,feature_count); //sql语句中使用 ::box
|
604
|
+ string sql = this->GetFeatureInfoSQL(layer, x0, y0, dis, feature_count); //sql语句中使用 ::box
|
622
|
if (sql == "")
|
605
|
if (sql == "")
|
623
|
continue;
|
606
|
continue;
|
624
|
|
607
|
|
625
|
string layerName = layer->name();
|
608
|
string layerName = layer->name();
|
626
|
- //const char *ss__ = "";
|
|
|
627
|
- //const char **pmsg = &ss__;
|
|
|
628
|
try
|
609
|
try
|
629
|
{
|
610
|
{
|
630
|
- shared_ptr<DmpPgsql> pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
|
611
|
+ shared_ptr<DmpPgsql> pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
|
631
|
if (pPgsqlConn == nullptr)
|
612
|
if (pPgsqlConn == nullptr)
|
632
|
break;
|
613
|
break;
|
633
|
- if (pPgsqlConn->ExecWaitBinary(sql) )
|
614
|
+ if (pPgsqlConn->ExecWaitBinary(sql))
|
634
|
{
|
615
|
{
|
635
|
-
|
|
|
636
|
- //PGresult *res = pPgsqlConn->GetPGresult();
|
|
|
637
|
- string srid = std::__cxx11::to_string(layer->crs().srid());
|
|
|
638
|
- this->FormatWFSJsonCAll(pPgsqlConn, responseData, layerName, gmlVersion,srid);
|
|
|
639
|
- return true;
|
|
|
640
|
-
|
616
|
+ string srid = std::__cxx11::to_string(layer->crs().srid());
|
|
|
617
|
+ mapserver::DmpMapServerUtil::responseGeojson(pPgsqlConn, responseData, layerName, srid);
|
|
|
618
|
+ return true;
|
641
|
}
|
619
|
}
|
642
|
}
|
620
|
}
|
643
|
catch (const std::exception &e)
|
621
|
catch (const std::exception &e)
|
|
@@ -646,14 +624,12 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -646,14 +624,12 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
646
|
}
|
624
|
}
|
647
|
}
|
625
|
}
|
648
|
return true;
|
626
|
return true;
|
649
|
- }
|
|
|
650
|
-
|
627
|
+ }
|
651
|
|
628
|
|
652
|
-
|
|
|
653
|
- bool DmpWmsRenderer::AddWmsMapLayers(const DmpProject* project) //插入型加入
|
629
|
+ bool DmpWmsRenderer::AddWmsMapLayers(const DmpProject *project) //插入型加入
|
654
|
{
|
630
|
{
|
655
|
- std::map<std::string, DmpMapLayer*> mapLayers = project->mapLayers();
|
|
|
656
|
- for(std::map<std::string, DmpMapLayer*>::iterator iter= mapLayers.begin();
|
631
|
+ std::map<std::string, DmpMapLayer *> mapLayers = project->mapLayers();
|
|
|
632
|
+ for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin();
|
657
|
iter != mapLayers.end(); iter++)
|
633
|
iter != mapLayers.end(); iter++)
|
658
|
{
|
634
|
{
|
659
|
this->AddMapLayer(-1, (DmpVectorLayer *)iter->second);
|
635
|
this->AddMapLayer(-1, (DmpVectorLayer *)iter->second);
|
|
@@ -661,7 +637,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -661,7 +637,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
661
|
return true;
|
637
|
return true;
|
662
|
}
|
638
|
}
|
663
|
|
639
|
|
664
|
- bool DmpWmsRenderer::AddWmsMapLayers(const DmpProject* project, char *layer) //插入型加入
|
640
|
+ bool DmpWmsRenderer::AddWmsMapLayers(const DmpProject *project, char *layer) //插入型加入
|
665
|
{
|
641
|
{
|
666
|
bool layerIndex = true;
|
642
|
bool layerIndex = true;
|
667
|
for (size_t i = 0; layer[i] != 0; i++)
|
643
|
for (size_t i = 0; layer[i] != 0; i++)
|
|
@@ -693,15 +669,15 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -693,15 +669,15 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
693
|
i++;
|
669
|
i++;
|
694
|
}
|
670
|
}
|
695
|
|
671
|
|
696
|
- std::map<std::string, DmpMapLayer*> mapLayers = project->mapLayers();
|
|
|
697
|
- for (std::map<std::string, DmpMapLayer*>::iterator iter= mapLayers.begin();
|
|
|
698
|
- iter != mapLayers.end(); iter++)
|
|
|
699
|
- {
|
|
|
700
|
- if (set_layer.find(iter->first) != set_layer.end())
|
672
|
+ std::map<std::string, DmpMapLayer *> mapLayers = project->mapLayers();
|
|
|
673
|
+ for (std::map<std::string, DmpMapLayer *>::iterator iter = mapLayers.begin();
|
|
|
674
|
+ iter != mapLayers.end(); iter++)
|
|
|
675
|
+ {
|
|
|
676
|
+ if (set_layer.find(iter->first) != set_layer.end())
|
701
|
{
|
677
|
{
|
702
|
this->AddMapLayer(-1, (DmpVectorLayer *)iter->second);
|
678
|
this->AddMapLayer(-1, (DmpVectorLayer *)iter->second);
|
703
|
}
|
679
|
}
|
704
|
- }
|
680
|
+ }
|
705
|
|
681
|
|
706
|
/*for (size_t i = 0; i < pWmsServer->layers.size(); i++)
|
682
|
/*for (size_t i = 0; i < pWmsServer->layers.size(); i++)
|
707
|
{
|
683
|
{
|
|
@@ -752,8 +728,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -752,8 +728,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
752
|
return true;
|
728
|
return true;
|
753
|
}
|
729
|
}
|
754
|
|
730
|
|
755
|
-
|
|
|
756
|
- bool DmpWmsRenderer::AddMapLayer(int index, DmpVectorLayer* layer)
|
731
|
+ bool DmpWmsRenderer::AddMapLayer(int index, DmpVectorLayer *layer)
|
757
|
{
|
732
|
{
|
758
|
if (!layer)
|
733
|
if (!layer)
|
759
|
return false;
|
734
|
return false;
|
|
@@ -810,23 +785,22 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -810,23 +785,22 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
810
|
if ((r > std::pow(10, 12)) || (r < std::pow(10, -12)))
|
785
|
if ((r > std::pow(10, 12)) || (r < std::pow(10, -12)))
|
811
|
return false;
|
786
|
return false;
|
812
|
|
787
|
|
813
|
-
|
|
|
814
|
//m_dR = R1 < R2 ? R1 : R2;
|
788
|
//m_dR = R1 < R2 ? R1 : R2;
|
815
|
m_dR = r;
|
789
|
m_dR = r;
|
816
|
m_dXdis = m_dWidth / 2.0 - m_dR * (m_pExtent->m_dRight + m_pExtent->m_dLeft) / 2.0;
|
790
|
m_dXdis = m_dWidth / 2.0 - m_dR * (m_pExtent->m_dRight + m_pExtent->m_dLeft) / 2.0;
|
817
|
m_dYdis = m_dHeight / 2.0 + m_dR * (m_pExtent->m_dTop + m_pExtent->m_dBottom) / 2.0;
|
791
|
m_dYdis = m_dHeight / 2.0 + m_dR * (m_pExtent->m_dTop + m_pExtent->m_dBottom) / 2.0;
|
818
|
|
792
|
|
819
|
- if(R1 < R2)
|
793
|
+ if (R1 < R2)
|
820
|
{
|
794
|
{
|
821
|
- double top = (m_pExtent->m_dTop + m_pExtent->m_dBottom) / 2.0 + m_dHeight/(m_dR * 2);
|
|
|
822
|
- double bottom = (m_pExtent->m_dTop + m_pExtent->m_dBottom) / 2.0 - m_dHeight/( m_dR * 2) ;
|
|
|
823
|
- m_pExtent->m_dTop = top;
|
|
|
824
|
- m_pExtent->m_dBottom = bottom;
|
795
|
+ double top = (m_pExtent->m_dTop + m_pExtent->m_dBottom) / 2.0 + m_dHeight / (m_dR * 2);
|
|
|
796
|
+ double bottom = (m_pExtent->m_dTop + m_pExtent->m_dBottom) / 2.0 - m_dHeight / (m_dR * 2);
|
|
|
797
|
+ m_pExtent->m_dTop = top;
|
|
|
798
|
+ m_pExtent->m_dBottom = bottom;
|
825
|
}
|
799
|
}
|
826
|
else
|
800
|
else
|
827
|
{
|
801
|
{
|
828
|
- double right= (m_pExtent->m_dRight + m_pExtent->m_dLeft) / 2.0 + m_dWidth/(2 * m_dR);
|
|
|
829
|
- double left = (m_pExtent->m_dRight + m_pExtent->m_dLeft) / 2.0 - m_dWidth/(2 * m_dR) ;
|
802
|
+ double right = (m_pExtent->m_dRight + m_pExtent->m_dLeft) / 2.0 + m_dWidth / (2 * m_dR);
|
|
|
803
|
+ double left = (m_pExtent->m_dRight + m_pExtent->m_dLeft) / 2.0 - m_dWidth / (2 * m_dR);
|
830
|
m_pExtent->m_dRight = right;
|
804
|
m_pExtent->m_dRight = right;
|
831
|
m_pExtent->m_dLeft = left;
|
805
|
m_pExtent->m_dLeft = left;
|
832
|
}
|
806
|
}
|
|
@@ -874,7 +848,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -874,7 +848,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
874
|
}
|
848
|
}
|
875
|
return true;
|
849
|
return true;
|
876
|
}
|
850
|
}
|
877
|
-/*
|
851
|
+ /*
|
878
|
bool DmpWmsRenderer::DrawData(DataCollection *data, Renderer *renderer, clsCrSurf *pClsCS)
|
852
|
bool DmpWmsRenderer::DrawData(DataCollection *data, Renderer *renderer, clsCrSurf *pClsCS)
|
879
|
{
|
853
|
{
|
880
|
|
854
|
|
|
@@ -911,8 +885,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -911,8 +885,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
911
|
return true;
|
885
|
return true;
|
912
|
}
|
886
|
}
|
913
|
|
887
|
|
914
|
-
|
|
|
915
|
- bool DmpWmsRenderer::BufferCopy(clsCrSurf *pClsCSFrom, clsCrSurf *pClsCSTo)
|
888
|
+ bool DmpWmsRenderer::BufferCopy(clsCrSurf *pClsCSFrom, clsCrSurf *pClsCSTo)
|
916
|
{
|
889
|
{
|
917
|
if (pClsCSFrom == NULL)
|
890
|
if (pClsCSFrom == NULL)
|
918
|
pClsCSFrom = m_pClsSurfBuff;
|
891
|
pClsCSFrom = m_pClsSurfBuff;
|
|
@@ -940,11 +913,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -940,11 +913,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
940
|
cairo_fill(cr);
|
913
|
cairo_fill(cr);
|
941
|
return true;
|
914
|
return true;
|
942
|
}
|
915
|
}
|
943
|
-
|
|
|
944
|
|
916
|
|
945
|
//在DC上绘制时是否使用一个临时的 image_surface, 然后拷上去,这样具体的细节处理就没有区别了
|
917
|
//在DC上绘制时是否使用一个临时的 image_surface, 然后拷上去,这样具体的细节处理就没有区别了
|
946
|
- bool DmpWmsRenderer::GetMap(map<string, string> *map_layerDefs,map<string, string> * map_regionDefs, clsCrSurf *pClsCS, bool isThumbnail,
|
|
|
947
|
- shared_ptr<Rect> pRect, double r__, double x_dis__, double y_dis__)
|
918
|
+ bool DmpWmsRenderer::GetMap(map<string, string> *map_layerDefs, map<string, string> *map_regionDefs, clsCrSurf *pClsCS, bool isThumbnail,
|
|
|
919
|
+ shared_ptr<Rect> pRect, double r__, double x_dis__, double y_dis__)
|
948
|
{
|
920
|
{
|
949
|
/*确定参数*/
|
921
|
/*确定参数*/
|
950
|
clsCrSurf *pClsSurfThis;
|
922
|
clsCrSurf *pClsSurfThis;
|
|
@@ -978,7 +950,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -978,7 +950,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
978
|
y_dis = y_dis__;
|
950
|
y_dis = y_dis__;
|
979
|
}
|
951
|
}
|
980
|
|
952
|
|
981
|
- /*
|
953
|
+ /*
|
982
|
* 重置文字避让
|
954
|
* 重置文字避让
|
983
|
*/
|
955
|
*/
|
984
|
//文字避让是否写成局部??
|
956
|
//文字避让是否写成局部??
|
|
@@ -990,7 +962,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -990,7 +962,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
990
|
string strRegionColDefs = "";
|
962
|
string strRegionColDefs = "";
|
991
|
string strRegionLayerNameDefs = "";
|
963
|
string strRegionLayerNameDefs = "";
|
992
|
|
964
|
|
993
|
- if(map_regionDefs)
|
965
|
+ if (map_regionDefs)
|
994
|
{
|
966
|
{
|
995
|
map<string, string>::iterator iter_regionDef = map_regionDefs->begin();
|
967
|
map<string, string>::iterator iter_regionDef = map_regionDefs->begin();
|
996
|
if (iter_regionDef != map_regionDefs->end())
|
968
|
if (iter_regionDef != map_regionDefs->end())
|
|
@@ -1000,14 +972,12 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1000,14 +972,12 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1000
|
has_regionDefs = true;
|
972
|
has_regionDefs = true;
|
1001
|
}
|
973
|
}
|
1002
|
}
|
974
|
}
|
1003
|
-
|
|
|
1004
|
|
975
|
|
1005
|
- map<DmpVectorLayer*, shared_ptr<DataCollection>> map_DataCollection;
|
976
|
+ map<DmpVectorLayer *, shared_ptr<DataCollection>> map_DataCollection;
|
1006
|
|
977
|
|
1007
|
for (int i = 0; i < (int)(m_vLayers.size()); i++)
|
978
|
for (int i = 0; i < (int)(m_vLayers.size()); i++)
|
1008
|
{
|
979
|
{
|
1009
|
- DmpVectorLayer* layer = m_vLayers[i];
|
|
|
1010
|
-
|
980
|
+ DmpVectorLayer *layer = m_vLayers[i];
|
1011
|
|
981
|
|
1012
|
double r1 = layer->maxScale(); // *
|
982
|
double r1 = layer->maxScale(); // *
|
1013
|
double r2 = layer->minScale(); // *
|
983
|
double r2 = layer->minScale(); // *
|
|
@@ -1028,55 +998,53 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1028,55 +998,53 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1028
|
}
|
998
|
}
|
1029
|
|
999
|
|
1030
|
//bool isbuffQuery = false;
|
1000
|
//bool isbuffQuery = false;
|
1031
|
- // double width_scale = abs((layer->m_pDataset->maxx - layer->m_pDataset->minx) / (pExtent->m_dRight - pExtent->m_dLeft));
|
1001
|
+ // double width_scale = abs((layer->m_pDataset->maxx - layer->m_pDataset->minx) / (pExtent->m_dRight - pExtent->m_dLeft));
|
1032
|
{
|
1002
|
{
|
1033
|
//std::printf("db \r\n ");
|
1003
|
//std::printf("db \r\n ");
|
1034
|
double start = clock();
|
1004
|
double start = clock();
|
1035
|
double cost, cost2;
|
1005
|
double cost, cost2;
|
1036
|
|
1006
|
|
1037
|
- string sql ="";
|
1007
|
+ string sql = "";
|
1038
|
shared_ptr<DmpVectorThinLayer> pVectorThinLayer = nullptr;
|
1008
|
shared_ptr<DmpVectorThinLayer> pVectorThinLayer = nullptr;
|
1039
|
|
1009
|
|
1040
|
bool renderHeat = false;
|
1010
|
bool renderHeat = false;
|
1041
|
shared_ptr<DataCollection> data(new DataCollection());
|
1011
|
shared_ptr<DataCollection> data(new DataCollection());
|
1042
|
|
1012
|
|
1043
|
- if(!has_regionDefs)
|
1013
|
+ if (!has_regionDefs)
|
1044
|
{
|
1014
|
{
|
1045
|
- sql = GetDrawSQL(layer, pExtent.get(), strLayerDef);
|
1015
|
+ sql = GetDrawSQL(layer, pExtent.get(), strLayerDef);
|
1046
|
}
|
1016
|
}
|
1047
|
else
|
1017
|
else
|
1048
|
{
|
1018
|
{
|
1049
|
- sql = GetRegionQuerySQL(layer, pExtent.get(), format("%d",layer->crs().srid()), strRegionLayerNameDefs,strRegionColDefs, strLayerDef);
|
1019
|
+ sql = GetRegionQuerySQL(layer, pExtent.get(), format("%d", layer->crs().srid()), strRegionLayerNameDefs, strRegionColDefs, strLayerDef);
|
1050
|
}
|
1020
|
}
|
1051
|
|
1021
|
|
1052
|
pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR);
|
1022
|
pVectorThinLayer = layer->GetCurrentScaleTable(1 / this->m_dR);
|
1053
|
|
1023
|
|
1054
|
- // printf( "%s\r\n", sql.c_str());
|
|
|
1055
|
- // this->GetDrawSQL(layer, pExtent.get(), strLayerDef); //sql语句中使用 ::box
|
1024
|
+ // printf( "%s\r\n", sql.c_str());
|
|
|
1025
|
+ // this->GetDrawSQL(layer, pExtent.get(), strLayerDef); //sql语句中使用 ::box
|
1056
|
if (sql == "")
|
1026
|
if (sql == "")
|
1057
|
continue;
|
1027
|
continue;
|
1058
|
|
1028
|
|
1059
|
string tableName = layer->name();
|
1029
|
string tableName = layer->name();
|
1060
|
|
1030
|
|
1061
|
-
|
|
|
1062
|
if (pVectorThinLayer != nullptr)
|
1031
|
if (pVectorThinLayer != nullptr)
|
1063
|
{
|
1032
|
{
|
1064
|
- tableName = pVectorThinLayer->tableName();
|
|
|
1065
|
- }
|
1033
|
+ tableName = pVectorThinLayer->tableName();
|
|
|
1034
|
+ }
|
1066
|
|
1035
|
|
1067
|
- if(tableName.length() > 32)
|
1036
|
+ if (tableName.length() > 32)
|
1068
|
{
|
1037
|
{
|
1069
|
tableName = tableName.substr(32);
|
1038
|
tableName = tableName.substr(32);
|
1070
|
}
|
1039
|
}
|
1071
|
|
1040
|
|
1072
|
-
|
|
|
1073
|
const char *ss__ = "";
|
1041
|
const char *ss__ = "";
|
1074
|
const char **pmsg = &ss__;
|
1042
|
const char **pmsg = &ss__;
|
1075
|
try
|
1043
|
try
|
1076
|
{
|
1044
|
{
|
1077
|
|
1045
|
|
1078
|
shared_ptr<DmpPgsql> pPgsqlConn = nullptr;
|
1046
|
shared_ptr<DmpPgsql> pPgsqlConn = nullptr;
|
1079
|
- if(pVectorThinLayer == nullptr)
|
1047
|
+ if (pVectorThinLayer == nullptr)
|
1080
|
{
|
1048
|
{
|
1081
|
pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
|
1049
|
pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
|
1082
|
}
|
1050
|
}
|
|
@@ -1084,9 +1052,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1084,9 +1052,9 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1084
|
{
|
1052
|
{
|
1085
|
pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetDefaultPgsqlConn();
|
1053
|
pPgsqlConn = DmpPgsqlSourcePools::get_instance()->GetDefaultPgsqlConn();
|
1086
|
}
|
1054
|
}
|
1087
|
-
|
1055
|
+
|
1088
|
if (pPgsqlConn == nullptr)
|
1056
|
if (pPgsqlConn == nullptr)
|
1089
|
- break;
|
1057
|
+ break;
|
1090
|
if (pPgsqlConn->ExecWaitBinary(sql))
|
1058
|
if (pPgsqlConn->ExecWaitBinary(sql))
|
1091
|
{
|
1059
|
{
|
1092
|
PGresult *res = pPgsqlConn->GetPGresult();
|
1060
|
PGresult *res = pPgsqlConn->GetPGresult();
|
|
@@ -1096,7 +1064,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1096,7 +1064,7 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1096
|
int shapeType = layer->GeometryType();
|
1064
|
int shapeType = layer->GeometryType();
|
1097
|
shared_ptr<DataCollection> data(new DataCollection());
|
1065
|
shared_ptr<DataCollection> data(new DataCollection());
|
1098
|
data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, 0, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1066
|
data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, 0, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1099
|
-
|
1067
|
+
|
1100
|
//data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, (int)layer->subset, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1068
|
//data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, (int)layer->subset, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1101
|
map_DataCollection[layer] = data;
|
1069
|
map_DataCollection[layer] = data;
|
1102
|
//data_ptr = data;
|
1070
|
//data_ptr = data;
|
|
@@ -1104,10 +1072,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1104,10 +1072,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1104
|
|
1072
|
|
1105
|
allDataCount += PQntuples(res);
|
1073
|
allDataCount += PQntuples(res);
|
1106
|
this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis);
|
1074
|
this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis);
|
1107
|
- // DrawText(StringHelp::fmt("data %.0fm",(endTime_data - startTime).count()/1000000.0)
|
|
|
1108
|
- // ,pClsSurfThis,10,50);
|
1075
|
+ // DrawText(StringHelp::fmt("data %.0fm",(endTime_data - startTime).count()/1000000.0)
|
|
|
1076
|
+ // ,pClsSurfThis,10,50);
|
1109
|
|
1077
|
|
1110
|
- /*
|
1078
|
+ /*
|
1111
|
DrawText(tableName ,pClsSurfThis,10,100);
|
1079
|
DrawText(tableName ,pClsSurfThis,10,100);
|
1112
|
|
1080
|
|
1113
|
char ptext[100] = {0};
|
1081
|
char ptext[100] = {0};
|
|
@@ -1116,10 +1084,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1116,10 +1084,10 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1116
|
|
1084
|
|
1117
|
*/
|
1085
|
*/
|
1118
|
}
|
1086
|
}
|
1119
|
- else if(pVectorThinLayer != nullptr)
|
1087
|
+ else if (pVectorThinLayer != nullptr)
|
1120
|
{
|
1088
|
{
|
1121
|
- shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
|
|
|
1122
|
-
|
1089
|
+ shared_ptr<DmpPgsql> pPgsqlConn1 = DmpPgsqlSourcePools::get_instance()->GetPgsqlConn(layer->source());
|
|
|
1090
|
+
|
1123
|
if (pPgsqlConn1 == nullptr)
|
1091
|
if (pPgsqlConn1 == nullptr)
|
1124
|
break;
|
1092
|
break;
|
1125
|
if (pPgsqlConn1->ExecWaitBinary(sql))
|
1093
|
if (pPgsqlConn1->ExecWaitBinary(sql))
|
|
@@ -1130,16 +1098,16 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1130,16 +1098,16 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1130
|
|
1098
|
|
1131
|
int shapeType = layer->GeometryType();
|
1099
|
int shapeType = layer->GeometryType();
|
1132
|
shared_ptr<DataCollection> data(new DataCollection());
|
1100
|
shared_ptr<DataCollection> data(new DataCollection());
|
1133
|
- if(!renderHeat)
|
1101
|
+ if (!renderHeat)
|
1134
|
{
|
1102
|
{
|
1135
|
data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, 0, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1103
|
data->InitDataCollection(res, shapeType, this->m_dWidth, this->m_dHeight, 0, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1136
|
}
|
1104
|
}
|
1137
|
else
|
1105
|
else
|
1138
|
{
|
1106
|
{
|
1139
|
- data->InitHeatCollection(res, shapeType, this->m_dWidth, this->m_dHeight,
|
|
|
1140
|
- pExtent->m_dLeft, pExtent->m_dRight, pExtent->m_dBottom, pExtent->m_dTop, 0, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1107
|
+ data->InitHeatCollection(res, shapeType, this->m_dWidth, this->m_dHeight,
|
|
|
1108
|
+ pExtent->m_dLeft, pExtent->m_dRight, pExtent->m_dBottom, pExtent->m_dTop, 0, m_dR, m_dScaleDenominator, x_dis, y_dis);
|
1141
|
}
|
1109
|
}
|
1142
|
-
|
1110
|
+
|
1143
|
map_DataCollection[layer] = data;
|
1111
|
map_DataCollection[layer] = data;
|
1144
|
|
1112
|
|
1145
|
//auto endTime_data = chrono::steady_clock::now();
|
1113
|
//auto endTime_data = chrono::steady_clock::now();
|
|
@@ -1147,14 +1115,12 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1147,14 +1115,12 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1147
|
|
1115
|
|
1148
|
allDataCount += PQntuples(res);
|
1116
|
allDataCount += PQntuples(res);
|
1149
|
this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis);
|
1117
|
this->DrawSimpleData(data.get(), layer->GetRenderer30().get(), pClsSurfThis);
|
1150
|
-
|
|
|
1151
|
}
|
1118
|
}
|
1152
|
else
|
1119
|
else
|
1153
|
{
|
1120
|
{
|
1154
|
- //DrawText2("获取数据失败,找不到图层" ,pClsSurfThis,10,10);
|
1121
|
+ //DrawText2("获取数据失败,找不到图层" ,pClsSurfThis,10,10);
|
1155
|
}
|
1122
|
}
|
1156
|
}
|
1123
|
}
|
1157
|
-
|
|
|
1158
|
}
|
1124
|
}
|
1159
|
catch (const std::exception &e)
|
1125
|
catch (const std::exception &e)
|
1160
|
{
|
1126
|
{
|
|
@@ -1163,7 +1129,6 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1163,7 +1129,6 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1163
|
}
|
1129
|
}
|
1164
|
}
|
1130
|
}
|
1165
|
|
1131
|
|
1166
|
-
|
|
|
1167
|
map_DataCollection.clear();
|
1132
|
map_DataCollection.clear();
|
1168
|
|
1133
|
|
1169
|
//return true;
|
1134
|
//return true;
|
|
@@ -1175,311 +1140,125 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
|
@@ -1175,311 +1140,125 @@ ST_GeometryFromText('POLYGON((%f %f, %f %f, %f %f, %f %f, %f %f))',%s),\ |
1175
|
return true;
|
1140
|
return true;
|
1176
|
}
|
1141
|
}
|
1177
|
|
1142
|
|
1178
|
-
|
|
|
1179
|
- bool DmpWmsRenderer::ToStream(std::string& responseData)
|
1143
|
+ bool DmpWmsRenderer::ToStream(std::string &responseData)
|
1180
|
{
|
1144
|
{
|
1181
|
responseData.reserve(10240);
|
1145
|
responseData.reserve(10240);
|
1182
|
- if(this->pRasterBufferObj == nullptr)
|
1146
|
+ if (this->pRasterBufferObj == nullptr)
|
1183
|
{
|
1147
|
{
|
1184
|
cairo_surface_write_to_png_stream(m_pClsSurfDC->m_pSurf, cairo_write_func, &responseData);
|
1148
|
cairo_surface_write_to_png_stream(m_pClsSurfDC->m_pSurf, cairo_write_func, &responseData);
|
1185
|
return true;
|
1149
|
return true;
|
1186
|
}
|
1150
|
}
|
1187
|
else
|
1151
|
else
|
1188
|
- {
|
1152
|
+ {
|
1189
|
return ToPngStream(this->pRasterBufferObj, responseData);
|
1153
|
return ToPngStream(this->pRasterBufferObj, responseData);
|
1190
|
}
|
1154
|
}
|
1191
|
}
|
1155
|
}
|
1192
|
|
1156
|
|
1193
|
-
|
|
|
1194
|
-bool DmpWmsRenderer::ToPngStream(rasterBufferObj *rb,std::string& responseData)
|
|
|
1195
|
-{
|
|
|
1196
|
- png_infop info_ptr;
|
|
|
1197
|
- int color_type;
|
|
|
1198
|
- int row;
|
|
|
1199
|
- unsigned int *rowdata;
|
|
|
1200
|
- int compression = 9;
|
|
|
1201
|
- png_structp png_ptr = png_create_write_struct(
|
|
|
1202
|
- PNG_LIBPNG_VER_STRING, NULL,NULL,NULL);
|
|
|
1203
|
-
|
|
|
1204
|
- if (!png_ptr)
|
|
|
1205
|
- return (false);
|
|
|
1206
|
-
|
|
|
1207
|
- png_set_compression_level(png_ptr, compression);
|
|
|
1208
|
- png_set_filter (png_ptr,0, PNG_FILTER_NONE);
|
|
|
1209
|
-
|
|
|
1210
|
- info_ptr = png_create_info_struct(png_ptr);
|
|
|
1211
|
- if (!info_ptr) {
|
|
|
1212
|
- png_destroy_write_struct(&png_ptr,
|
|
|
1213
|
- (png_infopp)NULL);
|
|
|
1214
|
- return (false);
|
|
|
1215
|
- }
|
|
|
1216
|
-
|
|
|
1217
|
- if (setjmp(png_jmpbuf(png_ptr))) {
|
|
|
1218
|
- png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
|
1219
|
- return (false);
|
|
|
1220
|
- }
|
|
|
1221
|
- //if(info->fp)
|
|
|
1222
|
- // png_set_write_fn(png_ptr,info, png_write_data_to_stream, png_flush_data);
|
|
|
1223
|
- //else
|
|
|
1224
|
- png_set_write_fn(png_ptr,&responseData, png_write_data_to_buffer, png_flush_data);
|
|
|
1225
|
-
|
|
|
1226
|
- if(rb->data.rgba.a)
|
|
|
1227
|
- color_type = PNG_COLOR_TYPE_RGB_ALPHA;
|
|
|
1228
|
- else
|
|
|
1229
|
- color_type = PNG_COLOR_TYPE_RGB;
|
|
|
1230
|
-
|
|
|
1231
|
- png_set_IHDR(png_ptr, info_ptr, rb->width, rb->height,
|
|
|
1232
|
- 8, color_type, PNG_INTERLACE_NONE,
|
|
|
1233
|
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
|
|
|
1234
|
-
|
|
|
1235
|
- png_write_info(png_ptr, info_ptr);
|
|
|
1236
|
-
|
|
|
1237
|
- if(!rb->data.rgba.a && rb->data.rgba.pixel_step==4)
|
|
|
1238
|
- png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
|
|
|
1239
|
-
|
|
|
1240
|
- rowdata = (unsigned int*)malloc(rb->width*sizeof(unsigned int));
|
|
|
1241
|
- for(row=0; row<rb->height; row++) {
|
|
|
1242
|
- unsigned int *pixptr = rowdata;
|
|
|
1243
|
- int col;
|
|
|
1244
|
- unsigned char *a,*r,*g,*b;
|
|
|
1245
|
- r=rb->data.rgba.r+row*rb->data.rgba.row_step;
|
|
|
1246
|
- g=rb->data.rgba.g+row*rb->data.rgba.row_step;
|
|
|
1247
|
- b=rb->data.rgba.b+row*rb->data.rgba.row_step;
|
|
|
1248
|
- if(rb->data.rgba.a) {
|
|
|
1249
|
- a=rb->data.rgba.a+row*rb->data.rgba.row_step;
|
|
|
1250
|
- for(col=0; col<rb->width; col++) {
|
|
|
1251
|
- if(*a) {
|
|
|
1252
|
- double da = *a/255.0;
|
|
|
1253
|
- unsigned char *pix = (unsigned char*)pixptr;
|
|
|
1254
|
- pix[0] = *r/da;
|
|
|
1255
|
- pix[1] = *g/da;
|
|
|
1256
|
- pix[2] = *b/da;
|
|
|
1257
|
- pix[3] = *a;
|
|
|
1258
|
- } else {
|
|
|
1259
|
- *pixptr=0;
|
|
|
1260
|
- }
|
|
|
1261
|
- pixptr++;
|
|
|
1262
|
- a+=rb->data.rgba.pixel_step;
|
|
|
1263
|
- r+=rb->data.rgba.pixel_step;
|
|
|
1264
|
- g+=rb->data.rgba.pixel_step;
|
|
|
1265
|
- b+=rb->data.rgba.pixel_step;
|
|
|
1266
|
- }
|
|
|
1267
|
- } else {
|
|
|
1268
|
- for(col=0; col<rb->width; col++) {
|
|
|
1269
|
- unsigned char *pix = (unsigned char*)pixptr;
|
|
|
1270
|
- pix[0] = *r;
|
|
|
1271
|
- pix[1] = *g;
|
|
|
1272
|
- pix[2] = *b;
|
|
|
1273
|
- pixptr++;
|
|
|
1274
|
- r+=rb->data.rgba.pixel_step;
|
|
|
1275
|
- g+=rb->data.rgba.pixel_step;
|
|
|
1276
|
- b+=rb->data.rgba.pixel_step;
|
|
|
1277
|
- }
|
|
|
1278
|
- }
|
|
|
1279
|
-
|
|
|
1280
|
- png_write_row(png_ptr,(png_bytep)rowdata);
|
|
|
1281
|
-
|
|
|
1282
|
- }
|
|
|
1283
|
- png_write_end(png_ptr, info_ptr);
|
|
|
1284
|
- free(rowdata);
|
|
|
1285
|
- png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
|
1286
|
- return MS_SUCCESS;
|
|
|
1287
|
-}
|
|
|
1288
|
-
|
1157
|
+ bool DmpWmsRenderer::ToPngStream(rasterBufferObj *rb, std::string &responseData)
|
|
|
1158
|
+ {
|
|
|
1159
|
+ png_infop info_ptr;
|
|
|
1160
|
+ int color_type;
|
|
|
1161
|
+ int row;
|
|
|
1162
|
+ unsigned int *rowdata;
|
|
|
1163
|
+ int compression = 9;
|
|
|
1164
|
+ png_structp png_ptr = png_create_write_struct(
|
|
|
1165
|
+ PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
|
|
1166
|
+
|
|
|
1167
|
+ if (!png_ptr)
|
|
|
1168
|
+ return (false);
|
|
|
1169
|
+
|
|
|
1170
|
+ png_set_compression_level(png_ptr, compression);
|
|
|
1171
|
+ png_set_filter(png_ptr, 0, PNG_FILTER_NONE);
|
|
|
1172
|
+
|
|
|
1173
|
+ info_ptr = png_create_info_struct(png_ptr);
|
|
|
1174
|
+ if (!info_ptr)
|
|
|
1175
|
+ {
|
|
|
1176
|
+ png_destroy_write_struct(&png_ptr,
|
|
|
1177
|
+ (png_infopp)NULL);
|
|
|
1178
|
+ return (false);
|
|
|
1179
|
+ }
|
1289
|
|
1180
|
|
1290
|
-//以GeoJson的形式返回
|
|
|
1291
|
-void DmpWmsRenderer::FormatWFSJsonCAll(shared_ptr<DmpPgsql> pPgsqlConn, AppendBuffer *ab, char *layerNAMEc,int gmlVersion,char *srsOut)
|
|
|
1292
|
-{
|
|
|
1293
|
- double xg1, yg1, xg2, yg2;
|
|
|
1294
|
- int havegSet = 0;
|
|
|
1295
|
- int count = 0;
|
|
|
1296
|
- int pointCountTemp = 0;
|
1181
|
+ if (setjmp(png_jmpbuf(png_ptr)))
|
|
|
1182
|
+ {
|
|
|
1183
|
+ png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
|
1184
|
+ return (false);
|
|
|
1185
|
+ }
|
|
|
1186
|
+ //if(info->fp)
|
|
|
1187
|
+ // png_set_write_fn(png_ptr,info, png_write_data_to_stream, png_flush_data);
|
|
|
1188
|
+ //else
|
|
|
1189
|
+ png_set_write_fn(png_ptr, &responseData, png_write_data_to_buffer, png_flush_data);
|
1297
|
|
1190
|
|
1298
|
- std::string stringTime;
|
|
|
1299
|
- char buff[5000] = {0};
|
|
|
1300
|
-
|
|
|
1301
|
- ab->AppendString(R"({"type":"FeatureCollection","features":[)");
|
1191
|
+ if (rb->data.rgba.a)
|
|
|
1192
|
+ color_type = PNG_COLOR_TYPE_RGB_ALPHA;
|
|
|
1193
|
+ else
|
|
|
1194
|
+ color_type = PNG_COLOR_TYPE_RGB;
|
1302
|
|
1195
|
|
1303
|
- try
|
|
|
1304
|
- {
|
|
|
1305
|
- int fieldsCount = pPgsqlConn->GetFieldCount();
|
|
|
1306
|
- for (int featureIndex = 0; pPgsqlConn->next(); featureIndex++)
|
|
|
1307
|
- {
|
|
|
1308
|
- if (featureIndex > 0)
|
|
|
1309
|
- ab->AppendString(",");
|
|
|
1310
|
- ab->AppendString(R"({"type":"Feature")");
|
1196
|
+ png_set_IHDR(png_ptr, info_ptr, rb->width, rb->height,
|
|
|
1197
|
+ 8, color_type, PNG_INTERLACE_NONE,
|
|
|
1198
|
+ PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
|
1311
|
|
1199
|
|
|
|
1200
|
+ png_write_info(png_ptr, info_ptr);
|
1312
|
|
1201
|
|
1313
|
- string geometry = "";
|
|
|
1314
|
- string properties = "";
|
1202
|
+ if (!rb->data.rgba.a && rb->data.rgba.pixel_step == 4)
|
|
|
1203
|
+ png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
|
1315
|
|
1204
|
|
1316
|
- for (int i = 0; i < fieldsCount; i++)
|
1205
|
+ rowdata = (unsigned int *)malloc(rb->width * sizeof(unsigned int));
|
|
|
1206
|
+ for (row = 0; row < rb->height; row++)
|
|
|
1207
|
+ {
|
|
|
1208
|
+ unsigned int *pixptr = rowdata;
|
|
|
1209
|
+ int col;
|
|
|
1210
|
+ unsigned char *a, *r, *g, *b;
|
|
|
1211
|
+ r = rb->data.rgba.r + row * rb->data.rgba.row_step;
|
|
|
1212
|
+ g = rb->data.rgba.g + row * rb->data.rgba.row_step;
|
|
|
1213
|
+ b = rb->data.rgba.b + row * rb->data.rgba.row_step;
|
|
|
1214
|
+ if (rb->data.rgba.a)
|
1317
|
{
|
1215
|
{
|
1318
|
- const char *str = pPgsqlConn->GetFieldName(i); //pPgsqlConn->field_name[i].c_str();
|
|
|
1319
|
- //printf("%s\r\n",str);
|
|
|
1320
|
- if(str == 0)
|
|
|
1321
|
- {
|
|
|
1322
|
- break;
|
|
|
1323
|
- }
|
|
|
1324
|
-
|
|
|
1325
|
- if (strncmp(str, "RN_RN", 5) == 0)
|
|
|
1326
|
- continue;
|
|
|
1327
|
- std::string sT = str;
|
|
|
1328
|
- //XML转义
|
|
|
1329
|
- DmapDll::StringHelp::ToJSONString(sT);
|
|
|
1330
|
- str = sT.c_str();
|
|
|
1331
|
-
|
|
|
1332
|
- if( sT == "geometry_as_geojson")
|
|
|
1333
|
- {
|
|
|
1334
|
- geometry = pPgsqlConn->getString(i);
|
|
|
1335
|
- continue;
|
|
|
1336
|
- }
|
|
|
1337
|
- // str="a";
|
|
|
1338
|
- switch (pPgsqlConn->GetPGFieldType(i))
|
|
|
1339
|
- {
|
|
|
1340
|
- case PGFieldType::ByteaFieldType:
|
|
|
1341
|
- {
|
|
|
1342
|
- const char *s = pPgsqlConn->getBlob2(i);
|
|
|
1343
|
- sprintf(buff, R"(,"%s":"%s")", str, s);
|
|
|
1344
|
- properties += buff;
|
|
|
1345
|
- }
|
|
|
1346
|
- break;
|
|
|
1347
|
- case PGFieldType::ClobFieldType:
|
|
|
1348
|
- {
|
|
|
1349
|
- const char *s = pPgsqlConn->getClob2(i);
|
|
|
1350
|
- sprintf(buff, R"(,"%s":"%s")", str, s);
|
|
|
1351
|
- properties += buff;
|
|
|
1352
|
- }
|
|
|
1353
|
- break;
|
|
|
1354
|
- case PGFieldType::BigIntFieldType:
|
|
|
1355
|
- {
|
|
|
1356
|
- long v;
|
|
|
1357
|
- const char *str1 = pPgsqlConn->getString(i);
|
|
|
1358
|
- ((char *)&v)[7] = str1[0];
|
|
|
1359
|
- ((char *)&v)[6] = str1[1];
|
|
|
1360
|
- ((char *)&v)[5] = str1[2];
|
|
|
1361
|
- ((char *)&v)[4] = str1[3];
|
|
|
1362
|
- ((char *)&v)[3] = str1[4];
|
|
|
1363
|
- ((char *)&v)[2] = str1[5];
|
|
|
1364
|
- ((char *)&v)[1] = str1[6];
|
|
|
1365
|
- ((char *)&v)[0] = str1[7];
|
|
|
1366
|
- sprintf(buff, R"(,"%s":%ld)", str, v);
|
|
|
1367
|
- properties += buff;
|
|
|
1368
|
- //sprintf(sql, "<%s:%s>%llu</%s:%s>", "dmp", str, v, "dmp", str);
|
|
|
1369
|
- //ab->AppendString(sql);
|
|
|
1370
|
- }
|
|
|
1371
|
- break;
|
|
|
1372
|
- case PGFieldType::DateFieldType:
|
|
|
1373
|
- {
|
|
|
1374
|
- int v;
|
|
|
1375
|
- const char *str1 = pPgsqlConn->getString(i);
|
|
|
1376
|
- ((char *)&v)[3] = str1[0];
|
|
|
1377
|
- ((char *)&v)[2] = str1[1];
|
|
|
1378
|
- ((char *)&v)[1] = str1[2];
|
|
|
1379
|
- ((char *)&v)[0] = str1[3];
|
|
|
1380
|
- sprintf(buff, R"(,"%s":%d)", str, v);
|
|
|
1381
|
- properties += buff;
|
|
|
1382
|
- //sprintf(sql, "<%s:%s>%ld</%s:%s>", "dmp", str, v, "dmp", str);
|
|
|
1383
|
- //ab->AppendString(sql);
|
|
|
1384
|
- }
|
|
|
1385
|
- break;
|
|
|
1386
|
- case PGFieldType::IntFieldType:
|
1216
|
+ a = rb->data.rgba.a + row * rb->data.rgba.row_step;
|
|
|
1217
|
+ for (col = 0; col < rb->width; col++)
|
1387
|
{
|
1218
|
{
|
1388
|
- int v;
|
|
|
1389
|
- const char *str1 = pPgsqlConn->getString(i);
|
|
|
1390
|
- ((char *)&v)[3] = str1[0];
|
|
|
1391
|
- ((char *)&v)[2] = str1[1];
|
|
|
1392
|
- ((char *)&v)[1] = str1[2];
|
|
|
1393
|
- ((char *)&v)[0] = str1[3];
|
|
|
1394
|
- sprintf(buff, R"(,"%s":%d)", str, v);
|
|
|
1395
|
- properties += buff;
|
|
|
1396
|
- //sprintf(sql, "<%s:%s>%ld</%s:%s>", "dmp", str, v, "dmp", str);
|
|
|
1397
|
- //ab->AppendString(sql);
|
|
|
1398
|
- }
|
|
|
1399
|
- break;
|
|
|
1400
|
- case PGFieldType::DoubleFieldType:
|
|
|
1401
|
- {
|
|
|
1402
|
- double v;
|
|
|
1403
|
- const char *str1 = pPgsqlConn->getString(i);
|
|
|
1404
|
- //int vs=PQgetlength(((PgConn *)rs->conn)->res,0,0);
|
|
|
1405
|
- //memcpy(&v,str1,sizeof(v));
|
|
|
1406
|
- ((char *)&v)[7] = str1[0];
|
|
|
1407
|
- ((char *)&v)[6] = str1[1];
|
|
|
1408
|
- ((char *)&v)[5] = str1[2];
|
|
|
1409
|
- ((char *)&v)[4] = str1[3];
|
|
|
1410
|
- ((char *)&v)[3] = str1[4];
|
|
|
1411
|
- ((char *)&v)[2] = str1[5];
|
|
|
1412
|
- ((char *)&v)[1] = str1[6];
|
|
|
1413
|
- ((char *)&v)[0] = str1[7];
|
|
|
1414
|
- //number 有问题。
|
|
|
1415
|
-
|
1219
|
+ if (*a)
|
1416
|
{
|
1220
|
{
|
1417
|
- char sz1[100];
|
|
|
1418
|
- StringHelp::modp_dtoa2(v, sz1, 5);
|
|
|
1419
|
- sprintf(buff, R"(,"%s":"%s")", str, sz1);
|
|
|
1420
|
- properties += buff;
|
|
|
1421
|
- //sprintf(sql, "<%s:%s>%s</%s:%s>", "dmp", str, sz1, "dmp", str);
|
1221
|
+ double da = *a / 255.0;
|
|
|
1222
|
+ unsigned char *pix = (unsigned char *)pixptr;
|
|
|
1223
|
+ pix[0] = *r / da;
|
|
|
1224
|
+ pix[1] = *g / da;
|
|
|
1225
|
+ pix[2] = *b / da;
|
|
|
1226
|
+ pix[3] = *a;
|
1422
|
}
|
1227
|
}
|
1423
|
- //sprintf(sql,"<%s:%s>%lf</%s:%s>","dmp",str,v,"dmp",str);
|
|
|
1424
|
- //ab->AppendString(sql);
|
|
|
1425
|
- }
|
|
|
1426
|
- break;
|
|
|
1427
|
- case PGFieldType::TimestampWithoutTimeZone:
|
|
|
1428
|
- {
|
|
|
1429
|
- std::string s = pPgsqlConn->getString(i);
|
|
|
1430
|
- StringHelp::ToJSONString(s);
|
|
|
1431
|
- sprintf(buff, R"(,"%s":"%s")", str, s.c_str());
|
|
|
1432
|
- properties += buff;
|
|
|
1433
|
- //sprintf(sql, "<%s:%s>%s</%s:%s>", "dmp", str, s.c_str(), "dmp", str);
|
|
|
1434
|
- //ab->AppendString(sql);
|
|
|
1435
|
- }
|
|
|
1436
|
- case PGFieldType::VarCharFieldType:
|
|
|
1437
|
- {
|
|
|
1438
|
-
|
|
|
1439
|
- std::string s = pPgsqlConn->getString(i);
|
|
|
1440
|
- StringHelp::ToJSONString(s);
|
|
|
1441
|
- sprintf(buff, R"(,"%s":"%s")", str, s.c_str());
|
|
|
1442
|
- properties += buff;
|
|
|
1443
|
- //sprintf(sql, "<%s:%s>%s</%s:%s>", "dmp", str, s.c_str(), "dmp", str);
|
|
|
1444
|
- ///ab->AppendString(sql);
|
|
|
1445
|
- }
|
1228
|
+ else
|
|
|
1229
|
+ {
|
|
|
1230
|
+ *pixptr = 0;
|
|
|
1231
|
+ }
|
|
|
1232
|
+ pixptr++;
|
|
|
1233
|
+ a += rb->data.rgba.pixel_step;
|
|
|
1234
|
+ r += rb->data.rgba.pixel_step;
|
|
|
1235
|
+ g += rb->data.rgba.pixel_step;
|
|
|
1236
|
+ b += rb->data.rgba.pixel_step;
|
1446
|
}
|
1237
|
}
|
1447
|
}
|
1238
|
}
|
1448
|
-
|
|
|
1449
|
- if(geometry != "")
|
|
|
1450
|
- {
|
|
|
1451
|
- ab->AppendString(R"(,"geometry":)");
|
|
|
1452
|
- ab->AppendString(geometry.c_str());
|
|
|
1453
|
- }
|
|
|
1454
|
-
|
|
|
1455
|
- if (properties != "")
|
1239
|
+ else
|
1456
|
{
|
1240
|
{
|
1457
|
- ab->AppendString(R"(,"properties":)");
|
|
|
1458
|
- properties[0] = '{';
|
|
|
1459
|
- ab->AppendString(properties.c_str());
|
|
|
1460
|
- ab->AppendString("}");
|
1241
|
+ for (col = 0; col < rb->width; col++)
|
|
|
1242
|
+ {
|
|
|
1243
|
+ unsigned char *pix = (unsigned char *)pixptr;
|
|
|
1244
|
+ pix[0] = *r;
|
|
|
1245
|
+ pix[1] = *g;
|
|
|
1246
|
+ pix[2] = *b;
|
|
|
1247
|
+ pixptr++;
|
|
|
1248
|
+ r += rb->data.rgba.pixel_step;
|
|
|
1249
|
+ g += rb->data.rgba.pixel_step;
|
|
|
1250
|
+ b += rb->data.rgba.pixel_step;
|
|
|
1251
|
+ }
|
1461
|
}
|
1252
|
}
|
1462
|
- ab->AppendString("}");
|
|
|
1463
|
- //tickAA=GetTickCount();
|
|
|
1464
|
-
|
|
|
1465
|
- //sprintf(sql, "</%s:%s>\r", "dmp", layerName);
|
|
|
1466
|
- //ab->AppendString(sql);
|
|
|
1467
|
- //ab->AppendString("</gml:featureMember>");
|
|
|
1468
|
|
1253
|
|
1469
|
- count++;
|
|
|
1470
|
- //if(pointCount>25)break;
|
1254
|
+ png_write_row(png_ptr, (png_bytep)rowdata);
|
1471
|
}
|
1255
|
}
|
|
|
1256
|
+ png_write_end(png_ptr, info_ptr);
|
|
|
1257
|
+ free(rowdata);
|
|
|
1258
|
+ png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
|
1259
|
+ return MS_SUCCESS;
|
1472
|
}
|
1260
|
}
|
1473
|
- catch (...)
|
|
|
1474
|
- {
|
|
|
1475
|
- return;
|
|
|
1476
|
- }
|
|
|
1477
|
-
|
|
|
1478
|
- ab->AppendString("]}");
|
|
|
1479
|
-
|
|
|
1480
|
- return ;
|
|
|
1481
|
-}
|
|
|
1482
|
-
|
|
|
1483
|
|
1261
|
|
|
|
1262
|
+
|
1484
|
|
1263
|
|
1485
|
} |
1264
|
} |