1
/******************************************************************************
2
* $Id: mapkml.cpp 11506 2011-04-07 21:08:48Z assefa $
5
* Purpose: Headers for mapkml.cpp Google Earth KML output
6
* Author: David Kana and the MapServer team
8
******************************************************************************
9
* Copyright (c) 1996-2009 Regents of the University of Minnesota.
11
* Permission is hereby granted, free of charge, to any person obtaining a
12
* copy of this software and associated documentation files (the "Software"),
13
* to deal in the Software without restriction, including without limitation
14
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
15
* and/or sell copies of the Software, and to permit persons to whom the
16
* Software is furnished to do so, subject to the following conditions:
18
* The above copyright notice and this permission notice shall be included in
19
* all copies of this Software or works derived from this Software.
21
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27
* DEALINGS IN THE SOFTWARE.
28
*****************************************************************************/
29
#include "mapserver.h"
33
#include "mapkmlrenderer.h"
39
KmlRenderer* getKmlRenderer(imageObj* img)
41
return (KmlRenderer*) img->img.plugin;
44
imageObj* msCreateImageKml(int width, int height, outputFormatObj *format, colorObj* bg)
46
imageObj *image = NULL;
48
image = (imageObj*)malloc(sizeof(imageObj));
49
MS_CHECK_ALLOC(image, sizeof(imageObj), NULL);
50
memset(image, 0, sizeof(imageObj));
52
KmlRenderer *ren = new KmlRenderer(width, height, format, bg);
53
image->img.plugin = (void *) ren;
58
int msSaveImageKml(imageObj *img, FILE *fp, outputFormatObj *format)
60
KmlRenderer* renderer = getKmlRenderer(img);
61
return renderer->saveImage(img, fp, format);
64
int msRenderLineKml(imageObj *img, shapeObj *p, strokeStyleObj *style)
66
KmlRenderer* renderer = getKmlRenderer(img);
67
renderer->renderLine(img, p, style);
71
int msRenderPolygonKml(imageObj *img, shapeObj *p, colorObj *color)
73
KmlRenderer* renderer = getKmlRenderer(img);
74
renderer->renderPolygon(img, p, color);
78
int msRenderPolygonTiledKml(imageObj *img, shapeObj *p, imageObj *tile)
80
/*KmlRenderer* renderer = getKmlRenderer(img);*/
84
int msRenderLineTiledKml(imageObj *img, shapeObj *p, imageObj *tile)
89
int msRenderGlyphsKml(imageObj *img, double x, double y,
90
labelStyleObj *style, char *text)
92
KmlRenderer* renderer = getKmlRenderer(img);
93
renderer->renderGlyphs(img, x, y, style, text);
97
int msRenderVectorSymbolKml(imageObj *img, double x, double y,
98
symbolObj *symbol, symbolStyleObj *style)
100
KmlRenderer* renderer = getKmlRenderer(img);
101
renderer->renderVectorSymbol(img, x, y, symbol, style);
105
int msRenderPixmapSymbolKml(imageObj *img, double x, double y,
106
symbolObj *symbol, symbolStyleObj *style)
108
KmlRenderer* renderer = getKmlRenderer(img);
109
renderer->renderPixmapSymbol(img, x, y, symbol, style);
113
int msRenderEllipseSymbolKml(imageObj *image, double x, double y,
114
symbolObj *symbol, symbolStyleObj *style)
116
KmlRenderer* renderer = getKmlRenderer(image);
117
renderer->renderEllipseSymbol(image, x, y, symbol, style);
121
int msRenderTruetypeSymbolKml(imageObj *image, double x, double y,
122
symbolObj *symbol, symbolStyleObj *style)
124
KmlRenderer* renderer = getKmlRenderer(image);
125
renderer->renderTruetypeSymbol(image, x, y, symbol, style);
130
int msRenderTileKml(imageObj *img, imageObj *tile, double x, double y)
135
int msGetRasterBufferKml(imageObj *img,rasterBufferObj *rb)
137
return MS_FAILURE; //not supported for kml
141
int msGetTruetypeTextBBoxKml(rendererVTableObj *r,char *font, double size, char *string,
142
rectObj *rect, double **advances)
149
int numglyphs = msGetNumGlyphs(string);
150
*advances = (double*) msSmallMalloc(numglyphs * sizeof (double));
151
for(int i=0;i<numglyphs;i++) {
152
(*advances)[i] = size;
158
int msStartNewLayerKml(imageObj *img, mapObj *map, layerObj *layer)
160
KmlRenderer* renderer = getKmlRenderer(img);
161
return renderer->startNewLayer(img, layer);
164
int msCloseNewLayerKml(imageObj *img, mapObj *map, layerObj *layer)
166
KmlRenderer* renderer = getKmlRenderer(img);
167
return renderer->closeNewLayer(img, layer);
170
int msFreeImageKml(imageObj *image)
172
KmlRenderer* renderer = getKmlRenderer(image);
177
image->img.plugin=NULL;
181
int msFreeSymbolKml(symbolObj *symbol)
186
int msStartShapeKml(imageObj *img, shapeObj *shape)
188
KmlRenderer* renderer = getKmlRenderer(img);
189
renderer->startShape(img, shape);
193
int msEndShapeKml(imageObj *img, shapeObj *shape)
195
KmlRenderer* renderer = getKmlRenderer(img);
196
renderer->endShape(img, shape);
200
int msMergeRasterBufferKml(imageObj *dest, rasterBufferObj *overlay, double opacity, int srcX,
201
int srcY, int dstX, int dstY, int width, int height) {
202
KmlRenderer* renderer = getKmlRenderer(dest);
203
return renderer->mergeRasterBuffer(dest,overlay);
213
int aggInitializeRasterBuffer(rasterBufferObj *rb, int width, int height, int mode);
215
int msPopulateRendererVTableKML( rendererVTableObj *renderer )
219
renderer->supports_transparent_layers = 1;
220
renderer->supports_pixel_buffer = 0;
221
renderer->supports_bitmap_fonts = 0;
222
renderer->supports_clipping = 0;
223
renderer->use_imagecache = 0;
224
renderer->default_transform_mode = MS_TRANSFORM_NONE;
226
renderer->startLayer = msStartNewLayerKml;
227
renderer->endLayer = msCloseNewLayerKml;
228
renderer->renderLine=&msRenderLineKml;
229
renderer->createImage=&msCreateImageKml;
230
renderer->saveImage=&msSaveImageKml;
231
renderer->renderPolygon=&msRenderPolygonKml;
232
renderer->renderGlyphs=&msRenderGlyphsKml;
233
renderer->renderEllipseSymbol = &msRenderEllipseSymbolKml;
234
renderer->renderVectorSymbol = &msRenderVectorSymbolKml;
235
renderer->renderPixmapSymbol = &msRenderPixmapSymbolKml;
236
renderer->renderTruetypeSymbol = &msRenderTruetypeSymbolKml;
237
renderer->mergeRasterBuffer = &msMergeRasterBufferKml;
238
renderer->loadImageFromFile = msLoadMSRasterBufferFromFile;
239
renderer->initializeRasterBuffer = aggInitializeRasterBuffer;
240
renderer->getTruetypeTextBBox = &msGetTruetypeTextBBoxKml;
241
renderer->renderTile = &msRenderTileKml;
242
renderer->renderPolygonTiled = &msRenderPolygonTiledKml;
243
renderer->renderLineTiled = NULL;
244
renderer->freeSymbol = &msFreeSymbolKml;
245
renderer->freeImage=&msFreeImageKml;
246
renderer->mergeRasterBuffer = msMergeRasterBufferKml;
248
renderer->startShape=&msStartShapeKml;
249
renderer->endShape=&msEndShapeKml;
253
msSetError(MS_MISCERR, "KML Driver requested but is not built in",
254
"msPopulateRendererVTableKML()");