public function GetTileModificationDate($mapDefIdStr, $groupName, $scaleIndex, $row, $col)
 {
     $tileCacheName = str_replace("Library://", "", $mapDefIdStr);
     $tileCacheName = str_replace(".MapDefinition", "", $tileCacheName);
     $tileCacheName = str_replace("/", "_", $tileCacheName);
     $path = sprintf("%s/%s/S%s/%s/%s/%s/%s_%s.%s", $this->app->config("MapGuide.PhysicalTilePath"), $tileCacheName, $scaleIndex, $groupName, MgTileServiceController::GetFolderName("R", $row), MgTileServiceController::GetFolderName("C", $col), MgTileServiceController::GetTileIndexString($row), MgTileServiceController::GetTileIndexString($col), $this->app->config("MapGuide.TileImageFormat"));
     //var_dump($path);
     //die;
     $path = str_replace("/", DIRECTORY_SEPARATOR, $path);
     if (file_exists($path)) {
         return filemtime($path);
     } else {
         //$this->app->response->header("X-Debug-Message", "Could not fetch mtime of $path. File does not exist");
         return false;
     }
 }
 *        tags={"session"},
 *          @SWG\Parameter(name="session", in="path", required=true, type="string", description="Your MapGuide Session ID"),
 *          @SWG\Parameter(name="resName", in="path", required=true, type="string", description="The name of the Map Definition"),
 *          @SWG\Parameter(name="groupName", in="path", required=true, type="string", description="The tiled group of the Map Definition"),
 *          @SWG\Parameter(name="scaleIndex", in="path", required=true, type="integer", description="The finite scale index"),
 *          @SWG\Parameter(name="col", in="path", required=true, type="integer", description="The column of the tile to fetch"),
 *          @SWG\Parameter(name="row", in="path", required=true, type="integer", description="The row of the tile to fetch"),
 *          @SWG\Parameter(name="type", in="path", required=true, type="string", description="The tile type", enum={"img"}),
 *        @SWG\Response(response=400, description="You supplied a bad request due to one or more missing or invalid parameters"),
 *        @SWG\Response(response=401, description="Session ID or MapGuide credentials not specified"),
 *        @SWG\Response(response=500, description="An error occurred during the operation")
 *     )
 */
$app->get("/session/:sessionId/:resName.MapDefinition/tile.:format/:groupName/:scaleIndex/:col/:row", function ($sessionId, $resName, $format, $groupName, $scaleIndex, $col, $row) use($app) {
    $resId = new MgResourceIdentifier("Session:{$sessionId}//{$resName}.MapDefinition");
    $ctrl = new MgTileServiceController($app);
    $ctrl->GetTile($resId, $groupName, $scaleIndex, $col, $row, $format);
});
//============================== Mapping Service APIs =====================================
/**
 *     @SWG\Get(
 *        path="/session/{session}/{resName}.LayerDefinition/legend/{scale}/{geomType}/{themecat}/icon.{type}",
 *        operationId="GenerateLegendImage",
 *        summary="Generates the specified icon for the given Layer Definition",
 *        tags={"session"},
 *          @SWG\Parameter(name="session", in="path", required=true, type="string", description="Your MapGuide Session ID"),
 *          @SWG\Parameter(name="resName", in="path", required=true, type="string", description="The name of the Layer Definition"),
 *          @SWG\Parameter(name="scale", in="path", required=true, type="number", description="The scale at which the symbolization is requested"),
 *          @SWG\Parameter(name="geomType", in="path", required=true, type="integer", description="The type of symbolization required: 1=Point, 2=Line, 3=Area, 4=Composite"),
 *          @SWG\Parameter(name="themecat", in="path", required=true, type="integer", description="The value indicating which theme category swatch to return. Used when there is a theme defined at this scale"),
 *          @SWG\Parameter(name="width", in="query", required=true, type="integer", description="The requested image width in pixels"),