52 #include <rok4/datasource/DataSource.h>
59 #include <rok4/utils/TileMatrixSet.h>
62 #include "ServerConf.h"
63 #include "ServicesConf.h"
64 #include "GetFeatureInfoEncoder.h"
65 #include <rok4/utils/BoundingBox.h>
84 std::vector<pthread_t> threads;
90 volatile bool running;
126 std::string wmsCapabilities;
132 std::string wmtsCapabilities;
138 std::string tmsCapabilities;
144 std::map<std::string, std::string> ogctilesCapabilities;
156 static void* thread_loop (
void* arg );
165 void buildWMSCapabilities();
173 void buildWMTSCapabilities();
181 void buildTMSCapabilities();
189 void buildOGCTILESCapabilities();
199 DataSource* getTileParamWMTS (
Request* request,
Layer*& layer, TileMatrixSet*& tms, TileMatrix*& tm,
int& tileCol,
int& tileRow, std::string& format, Style*& style);
209 DataSource* getTileParamTMS (
Request* request,
Layer*& layer, TileMatrixSet*& tms, TileMatrix*& tm,
int& tileCol,
int& tileRow, std::string& format, Style*& style);
219 DataSource* getTileParamOGCTILES (
Request* request,
Layer*& layer, TileMatrixSet*& tms, TileMatrix*& tm,
int& tileCol,
int& tileRow, std::string& format, Style*& style);
229 DataStream* getMapParamWMS (
Request* request, std::vector<Layer*>& layers, BoundingBox< double >& bbox,
int& width,
int& height, CRS*& crs, std::string& format, std::vector<Style*>& styles, std::map< std::string, std::string >& format_option,
int& dpi);
239 DataStream* getCapParamWMS (
Request* request, std::string& version );
249 DataStream* getCapParamWMTS (
Request* request, std::string& version );
259 DataStream* getLayerParamTMS (
Request* request,
Layer*& layer );
269 DataStream* getFeatureInfoParamWMS (
270 Request* request, std::vector<Layer*>& layers, std::vector<Layer*>& query_layers,
271 BoundingBox< double >& bbox,
int& width,
int& height, CRS*& crs, std::string& format,
272 std::vector<Style*>& styles, std::string& info_format,
int& X,
int& Y,
int& feature_count,std::map <std::string, std::string >& format_option
283 DataStream* getFeatureInfoParamWMTS (
Request* request,
Layer*& layer, TileMatrixSet*& tms, TileMatrix*& tm,
int &tileCol,
int &tileRow, std::string &format, Style* &style, std::string& info_format,
int& X,
int& Y);
303 Image *styleImage(Image *curImage, Rok4Format::eformat_data pyrType, Style *style, std::string format,
int size, Pyramid *pyr);
323 Image *mergeImages(std::vector<Image*> images, Rok4Format::eformat_data &pyrType, Style *style, CRS* crs, BoundingBox<double> bbox);
345 DataStream *formatImage(Image *image, std::string format, Rok4Format::eformat_data pyrType, std::map<std::string, std::string> format_option,
int size, Style *style);
357 DataStream* WMSGetCapabilities (
Request* request );
369 DataStream* WMTSGetCapabilities (
Request* request );
381 DataStream* TMSGetCapabilities (
Request* request );
393 DataStream* OGCTILESGetCapabilities (
Request* request );
405 DataStream* GlobalGetServices (
Request* request );
417 DataStream* TMSGetLayer (
Request* request );
429 DataStream* TMSGetLayerMetadata (
Request* request );
441 DataStream* TMSGetLayerGDAL (
Request* request );
453 DataStream* AdminCreateLayer (
Request* request );
465 DataStream* AdminBuildCapabilities (
Request* request );
477 DataStream* AdminDeleteLayer (
Request* request );
489 DataStream* AdminUpdateLayer (
Request* request );
501 DataStream* getMap (
Request* request );
513 DataSource* getTile (
Request* request );
525 DataStream* WMSGetFeatureInfo (
Request* request );
537 DataStream* WMTSGetFeatureInfo (
Request* request );
549 DataStream* OGCTILESGetFeatureInfo (
Request* request );
551 DataStream* CommonGetFeatureInfo ( std::string service,
Layer* layer, BoundingBox<double> bbox,
int width,
int height, CRS* crs, std::string info_format ,
int X,
int Y, std::string format,
int feature_count);
557 void processWMS (
Request *request, FCGX_Request& fcgxRequest );
562 void processWMTS (
Request *request, FCGX_Request& fcgxRequest );
567 void processTMS (
Request *request, FCGX_Request& fcgxRequest );
572 void processOGCTILES (
Request *request, FCGX_Request& fcgxRequest );
577 void processAdmin (
Request *request, FCGX_Request& fcgxRequest );
582 void processHealthCheck (
Request *request, FCGX_Request& fcgxRequest );
587 void processGlobal (
Request *request, FCGX_Request& fcgxRequest );
592 void processRequest (
Request *request, FCGX_Request& fcgxRequest );
606 static std::vector<std::string> split (
const std::string &s,
char delim ) {
607 std::vector<std::string> elems;
608 std::stringstream ss ( s );
610 while ( std::getline ( ss, item, delim ) ) {
611 elems.push_back ( item );
620 static std::string numToStr (
long int i ) {
621 std::ostringstream strstr;
630 static std::string doubleToStr (
long double d ) {
631 std::ostringstream strstr;
632 strstr.setf ( std::ios::fixed,std::ios::floatfield );
633 strstr.precision ( 16 );
650 static std::string getParam ( std::map<std::string, std::string>& option, std::string paramName ) {
651 std::map<std::string, std::string>::iterator it = option.find ( paramName );
652 if ( it == option.end() ) {
681 void run(sig_atomic_t signal_pending = 0);
718 void setPID (
int processID );
734 void setTime (
long processTime );