Changeset 7569
- Timestamp:
- 05/07/08 02:43:15 (2 months ago)
- Files:
-
- trunk/mapserver/mapoutput.c (modified) (2 diffs)
- trunk/mapserver/mapserver.h (modified) (2 diffs)
- trunk/mapserver/maptemplate.c (modified) (21 diffs)
- trunk/mapserver/maptemplate.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/mapserver/mapoutput.c
r7418 r7569 1 1 /****************************************************************************** 2 * $Id :$2 * $Id$ 3 3 * 4 4 * Project: MapServer … … 273 273 format->renderer = MS_RENDER_WITH_SVG; 274 274 } 275 276 if( strcasecmp(driver,"template") == 0 ) { 277 format = msAllocOutputFormat( map, "template", driver ); 278 format->mimetype = strdup("text/html"); 279 format->extension = strdup("html"); 280 format->imagemode = 0; 281 format->renderer = MS_RENDER_WITH_TEMPLATE; 282 } 283 275 284 if( format != NULL ) 276 format->inmapfile = MS_FALSE;285 format->inmapfile = MS_FALSE; 277 286 278 287 return format; trunk/mapserver/mapserver.h
r7558 r7569 278 278 #define MS_DRIVER_SVG(format) (strncasecmp((format)->driver,"svg",3)==0) 279 279 #define MS_DRIVER_AGG(format) (strncasecmp((format)->driver,"agg/",3)==0) 280 281 282 #define MS_RENDER_WITH_GD 1280 #define MS_DRIVER_TEMPLATE(format) (strncasecmp((format)->driver,"template",8)==0) 281 282 #define MS_RENDER_WITH_GD 1 283 283 #define MS_RENDER_WITH_SWF 2 284 284 #define MS_RENDER_WITH_RAWDATA 3 285 #define MS_RENDER_WITH_PDF 4285 #define MS_RENDER_WITH_PDF 4 286 286 #define MS_RENDER_WITH_IMAGEMAP 5 287 287 #define MS_RENDER_WITH_SVG 6 288 288 #define MS_RENDER_WITH_AGG 7 289 #define MS_RENDER_WITH_TEMPLATE 8 /* query results only */ 289 290 290 291 #define MS_RENDERER_GD(format) ((format)->renderer == MS_RENDER_WITH_GD) … … 295 296 #define MS_RENDERER_SVG(format) ((format)->renderer == MS_RENDER_WITH_SVG) 296 297 #define MS_RENDERER_AGG(format) ((format)->renderer == MS_RENDER_WITH_AGG) 298 #define MS_RENDERER_TEMPLATE(format) ((format)->renderer == MS_RENDER_WITH_TEMPLATE) 297 299 298 300 #define MS_CELLSIZE(min,max,d) ((max - min)/(d-1)) /* where min/max are from an MapServer pixel center-to-pixel center extent */ trunk/mapserver/maptemplate.c
r7561 r7569 179 179 } 180 180 181 int msReturnTemplateQuery(mapservObj *mapserv, char * pszMimeType, char **papszBuffer)181 int msReturnTemplateQuery(mapservObj *mapserv, char *queryFormat, char **papszBuffer) 182 182 { 183 183 imageObj *img = NULL; … … 185 185 char buffer[1024]; 186 186 187 if(!pszMimeType) { 188 msSetError(MS_WEBERR, "Mime type not specified.", "msReturnTemplateQuery()"); 187 outputFormatObj *outputFormat; 188 189 if(!queryFormat) { 190 msSetError(MS_WEBERR, "Return format/mime-type not specified.", "msReturnTemplateQuery()"); 189 191 return MS_FAILURE; 190 192 } 191 192 if(mapserv->Map->querymap.status) { 193 checkWebScale(mapserv); 194 195 img = msDrawMap(mapserv->Map, MS_TRUE); 196 if(!img) return MS_FAILURE; 197 198 snprintf(buffer, 1024, "%s%s%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat)); 199 200 status = msSaveImage(mapserv->Map, img, buffer); 201 if(status != MS_SUCCESS) return status; 202 203 msFreeImage(img); 204 205 if((mapserv->Map->legend.status == MS_ON || mapserv->UseShapes) && mapserv->Map->legend.template == NULL) { 206 img = msDrawLegend(mapserv->Map, MS_FALSE); 193 194 /* does the format reference an outputFormatObj */ 195 if((outputFormat = msSelectOutputFormat( mapserv->Map, queryFormat)) != NULL) { 196 197 printf("got an output format!\n"); 198 199 } else { 200 if(mapserv->Map->querymap.status) { 201 checkWebScale(mapserv); 202 203 img = msDrawMap(mapserv->Map, MS_TRUE); 207 204 if(!img) return MS_FAILURE; 208 snprintf(buffer, 1024, "%s%sleg%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat)); 205 206 snprintf(buffer, 1024, "%s%s%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat)); 207 209 208 status = msSaveImage(mapserv->Map, img, buffer); 210 209 if(status != MS_SUCCESS) return status; 210 211 211 msFreeImage(img); 212 } 212 213 if((mapserv->Map->legend.status == MS_ON || mapserv->UseShapes) && mapserv->Map->legend.template == NULL) { 214 img = msDrawLegend(mapserv->Map, MS_FALSE); 215 if(!img) return MS_FAILURE; 216 snprintf(buffer, 1024, "%s%sleg%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat)); 217 status = msSaveImage(mapserv->Map, img, buffer); 218 if(status != MS_SUCCESS) return status; 219 msFreeImage(img); 220 } 213 221 214 if(mapserv->Map->scalebar.status == MS_ON) {215 img = msDrawScalebar(mapserv->Map);216 if(!img) return MS_FAILURE;217 snprintf(buffer, 1024, "%s%ssb%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat));218 status = msSaveImage( mapserv->Map, img, buffer);219 if(status != MS_SUCCESS) return status;220 msFreeImage(img);221 }222 if(mapserv->Map->scalebar.status == MS_ON) { 223 img = msDrawScalebar(mapserv->Map); 224 if(!img) return MS_FAILURE; 225 snprintf(buffer, 1024, "%s%ssb%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat)); 226 status = msSaveImage( mapserv->Map, img, buffer); 227 if(status != MS_SUCCESS) return status; 228 msFreeImage(img); 229 } 222 230 223 if(mapserv->Map->reference.status == MS_ON) { 224 img = msDrawReferenceMap(mapserv->Map); 225 if(!img) return MS_FAILURE; 226 snprintf(buffer, 1024, "%s%sref%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat)); 227 status = msSaveImage(mapserv->Map, img, buffer); 228 if(status != MS_SUCCESS) return status; 229 msFreeImage(img); 230 } 231 } 232 233 if((status = msReturnQuery(mapserv, pszMimeType, papszBuffer)) != MS_SUCCESS) 234 return status; 231 if(mapserv->Map->reference.status == MS_ON) { 232 img = msDrawReferenceMap(mapserv->Map); 233 if(!img) return MS_FAILURE; 234 snprintf(buffer, 1024, "%s%sref%s.%s", mapserv->Map->web.imagepath, mapserv->Map->name, mapserv->Id, MS_IMAGE_EXTENSION(mapserv->Map->outputformat)); 235 status = msSaveImage(mapserv->Map, img, buffer); 236 if(status != MS_SUCCESS) return status; 237 msFreeImage(img); 238 } 239 } 240 241 if((status = msReturnQuery(mapserv, queryFormat, papszBuffer)) != MS_SUCCESS) 242 return status; 243 } 235 244 236 245 return MS_SUCCESS; … … 845 854 846 855 mapserv->LRN = 1; /* layer result counter */ 847 msInitShape(&(mapserv-> ResultShape));856 msInitShape(&(mapserv->resultshape)); 848 857 849 858 for(i=0; i<layer->resultcache->numresults; i++) { 850 status = msLayerGetShape(layer, &(mapserv-> ResultShape), layer->resultcache->results[i].tileindex, layer->resultcache->results[i].shapeindex);859 status = msLayerGetShape(layer, &(mapserv->resultshape), layer->resultcache->results[i].tileindex, layer->resultcache->results[i].shapeindex); 851 860 if(status != MS_SUCCESS) return status; 852 861 … … 855 864 for(j=0; j<layer->numjoins; j++) { 856 865 if(layer->joins[j].type == MS_JOIN_ONE_TO_ONE) { 857 msJoinPrepare(&(layer->joins[j]), &(mapserv-> ResultShape));866 msJoinPrepare(&(layer->joins[j]), &(mapserv->resultshape)); 858 867 msJoinNext(&(layer->joins[j])); /* fetch the first row */ 859 868 } … … 868 877 869 878 free(tagInstance); 870 msFreeShape(&(mapserv-> ResultShape)); /* init too */879 msFreeShape(&(mapserv->resultshape)); /* init too */ 871 880 872 881 mapserv->RN++; /* increment counters */ … … 958 967 if(lp->resultcache && lp->resultcache->numresults > 0) { 959 968 /* output the tag content */ 969 *line = msStringConcatenate(*line, tag); 960 970 } 961 971 962 972 *line = msStringConcatenate(*line, postTag); 973 974 /* clean up */ 975 msFreeHashTable(tagArgs); tagArgs=NULL; 976 free(postTag); 977 free(tag); 963 978 964 979 return(MS_SUCCESS); … … 2633 2648 if((outbuf = strdup("")) == NULL) return(NULL); /* empty at first */ 2634 2649 2635 msJoinPrepare(join, &(mapserv-> ResultShape)); /* execute the join */2650 msJoinPrepare(join, &(mapserv->resultshape)); /* execute the join */ 2636 2651 while(msJoinNext(join) == MS_SUCCESS) { 2637 2652 /* First time through, deal with the header (if necessary) and open the main template. We only */ … … 3037 3052 } 3038 3053 3054 if(processResultSetTag(mapserv, &outstr, stream) != MS_SUCCESS) 3055 return(NULL); 3056 3039 3057 if(mode == QUERY) { /* return shape and/or values */ 3040 3041 if(processResultSetTag(mapserv, &outstr, stream) != MS_SUCCESS)3042 return(NULL);3043 3058 3044 3059 /* allow layer metadata access in a query template, within the context of a query no layer name is necessary */ … … 3059 3074 } 3060 3075 3061 sprintf(repstr, "%f %f", (mapserv-> ResultShape.bounds.maxx + mapserv->ResultShape.bounds.minx)/2, (mapserv->ResultShape.bounds.maxy + mapserv->ResultShape.bounds.miny)/2);3076 sprintf(repstr, "%f %f", (mapserv->resultshape.bounds.maxx + mapserv->resultshape.bounds.minx)/2, (mapserv->resultshape.bounds.maxy + mapserv->resultshape.bounds.miny)/2); 3062 3077 outstr = msReplaceSubstring(outstr, "[shpmid]", repstr); 3063 sprintf(repstr, "%f", (mapserv-> ResultShape.bounds.maxx + mapserv->ResultShape.bounds.minx)/2);3078 sprintf(repstr, "%f", (mapserv->resultshape.bounds.maxx + mapserv->resultshape.bounds.minx)/2); 3064 3079 outstr = msReplaceSubstring(outstr, "[shpmidx]", repstr); 3065 sprintf(repstr, "%f", (mapserv-> ResultShape.bounds.maxy + mapserv->ResultShape.bounds.miny)/2);3080 sprintf(repstr, "%f", (mapserv->resultshape.bounds.maxy + mapserv->resultshape.bounds.miny)/2); 3066 3081 outstr = msReplaceSubstring(outstr, "[shpmidy]", repstr); 3067 3082 3068 sprintf(repstr, "%f %f %f %f", mapserv-> ResultShape.bounds.minx, mapserv->ResultShape.bounds.miny, mapserv->ResultShape.bounds.maxx, mapserv->ResultShape.bounds.maxy);3083 sprintf(repstr, "%f %f %f %f", mapserv->resultshape.bounds.minx, mapserv->resultshape.bounds.miny, mapserv->resultshape.bounds.maxx, mapserv->resultshape.bounds.maxy); 3069 3084 outstr = msReplaceSubstring(outstr, "[shpext]", repstr); 3070 3085 … … 3073 3088 free(encodedstr); 3074 3089 3075 sprintf(repstr, "%d", mapserv-> ResultShape.classindex);3090 sprintf(repstr, "%d", mapserv->resultshape.classindex); 3076 3091 outstr = msReplaceSubstring(outstr, "[shpclass]", repstr); 3077 3092 3078 if(processShpxyTag(mapserv->ResultLayer, &outstr, &mapserv-> ResultShape) != MS_SUCCESS)3093 if(processShpxyTag(mapserv->ResultLayer, &outstr, &mapserv->resultshape) != MS_SUCCESS) 3079 3094 return(NULL); 3080 3095 3081 sprintf(repstr, "%f", mapserv-> ResultShape.bounds.minx);3096 sprintf(repstr, "%f", mapserv->resultshape.bounds.minx); 3082 3097 outstr = msReplaceSubstring(outstr, "[shpminx]", repstr); 3083 sprintf(repstr, "%f", mapserv-> ResultShape.bounds.miny);3098 sprintf(repstr, "%f", mapserv->resultshape.bounds.miny); 3084 3099 outstr = msReplaceSubstring(outstr, "[shpminy]", repstr); 3085 sprintf(repstr, "%f", mapserv-> ResultShape.bounds.maxx);3100 sprintf(repstr, "%f", mapserv->resultshape.bounds.maxx); 3086 3101 outstr = msReplaceSubstring(outstr, "[shpmaxx]", repstr); 3087 sprintf(repstr, "%f", mapserv-> ResultShape.bounds.maxy);3102 sprintf(repstr, "%f", mapserv->resultshape.bounds.maxy); 3088 3103 outstr = msReplaceSubstring(outstr, "[shpmaxy]", repstr); 3089 3104 3090 sprintf(repstr, "%ld", mapserv-> ResultShape.index);3105 sprintf(repstr, "%ld", mapserv->resultshape.index); 3091 3106 outstr = msReplaceSubstring(outstr, "[shpidx]", repstr); 3092 sprintf(repstr, "%d", mapserv-> ResultShape.tileindex);3107 sprintf(repstr, "%d", mapserv->resultshape.tileindex); 3093 3108 outstr = msReplaceSubstring(outstr, "[tileidx]", repstr); 3094 3109 … … 3097 3112 char *valuestr=NULL; 3098 3113 3099 valuestr = msJoinStrings(mapserv-> ResultShape.values, mapserv->ResultLayer->numitems, ",");3114 valuestr = msJoinStrings(mapserv->resultshape.values, mapserv->ResultLayer->numitems, ","); 3100 3115 outstr = msReplaceSubstring(outstr, "[values]", valuestr); 3101 3116 free(valuestr); … … 3106 3121 snprintf(substr, PROCESSLINE_BUFLEN, "[%s]", mapserv->ResultLayer->items[i]); 3107 3122 if(strstr(outstr, substr) != NULL) { 3108 encodedstr = msEncodeHTMLEntities(mapserv-> ResultShape.values[i]);3123 encodedstr = msEncodeHTMLEntities(mapserv->resultshape.values[i]); 3109 3124 outstr = msReplaceSubstring(outstr, substr, encodedstr); 3110 3125 free(encodedstr); … … 3114 3129 snprintf(substr, PROCESSLINE_BUFLEN, "[%s_esc]", mapserv->ResultLayer->items[i]); 3115 3130 if(strstr(outstr, substr) != NULL) { 3116 encodedstr = msEncodeUrl(mapserv-> ResultShape.values[i]);3131 encodedstr = msEncodeUrl(mapserv->resultshape.values[i]); 3117 3132 outstr = msReplaceSubstring(outstr, substr, encodedstr); 3118 3133 free(encodedstr); … … 3122 3137 snprintf(substr, PROCESSLINE_BUFLEN, "[%s_raw]", mapserv->ResultLayer->items[i]); 3123 3138 if(strstr(outstr, substr) != NULL) 3124 outstr = msReplaceSubstring(outstr, substr, mapserv-> ResultShape.values[i]);3139 outstr = msReplaceSubstring(outstr, substr, mapserv->resultshape.values[i]); 3125 3140 } 3126 3141 3127 if(processItemTag(mapserv->ResultLayer, &outstr, &mapserv-> ResultShape) != MS_SUCCESS)3142 if(processItemTag(mapserv->ResultLayer, &outstr, &mapserv->resultshape) != MS_SUCCESS) 3128 3143 return(NULL); 3129 3144 … … 3326 3341 } 3327 3342 3328 msInitShape(&(mapserv-> ResultShape));3343 msInitShape(&(mapserv->resultshape)); 3329 3344 3330 3345 if((mapserv->Mode == ITEMQUERY) || (mapserv->Mode == QUERY)) { /* may need to handle a URL result set */ … … 3359 3374 if(status != MS_SUCCESS) return status; 3360 3375 3361 status = msLayerGetShape(lp, &(mapserv-> ResultShape), lp->resultcache->results[0].tileindex, lp->resultcache->results[0].shapeindex);3376 status = msLayerGetShape(lp, &(mapserv->resultshape), lp->resultcache->results[0].tileindex, lp->resultcache->results[0].shapeindex); 3362 3377 if(status != MS_SUCCESS) return status; 3363 3378 … … 3367 3382 if(status != MS_SUCCESS) return status; 3368 3383 3369 msJoinPrepare(&(lp->joins[k]), &(mapserv-> ResultShape));3384 msJoinPrepare(&(lp->joins[k]), &(mapserv->resultshape)); 3370 3385 msJoinNext(&(lp->joins[k])); /* fetch the first row */ 3371 3386 } … … 3376 3391 } 3377 3392 3378 msFreeShape(&(mapserv-> ResultShape));3393 msFreeShape(&(mapserv->resultshape)); 3379 3394 msLayerClose(lp); 3380 3395 mapserv->ResultLayer = NULL; … … 3449 3464 mapserv->LRN = 1; /* layer result number */ 3450 3465 for(j=0; j<lp->resultcache->numresults; j++) { 3451 status = msLayerGetShape(lp, &(mapserv-> ResultShape), lp->resultcache->results[j].tileindex, lp->resultcache->results[j].shapeindex);3466 status = msLayerGetShape(lp, &(mapserv->resultshape), lp->resultcache->results[j].tileindex, lp->resultcache->results[j].shapeindex); 3452 3467 if(status != MS_SUCCESS) return status; 3453 3468 … … 3456 3471 for(k=0; k<lp->numjoins; k++) { 3457 3472 if(lp->joins[k].type == MS_JOIN_ONE_TO_ONE) { 3458 msJoinPrepare(&(lp->joins[k]), &(mapserv-> ResultShape));3473 msJoinPrepare(&(lp->joins[k]), &(mapserv->resultshape)); 3459 3474 msJoinNext(&(lp->joins[k])); /* fetch the first row */ 3460 3475 } … … 3469 3484 if(msReturnPage(mapserv, template, QUERY, papszBuffer) != MS_SUCCESS) return MS_FAILURE; 3470 3485 3471 msFreeShape(&(mapserv-> ResultShape)); /* init too */3486 msFreeShape(&(mapserv->resultshape)); /* init too */ 3472 3487 3473 3488 mapserv->RN++; /* increment counters */ trunk/mapserver/maptemplate.h
r7553 r7569 80 80 81 81 82 shapeObj SelectShape, ResultShape;82 shapeObj SelectShape, resultshape; 83 83 84 84 rectObj RawExt;
