int main(int argc, char *argv[]) { mapObj *map=NULL; imageObj *img=NULL; if(argc > 1 && strcmp(argv[1], "-v") == 0) { printf("%s\n", msGetVersion()); exit(0); } if( argc < 3 ) { fprintf(stdout,"Syntax: legend [mapfile] [output image]\n" ); exit(0); } map = msLoadMap(argv[1], NULL); if(!map) { msWriteError(stderr); exit(0); } img = msDrawLegend(map, MS_FALSE); if(!img) { msWriteError(stderr); exit(0); } msSaveImage(NULL, img, argv[2]); msFreeImage(img); msFreeMap(map); return(MS_TRUE); }
/** * \private \memberof mapcache_source_mapserver * \sa mapcache_source::configuration_check() */ void _mapcache_source_mapserver_configuration_check(mapcache_context *ctx, mapcache_cfg *cfg, mapcache_source *source) { mapcache_source_mapserver *src = (mapcache_source_mapserver*)source; mapObj *map; /* check all required parameters are configured */ if(!src->mapfile) { ctx->set_error(ctx, 400, "mapserver source %s has no <mapfile> configured",source->name); } if(!src->mapfile) { ctx->set_error(ctx,400,"mapserver source \"%s\" has no mapfile configured",src->source.name); return; } msSetup(); /* do a test load to check the mapfile is correct */ map = msLoadMap(src->mapfile, NULL); if(!map) { msWriteError(stderr); ctx->set_error(ctx,400,"failed to load mapfile \"%s\"",src->mapfile); return; } msFreeMap(map); }
int main(int argc, char *argv[]) { mapObj *map=NULL; imageObj *image = NULL; msSetup(); if(argc > 1 && strcmp(argv[1], "-v") == 0) { printf("%s\n", msGetVersion()); exit(0); } /* ---- check the number of arguments, return syntax if not correct ---- */ if( argc < 3 ) { fprintf(stdout,"Syntax: scalebar [mapfile] [output image]\n" ); exit(1); } map = msLoadMap(argv[1], NULL); if(!map) { msWriteError(stderr); exit(1); } image = msDrawScalebar(map); if(!image) { msWriteError(stderr); exit(1); } msSaveImage(map, image, argv[2]); msFreeImage(image); msFreeMap(map); return(MS_TRUE); }
/* That's the second part of the overall magic. This function will be called * when the configuration reaches the "WMS_Map" parameter. It will be passed * in as argument and should contain the full path and name of the map file. * We try to load it and store the resulting mapObj in the config of the * current directory. If we fail we throw a message... */ static const char* mapserver_set_map (cmd_parms *cmd, void *config, const char *arg) { mapserver_dir_config *conf = (mapserver_dir_config*) config; /* if the mapObj already exists the WMS_Map was given more than once - * may be the user forgot to comment something out... */ if (conf->map) { msWriteError (stderr); return (char*) apr_psprintf (cmd->temp_pool, "An MAP-file has already been registered for " "this URI - not accepting '%s'.", arg ); } /* Simply try loading the argument as map file. */ conf->mapfile_name = apr_pstrdup(cmd->pool, arg); conf->map = msLoadMap ((char*) arg, NULL); /* Ooops - we failed. We report it and fail. So beware: Always do a * configcheck before really restarting your web server! */ if (!conf->map) { msWriteError (stderr); return (char*) apr_psprintf (cmd->temp_pool, "The given MAP-file '%s' could not be loaded", arg); } apr_finfo_t status; if (apr_stat (&status, conf->mapfile_name, APR_FINFO_MTIME, cmd->pool) != APR_SUCCESS) { ap_log_error (APLOG_MARK, APLOG_WARNING, 0, NULL, "%s: unable to stat file %s", __func__, conf->mapfile_name); } conf->mtime = status.mtime; return NULL; }
static apr_status_t _ms_get_mapobj(void **conn_, void *params, apr_pool_t *pool) { mapcache_source_mapserver *src = (mapcache_source_mapserver*) params; struct mc_mapobj *mcmap = calloc(1,sizeof(struct mc_mapobj)); *conn_ = mcmap; mcmap->map = msLoadMap(src->mapfile,NULL); if(!mcmap->map) { errorObj *errors = NULL; msWriteError(stderr); errors = msGetErrorObj(); mcmap->error = apr_psprintf(pool,"Failed to load mapfile '%s'. Mapserver reports: %s",src->mapfile, errors->message); return APR_EGENERAL; } msMapSetLayerProjections(mcmap->map); return APR_SUCCESS; }
int main(int argc, char *argv[]) { FILE *stream; int ns,n,k; gdImagePtr img; shapeObj p; int i,j; int ncols,nrows; char buffer[256]; int gray, green, red, black, white; classObj class; symbolSetObj symbolSet; /* ---- check the number of arguments, return syntax if not correct ---- */ if( argc < 2 ) { fprintf(stdout, "Syntax: sym2img [symbolset] [outfile]\n" ); exit(0); } /* Initialize the polygon/polyline */ p.line = (lineObj *)malloc(sizeof(lineObj)); p.numlines = 1; p.line[0].point = (pointObj *)malloc(sizeof(pointObj)*4); p.line[0].numpoints = 4; /* Initialize the symbol and font sets */ symbolSet.filename = msStrdup(argv[1]); /* ** load the symbol file */ if(msLoadSymbolSet(&symbolSet) == -1) { msWriteError(stderr); exit(1); } ns = symbolSet.numsymbols; if(ns < NCOLS) { ncols = ns; nrows = 1; } else { ncols = NCOLS; nrows = (int)ceil((double)ns/NCOLS); } img = gdImageCreate(ncols*CELLSIZE, nrows*CELLSIZE); gray = gdImageColorAllocate(img, 222, 222, 222); white = gdImageColorAllocate(img, 255, 255, 255); green = gdImageColorAllocate(img, 40, 170, 40); black = gdImageColorAllocate(img, 0, 0, 0); red = gdImageColorAllocate(img, 255, 0, 0); class.color = red; class.backgroundcolor = white; class.outlinecolor = black; n=0; for(i=0; n<ns;i+=CELLSIZE) { k=0; for(j=0; n<ns;j+=CELLSIZE) { if (k == ncols) break; k++; gdImageFilledRectangle(img,j,i,j+CELLSIZE, i+CELLSIZE, gray); class.symbol = n; switch(symbolSet.type) { case(MS_MARKERSET): class.sizescaled = RATIO*CELLSIZE; p.line[0].point[0].x = MS_NINT(j + CELLSIZE/2); p.line[0].point[0].y = MS_NINT(i + CELLSIZE/2); p.line[0].numpoints = 1; msDrawMarkerSymbol(&(symbolSet), img, &(p.line[0].point[0]), &(class)); break; case(MS_LINESET): class.sizescaled = 1; p.line[0].point[0].x = j; p.line[0].point[0].y = i + (CELLSIZE-LBUF) - 1; p.line[0].point[1].x = j + MS_NINT((CELLSIZE-LBUF)/3.0) - 1; p.line[0].point[1].y = i; p.line[0].point[2].x = j + MS_NINT(2*(CELLSIZE-LBUF)/3.0) - 1; p.line[0].point[2].y = i + (CELLSIZE-LBUF) - 1; p.line[0].point[3].x = j + (CELLSIZE-LBUF) - 1; p.line[0].point[3].y = i; p.line[0].numpoints = 4; msDrawLineSymbol(&(symbolSet), img, &p, &(class)); break; case(MS_SHADESET): class.sizescaled = 5; p.line[0].point[0].x = j; p.line[0].point[0].y = i; p.line[0].point[1].x = j + CELLSIZE-1; p.line[0].point[1].y = i; p.line[0].point[2].x = j + CELLSIZE-1; p.line[0].point[2].y = i + CELLSIZE-1 ; p.line[0].point[3].x = j; p.line[0].point[3].y = i + CELLSIZE-1; p.line[0].numpoints = 4; msDrawShadeSymbol(&(symbolSet), img, &p, &(class)); break; default: break; } if(symbolSet.symbol[n]->name) snprintf(buffer, sizeof(buffer), "%d - %s", n, symbolSet.symbol[n]->name); else snprintf(buffer, sizeof(buffer), "%d", n); gdImageString(img, gdFontTiny, j+1, i+1, buffer, black); n++; } } if((stream = fopen(argv[2],"wb")) == NULL) { /* open the file */ fprintf(stderr, "Unable to open output file: %s\n", argv[2]); exit(1); } #ifndef USE_GD_1_6 gdImageGif(img, stream); #else gdImagePng(img, stream); #endif gdImageDestroy(img); free(symbolSet.filename); fclose(stream); return(MS_TRUE); }
int main(int argc, char *argv[]) { int i,j,k; mapObj *map=NULL; imageObj *image = NULL; char **layers=NULL; int num_layers=0; int layer_found=0; char *outfile=NULL; /* no -o sends image to STDOUT */ int iterations = 1; int draws = 0; for(i=1;i<argc;i++) { if (strcmp(argv[i],"-c") == 0) { /* user specified number of draws */ iterations = atoi(argv[i+1]); printf("We will draw %d times...\n", iterations); continue; } if(strcmp(argv[i], "-all_debug") == 0 && i < argc-1 ) /* global debug */ { int debug_level = atoi(argv[++i]); msSetGlobalDebugLevel(debug_level); /* Send output to stderr by default */ if (msGetErrorFile() == NULL) msSetErrorFile("stderr", NULL); continue; } } for(draws=0; draws<iterations; draws++) { struct mstimeval requeststarttime, requestendtime; if(msGetGlobalDebugLevel() >= MS_DEBUGLEVEL_TUNING) msGettimeofday(&requeststarttime, NULL); if(argc > 1 && strcmp(argv[1], "-v") == 0) { printf("%s\n", msGetVersion()); exit(0); } /* ---- check the number of arguments, return syntax if not correct ---- */ if( argc < 3 ) { fprintf(stdout, "\nPurpose: convert a mapfile to an image\n\n"); fprintf(stdout, "Syntax: shp2img -m mapfile [-o image] [-e minx miny maxx maxy] [-s sizex sizey]\n" " [-l \"layer1 [layers2...]\"] [-i format]\n" " [-all_debug n] [-map_debug n] [-layer_debug n] [-p n] [-c n] [-d layername datavalue]\n"); fprintf(stdout," -m mapfile: Map file to operate on - required\n" ); fprintf(stdout," -i format: Override the IMAGETYPE value to pick output format\n" ); fprintf(stdout," -o image: output filename (stdout if not provided)\n"); fprintf(stdout," -e minx miny maxx maxy: extents to render\n"); fprintf(stdout," -s sizex sizey: output image size\n"); fprintf(stdout," -l layers: layers / groups to enable - make sure they are quoted and space seperated if more than one listed\n" ); fprintf(stdout," -all_debug n: Set debug level for map and all layers\n" ); fprintf(stdout," -map_debug n: Set map debug level\n" ); fprintf(stdout," -layer_debug layer_name n: Set layer debug level\n" ); fprintf(stdout," -c n: draw map n number of times\n" ); fprintf(stdout," -p n: pause for n seconds after reading the map\n" ); fprintf(stdout," -d layername datavalue: change DATA value for layer\n" ); exit(0); } if ( msSetup() != MS_SUCCESS ) { msWriteError(stderr); exit(1); } /* Use MS_ERRORFILE and MS_DEBUGLEVEL env vars if set */ if ( msDebugInitFromEnv() != MS_SUCCESS ) { msWriteError(stderr); msCleanup(0); exit(1); } for(i=1;i<argc;i++) { /* Step though the user arguments, 1st to find map file */ if(strcmp(argv[i],"-m") == 0) { map = msLoadMap(argv[i+1], NULL); if(!map) { msWriteError(stderr); msCleanup(0); exit(1); } msApplyDefaultSubstitutions(map); } } if(!map) { fprintf(stderr, "Mapfile (-m) option not specified.\n"); msCleanup(0); exit(1); } for(i=1;i<argc;i++) { /* Step though the user arguments */ if(strcmp(argv[i],"-m") == 0) { /* skip it */ i+=1; } if(strcmp(argv[i],"-p") == 0) { int pause_length = atoi(argv[i+1]); time_t start_time = time(NULL); printf( "Start pause of %d seconds.\n", pause_length ); while( time(NULL) < start_time + pause_length ) {} printf( "Done pause.\n" ); i+=1; } if(strcmp(argv[i],"-o") == 0) { /* load the output image filename */ outfile = argv[i+1]; i+=1; } if(strcmp(argv[i],"-i") == 0) { outputFormatObj *format; format = msSelectOutputFormat( map, argv[i+1] ); if( format == NULL ) printf( "No such OUTPUTFORMAT as %s.\n", argv[i+1] ); else { msFree( (char *) map->imagetype ); map->imagetype = msStrdup( argv[i+1] ); msApplyOutputFormat( &(map->outputformat), format, map->transparent, map->interlace, map->imagequality ); } i+=1; } if(strcmp(argv[i],"-d") == 0) { /* swap layer data */ for(j=0; j<map->numlayers; j++) { if(strcmp(GET_LAYER(map, j)->name, argv[i+1]) == 0) { free(GET_LAYER(map, j)->data); GET_LAYER(map, j)->data = msStrdup(argv[i+2]); break; } } i+=2; } if(strcmp(argv[i], "-all_debug") == 0 && i < argc-1 ) /* global debug */ { int debug_level = atoi(argv[++i]); /* msSetGlobalDebugLevel() already called. Just need to force debug * level in map and all layers */ map->debug = debug_level; for(j=0; j<map->numlayers; j++) { GET_LAYER(map, j)->debug = debug_level; } } if(strcmp(argv[i], "-map_debug") == 0 && i < argc-1 ) /* debug */ { map->debug = atoi(argv[++i]); /* Send output to stderr by default */ if (msGetErrorFile() == NULL) msSetErrorFile("stderr", NULL); } if(strcmp(argv[i], "-layer_debug") == 0 && i < argc-1 ) /* debug */ { const char *layer_name = argv[++i]; int debug_level = atoi(argv[++i]); int got_layer = 0; for(j=0; j<map->numlayers; j++) { if(strcmp(GET_LAYER(map, j)->name,layer_name) == 0 ) { GET_LAYER(map, j)->debug = debug_level; got_layer = 1; } } if( !got_layer ) fprintf( stderr, " Did not find layer '%s' from -layer_debug switch.\n", layer_name ); /* Send output to stderr by default */ if (msGetErrorFile() == NULL) msSetErrorFile("stderr", NULL); } if(strcmp(argv[i],"-e") == 0) { /* change extent */ if( argc <= i+4 ) { fprintf( stderr, "Argument -e needs 4 space separated numbers as argument.\n" ); msCleanup(0); exit(1); } map->extent.minx = atof(argv[i+1]); map->extent.miny = atof(argv[i+2]); map->extent.maxx = atof(argv[i+3]); map->extent.maxy = atof(argv[i+4]); i+=4; } if (strcmp(argv[i], "-s") == 0) { msMapSetSize(map, atoi(argv[i+1]), atoi(argv[i+2])); i+=2; } if(strcmp(argv[i],"-l") == 0) { /* load layer list */ layers = msStringSplit(argv[i+1], ' ', &(num_layers)); for(j=0; j<num_layers; j++) { /* loop over -l */ layer_found=0; for(k=0; k<map->numlayers; k++) { if((GET_LAYER(map, k)->name && strcasecmp(GET_LAYER(map, k)->name, layers[j]) == 0) || (GET_LAYER(map, k)->group && strcasecmp(GET_LAYER(map, k)->group, layers[j]) == 0)) { layer_found = 1; break; } } if (layer_found==0) { fprintf(stderr, "Layer (-l) \"%s\" not found\n", layers[j]); msCleanup(0); exit(1); } } for(j=0; j<map->numlayers; j++) { if(GET_LAYER(map, j)->status == MS_DEFAULT) continue; else { GET_LAYER(map, j)->status = MS_OFF; for(k=0; k<num_layers; k++) { if((GET_LAYER(map, j)->name && strcasecmp(GET_LAYER(map, j)->name, layers[k]) == 0) || (GET_LAYER(map, j)->group && strcasecmp(GET_LAYER(map, j)->group, layers[k]) == 0)) { GET_LAYER(map, j)->status = MS_ON; break; } } } } msFreeCharArray(layers, num_layers); i+=1; } } image = msDrawMap(map, MS_FALSE); if(!image) { msWriteError(stderr); msFreeMap(map); msCleanup(0); exit(1); } if( msSaveImage(map, image, outfile) != MS_SUCCESS ) { msWriteError(stderr); } msFreeImage(image); msFreeMap(map); if(msGetGlobalDebugLevel() >= MS_DEBUGLEVEL_TUNING) { msGettimeofday(&requestendtime, NULL); msDebug("shp2img total time: %.3fs\n", (requestendtime.tv_sec+requestendtime.tv_usec/1.0e6)- (requeststarttime.tv_sec+requeststarttime.tv_usec/1.0e6) ); } msCleanup(0); } /* for(draws=0; draws<iterations; draws++) { */ return(0); } /* ---- END Main Routine ---- */